You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Web3.py调用合约时列表参数转元组致调用失败

问题分析与解决

核心问题

你遇到的参数类型不匹配,根本原因不是列表被转为元组,而是传入的第二个参数内部元素类型不符合合约函数的要求:

  • 合约函数swapExactNATIVEForTokens的第二个参数要求是(uint256[], uint8[], address[]),也就是三个数组类型组成的元组/结构体;
  • 但你传入的是(10, 1, list),其中10和1是单个整数,不是数组,这才是类型不匹配的关键。

Web3.py会自动将传入的序列(列表、元组)映射为合约对应的数组/结构体类型,但这里的问题是你给的元素类型不对,而非外层的元组格式问题。

修复代码

把第二个参数里的单个整数改成数组形式,确保每个元素都符合合约要求的数组类型:

swap_txn = btc_bridge_contract.functions.swapExactNATIVEForTokens(
        amountOfMinBtc, ([10], [1], list), address, deadline
    ).build_transaction({
        'from': address,
        'value': amount_avax,
        'gas': 300000,
        'gasPrice': gas_price,
        'nonce': nonce,
    })

额外说明

如果合约里的第二个参数是结构体类型,Web3.py接受元组或列表作为外层容器,只要内部元素的类型和数量匹配合约定义即可。你之前的list本身是正确的address数组,问题出在前面两个单个整数没有包装成数组。

内容的提问来源于stack exchange,提问作者Soska512

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 11:57:20