web3.py:发送以太币到智能合约
web3.py: sending ether to a smart contract
我正在使用 web3.py 与私有以太坊区块链进行交互。我想在智能合约中调用以下函数:
uint256 public cookiePrice;
function feed(string memory message) public payable {
require(cookiePrice <= msg.value);
applyFeeding(msg.sender, message);
}
我试着这样称呼它:
price = contract.functions.cookiePrice().call()
txn = contract.functions.feed("my message").buildTransaction({
'chainId': 13999911119,
'gas': 70000,
'value': price,
'gasPrice': w3.toWei('8', 'gwei'),
'nonce': int(time.time())
})
signed_txn = w3.eth.account.sign_transaction(txn, private_key=private_key)
w3.eth.sendRawTransaction(signed_txn.rawTransaction)
这似乎成功了,因为 sendRawTransaction
return 是交易的哈希值(如 the docs 中所述)。但是我在链上看到调用实际上并没有生效
上面的代码是否明显遗漏了什么?另外,如何获取sendRawTransaction
的return来帮助我调试?
您的交易可能从未被开采过,因为您的随机数太高了。帐户的随机数从 0 开始,每发送一笔交易就加 1。
您可以使用 w3.eth.getTransactionCount
为您正在使用的帐户获取正确的随机数。
即使您的代码可能会失败,也会生成交易。你必须向矿工支付执行可能修改区块链的代码的费用,如果在执行过程中失败,剩余的气体可能会返回给你,但无论如何都会创建交易,因此它的哈希值会返回给你。
所以,有可能在applyFeeding
里面执行失败了。为了以防万一,我会检查该电话中的一些内容:
price
的类型是什么?如果是 int
就没问题。
- 您没有指定
from
,因此使用默认帐户。确保这就是您想要的,并且该帐户有足够的资金,并且它的私钥是您用来签名的。
- 检查
applyFeeding
中的潜在问题,特别是与谁是发件人有关,因为它是该函数的参数。
- 检查您使用的汽油量是否足够,并且您没有 运行 没油了。
仅供参考,如果我没记错的话 web3
对 gas 价格、gas 和 nonce 等几个参数有很好的默认值,每次调用动态 calculated/estimated。
希望对您有所帮助!
我正在使用 web3.py 与私有以太坊区块链进行交互。我想在智能合约中调用以下函数:
uint256 public cookiePrice;
function feed(string memory message) public payable {
require(cookiePrice <= msg.value);
applyFeeding(msg.sender, message);
}
我试着这样称呼它:
price = contract.functions.cookiePrice().call()
txn = contract.functions.feed("my message").buildTransaction({
'chainId': 13999911119,
'gas': 70000,
'value': price,
'gasPrice': w3.toWei('8', 'gwei'),
'nonce': int(time.time())
})
signed_txn = w3.eth.account.sign_transaction(txn, private_key=private_key)
w3.eth.sendRawTransaction(signed_txn.rawTransaction)
这似乎成功了,因为 sendRawTransaction
return 是交易的哈希值(如 the docs 中所述)。但是我在链上看到调用实际上并没有生效
上面的代码是否明显遗漏了什么?另外,如何获取sendRawTransaction
的return来帮助我调试?
您的交易可能从未被开采过,因为您的随机数太高了。帐户的随机数从 0 开始,每发送一笔交易就加 1。
您可以使用 w3.eth.getTransactionCount
为您正在使用的帐户获取正确的随机数。
即使您的代码可能会失败,也会生成交易。你必须向矿工支付执行可能修改区块链的代码的费用,如果在执行过程中失败,剩余的气体可能会返回给你,但无论如何都会创建交易,因此它的哈希值会返回给你。
所以,有可能在applyFeeding
里面执行失败了。为了以防万一,我会检查该电话中的一些内容:
price
的类型是什么?如果是int
就没问题。- 您没有指定
from
,因此使用默认帐户。确保这就是您想要的,并且该帐户有足够的资金,并且它的私钥是您用来签名的。 - 检查
applyFeeding
中的潜在问题,特别是与谁是发件人有关,因为它是该函数的参数。 - 检查您使用的汽油量是否足够,并且您没有 运行 没油了。
仅供参考,如果我没记错的话 web3
对 gas 价格、gas 和 nonce 等几个参数有很好的默认值,每次调用动态 calculated/estimated。
希望对您有所帮助!