你好,埃瑟姆社区,
在我的稳固代码中有几个结构体来组织事情。下面是代码中的一个结构:
struct Staking {
uint total;
uint currentIndex;
mapping(address => uint) registry;
}
Staking public staking;在编译时,我还会在abi中得到一个标记() getter。现在,在我的前端,我已经配置了以赛人npm库,并试图检索我的所有结构。呼叫
const data = await ethers.gameContract.staking();给我这个,JSON.stringified
[{"type":"BigNumber","hex":"0x00"},{"type":"BigNumber","hex":"0x00"}]我可以确认,这两个是总计和currentIndex uints。但我看不见注册表映射。
是否有一种方法可以查询像这样建模的数据,还是应该在契约块的顶层声明所有这些属性(这应该通过为abi中的每个支柱创建一个getter来解决这个问题),或者创建将检索这些嵌套映射的自定义getter函数?
编辑:从VSCode中的Remix调用staking(),我得到以下数据:
{"0":"0","1":"0","total":"0","lastIndex":"0"}现在我真的很困惑了。该对象中的前2项"0“和"1”键实际上是映射中的项吗?也许我问错了问题。但我还是想不出如何查询这个映射。
谢谢!
发布于 2023-01-18 05:44:26
ABI不包含它们,因为它们的动态大小。地图和数组的附件不返回全部数据,因此,我们根据需要进行查询。
对于映射,我们没有任何方法来迭代它。这对于声明状态变量非常有效,但是不可能为带有数组或map (动态)成员的结构提供参数。
此外,结构被转化为其所有基本成员的元组,而非基本成员被从元组中剥离。
https://ethereum.stackexchange.com/questions/143185
复制相似问题