web3.py中如何调用 需要指定地址才可以调用的方法?

我对合约内的一个方法做了权限管理,指定地址才可以调用此方法,ethers中在创建合约是直接在最后传入钱包对象就可以了,web3.py我试了很多次问了GPT都无法解决,无论是call还是build_transaction都不行,麻烦大佬们了

请先 登录 后评论

最佳答案 2023-12-24 14:26

实例化合约对象

contract = w3.eth.contract(address=GAME_ADDRESS, abi=GAME_ABI)

调用者的私钥

private_key = os.getenv("KEY")

调用者的地址

caller_address = w3.to_checksum_address("0x12345678912345678912345678")

构建交易参数

nonce = w3.eth.get_transaction_count(caller_address) gas_price = w3.eth.gas_price gas_limit = 100000 # 根据合约方法的复杂性和资源消耗进行调整 chain_id = w3.eth.chain_id

构建交易对象

transaction = contract.functions.addBalance(user_address, amount).build_transaction({ 'chainId': chain_id, 'gas': gas_limit, 'gasPrice': gas_price, 'nonce': nonce, 'from': caller_address })

对交易进行签名

signed_transaction = w3.eth.account.sign_transaction(transaction, private_key=private_key)

发送交易

transaction_hash = w3.eth.send_raw_transaction(signed_transaction.rawTransaction)

等待交易确认

transaction_receipt = w3.eth.wait_for_transaction_receipt(transaction_hash)

请先 登录 后评论

其它 1 个回答

Jeack
请先 登录 后评论
  • 1 关注
  • 0 收藏,1421 浏览
  • CNM&OK 提出于 2023-12-23 19:59