使用web3 python的以太坊原始合约交互



我正在寻找一个在之前的合同交互的原始json/body的示例它被签名并传递给web3py/web3js/ethers

我们正在使用AWS KMS进行钱包设置。这个钱包应该执行一些自动操作。我面临的问题是,为了创建签名,必须将操作以原始格式传递给KMS。

我找到了一些教程和示例,描述了将原生令牌(以太坊本身)从KMS钱包转移到接收者的过程,所描述的过程是创建包含所有所需信息的原始字典,用给定的KMS方法对其签名,然后将其作为原始交易发布。

例如,一个简单的事务原始字典应该是这样的(post EIP-1559)

{
'nonce': nonce,
'to': 0x0131c121,
'value': 1000000000000,
'data': '0x00',
'gas': 160000,
'maxFeePerGas': max_fee_per_gas,
'maxPriorityFeePerGas': max_priority_fee_per_gas,
'type': type,
'chainId': chainid,
}
然而,我们正在尝试做的是与需要根据用户操作进行一些更改的各种契约进行交互。我认为应该工作的方法是找出给定契约交互的字典主体组件是什么样子的。如果有人能给我指出正确的方向,或者解释一下合同交互的原始json/body是什么样子的,那就太好了

其实比我想象的简单多了。

{
'nonce': nonce,
'to': 0x0131c121,
'value': 1000000000000,
'data': '0x00',
'gas': 160000,
'maxFeePerGas': max_fee_per_gas,
'maxPriorityFeePerGas': max_priority_fee_per_gas,
'type': type,
'chainId': chainid,
'data': 0x38ed1739000000000000000000000000000000000000000000000000000000009502f900000000000000000000000000000000000000000000a07e38bf71936cbe39594100000000000000000000000000000000000000000000000000000000000000a00000000000000000000000003c02cebb49f6e8f1fc96158099ffa064bbfee38b00000000000000000000000000000000000000000000000000000000616e11230000000000000000000000000000000000000000000000000000000000000003000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000528b3e98c63ce21c6f680b713918e0f89dfae555
}

data字段描述了与给定收件人地址(即合同)的交互,并按照以下规范

中的描述工作https://docs.soliditylang.org/en/latest/abi-spec.html formal-specification-of-the-encoding

长话短说,

我刚刚在web3py上使用buildTransaction函数构建了一个具有给定abi的原始事务,如

tx = usdc.functions.transfer(recipient_address, amount).buildTransaction({'from': signing_address})

usdc是合约的一个实例。