尝试访问安全帽中结构的 Solidity 数组时出错,操作码无效

Posted

技术标签:

【中文标题】尝试访问安全帽中结构的 Solidity 数组时出错,操作码无效【英文标题】:Error invalid opcode trying to access Solidity array of structs in Hardhat 【发布时间】:2021-12-07 18:28:35 【问题描述】:

我的 Solidity 代码中有以下结构和数组:

    struct Character 
        int256 strength;
        uint256 dexterity;
        uint256 constitution;
       ....
    

    Character[] public characters;

我的 Hardhat 测试中有以下行试图访问该数组的成员:

const character = await contract.characters(0)

然后我得到以下错误:

 Error: VM Exception while processing transaction: invalid opcode
      at Contract.characters 

访问这个结构数组的成员的正确方法是什么?

【问题讨论】:

您是否在characters 数组中添加了任何项目,或者发生错误时它是空的? @PetrHejda 没有,你知道的。请随意回答问题,我将其标记为正确! 【参考方案1】:

正如问题注释中所指出的,characters 数组在调用 characters(0) 函数时为空。

Solidity 为 public 数组自动生成 getter 函数,允许使用其索引访问数组中的一项。

当您尝试访问超出范围的索引时,EVM 会引发异常。

【讨论】:

以上是关于尝试访问安全帽中结构的 Solidity 数组时出错,操作码无效的主要内容,如果未能解决你的问题,请参考以下文章

如何将一组结构从 web3js 发送到 Solidity 合约?

使用 truffle 在solidity 中调用函数时出现新的 BigNumber() 错误。如何修复错误?

七数组及其操作《2022 solidity8.+ 版本教程到实战》

C - 当我尝试将结构从数组复制到结构中包含的数组时出现问题

为啥在尝试使用指针访问结构时出现此分段错误?

在 C++ 中使用指针的数组:访问返回的数组时出现分段错误