[英]python web3 interaction with smart contract
我正在使用 web3.py 来处理智能合约方法。 尽管广播成功,etherscan 认为它是“eth”传输,而不是智能合约交互。
预期的方法是 mint()。
请在下面找到我的代码:
infura_url = "https://rinkeby.infura.io/v3/<Infura code here>"
w3 = Web3(Web3.HTTPProvider(infura_url))
w3.middleware_onion.inject(geth_poa_middleware, layer=0)
address = w3.toChecksumAddress(<My wallet address>)
abi = json.loads(<ABI here>)
contract=w3.eth.contract(address=address, abi=abi)
mint_tx = contract.functions.mint(address,1).buildTransaction()
mint_tx['nonce'] = w3.eth.getTransactionCount(address)
signed_txn = w3.eth.account.sign_transaction(mint_tx, private_key=os.environ['private_key'])
txhash = w3.eth.send_raw_transaction(signed_txn.rawTransaction)
print(f'Transaction hash: {txhash.hex()}')
它应该如下所示(在 etherscan 上手动完成):
https://rinkeby.etherscan.io/tx/0xf6626aa3bbfeb67f3798ad1145ec89c8995b0db9315e88cbf9b915f4610b8872
但截至目前,它如下所示(来自 python):
https://rinkeby.etherscan.io/tx/0x6b43cebf69b82bcbf8cce654a24627688b4fe9ea7d43dd74b4fa4c1c1049a3c7
我在发送交易之前错过了一步吗?
任何帮助是极大的赞赏。 如果需要更多信息,请告诉我,谢谢!
您为您的合同使用了错误的地址。 注意 etherscan 上的To:
和Interacted With (To):
字段。
你有
contract = w3.eth.contract(address=address, abi=abi)
其中address
是你的钱包地址。
你应该有
contract = w3.eth.contract(address=contract_address, abi=abi)
在你的情况下, contract_address = '0xeB74D88306e09A78570795d7467F729ffA786651'
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.