web3 eth中合约调用的.buildTransaction()参数字典获取方式咨询
buildTransaction() 传入的参数字典分为通用交易字段和受合约逻辑约束的可选字段两部分,查询方式如下:
1. 通用交易字段(和合约/ABI无关,是web3.py的固定规范)
这部分字段是所有以太坊虚拟机兼容链的交易都需要的核心字段,不需要查询合约或ABI,固定要求如下:
from:交易发起方的钱包地址,必填nonce:发起方地址的当前交易序号,通过w3.eth.get_transaction_count()获取,必填,用于避免交易重放gas:本次交易允许消耗的最大gas量,必填gasPrice:你愿意支付的gas单价(单位为wei),如果是支持EIP-1559的链,也可以用maxFeePerGas和maxPriorityFeePerGas替代该字段
这些字段不管调用什么合约的什么函数,都是必须配置的。
2. 受合约约束的字段(需要查询合约ABI或源码)
只有value字段的要求和合约函数的属性直接相关,查询方式如下:
- 找到ABI中你调用的对应函数的条目,查看
payable属性的值:- 如果
payable为true:说明该函数支持接收原生币(比如ETH、BNB),你可以按需在参数中加入value字段,值为你要转给合约的原生币数量,单位为wei。比如你调用的swapExactETHForTokens函数就是payable类型,所以需要传入value字段对应你用来兑换代币的原生币数量。 - 如果
payable为false:绝对不能传入value字段,否则交易会直接被虚拟机驳回。
- 如果
3. 额外业务规则(需要查询合约官方文档或源码)
部分合约函数会有额外的业务校验,比如onlyOwner权限控制要求from字段必须是合约owner地址,或者部分函数对gas下限有要求,这类规则不会写在ABI里,需要查阅对应合约的官方说明或者源码逻辑确认。
注意:不要把合约函数的业务入参和
buildTransaction的交易参数搞混,swapExactETHForTokens(amountOutMin, path_addresses, address_to, deadline)里的参数是业务入参,需要和ABI中对应函数的inputs列表的顺序、类型完全匹配,不属于buildTransaction的参数范围。
内容的提问来源于stack exchange,提问作者Angel2207
相关产品推荐
相关产品推荐

