Python 智能合约函数调用上的ValidationError是否无明显原因(web3py)?

Python 智能合约函数调用上的ValidationError是否无明显原因(web3py)?,python,ethereum,smartcontracts,web3,web3py,Python,Ethereum,Smartcontracts,Web3,Web3py,我正在尝试调用Uniswap路由器的功能。当我在etherscan上手动输入值时,它会通过。然而,当我通过python代码执行此操作时,它会给我一个验证错误。错误如下所示: int(unix_time_stamp_deadline) web3.exceptions.ValidationError:无法识别名为SwapeXactTokens的预期函数,原因是支持FeeOnTransferTokens、类型为的位置参数和类型为{}的关键字参数。找到1个名为SwapeXactTokensForthS

我正在尝试调用Uniswap路由器的功能。当我在etherscan上手动输入值时,它会通过。然而,当我通过python代码执行此操作时,它会给我一个验证错误。错误如下所示:

int(unix_time_stamp_deadline)
web3.exceptions.ValidationError:无法识别名为SwapeXactTokens的预期函数,原因是支持FeeOnTransferTokens、类型为的位置参数和类型为{}的关键字参数。找到1个名为SwapeXactTokensForthSupportingFeeOnTransferTokens:[SwapeXactTokensForthSupportingFeeOnTransferTokensUINT256,uint256,address[],address,uint256]的函数,函数调用失败,因为没有匹配的参数类型

以下是我使用的代码:

swap = uniswap_router_contract.functions.swapExactTokensForETHSupportingFeeOnTransferTokens(uint amount, 0, list_of_two_token_addresses, my_address_string, unix_time_stamp_deadline).buildTransaction({'nonce': some_nonce})

gas_amount = web3.eth.estimateGas(swap)

print(gas amount)
在python中,我是否应该以某种方式将整数转换为无符号整数?我试过了,但没修好。我正在使用web3py库。有人能告诉我这个问题或者调用这个函数的现有代码吗

谢谢

编辑:

我将时间戳转换为int,并使用web3.toChecksum方法确保我的地址字符串是校验和

swap = uniswap_router_contract.functions.swapExactTokensForETHSupportingFeeOnTransferTokens(uint amount, 0, list_of_two_token_addresses, my_address_string, int(unix_time_stamp_deadline)).buildTransaction({'nonce': some_nonce})
gas = web3.eth.estimateGas(swap)
print(gas)
当我运行此命令时,会出现以下错误:

引发SolidityErrorresponse['error']['message'] web3.exceptions.SolidityError:已还原执行:TransferHelper: 从\u传输\u失败


您传递的参数类型与函数的预期参数类型不匹配

你通过了:

int, int, list, str, float
但该职能部门期望:

uint256, uint256, address[], address, uint256
我猜这是导致不匹配的最后一个参数,unix\u time\u stamp\u deadline。它是一个浮点,但函数需要一个int。当您将它传递给函数时,可以将其转换为int,如下所示:

int(unix_time_stamp_deadline)

您传递的参数类型与函数的预期参数类型不匹配

你通过了:

int, int, list, str, float
但该职能部门期望:

uint256, uint256, address[], address, uint256
我猜这是导致不匹配的最后一个参数,unix\u time\u stamp\u deadline。它是一个浮点,但函数需要一个int。当您将它传递给函数时,可以将其转换为int,如下所示:

int(unix_time_stamp_deadline)

谢谢,我按照你的建议做了,它似乎不再给出那个错误了。然而,我仍然无法估计交易中的天然气价格。它给了我一个稳定的执行错误,这让我感到困惑,因为我只是试图估计气体,而不是实际发送事务。如果你想看的话,我已经更新了我的OP。谢谢,我按照你的建议做了,它似乎不再给出那个错误了。然而,我仍然无法估计交易中的天然气价格。它给了我一个稳定的执行错误,这让我感到困惑,因为我只是试图估计气体,而不是实际发送事务。如果你想看的话,我已经更新了我的OP。