尝试访问安全帽中结构的 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.+ 版本教程到实战》