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

如何声明Eth::Abi.decode的types参数解析Solidity结构体返回值

解决eth gem解码嵌套结构体的错误

问题分析

你遇到的undefined method 'none?' for nil:NilClass错误,是因为eth gem无法正确解析你用字符串声明的嵌套tuple类型,导致内部组件(components)被识别为nil,进而触发方法调用错误。

正确的类型声明方式

不要用单一字符串描述嵌套tuple,改用哈希数组的形式明确定义每个结构体的组件,包括内部的嵌套tuple:

types = [
  {
    type: "tuple",
    components: [
      { type: "address" },
      { type: "string" },
      { type: "uint256" },
      { type: "uint16" },
      {
        type: "tuple",
        components: [
          { type: "uint48" },
          { type: "uint48" },
          { type: "uint48" },
          { type: "uint48" },
          { type: "uint48" }
        ]
      }
    ]
  }
]

data = Eth::Abi.decode(types, response["result"])

为什么这样有效

eth gem的ABI解码器对于复杂嵌套类型,需要明确的组件结构定义,而不是紧凑的字符串格式。通过哈希数组清晰声明每个字段的类型和嵌套结构,解码器可以正确识别所有组件,避免components为nil的情况。

验证方法

解码完成后,你可以通过索引访问返回的结构体数据:

# 获取外层结构体的第一个字段(address)
address = data[0][0]
# 获取嵌套tuple的第三个字段(uint48)
nested_uint48 = data[0][4][2]

内容的提问来源于stack exchange,提问作者p.matsinopoulos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:42:33