web3.js 中结构体映射的访问映射

问题描述 投票:0回答:2

假设我有这个数据结构布局:

    struct ReviewStruct {
        string rating;
        ...
    }

    struct Restaurant {
        ...
        uint reviewCount;
        mapping(uint => ReviewStruct) reviews;
    }

    uint public restaurantCount = 0;
    mapping(uint => Restaurant) public restaurants;

然后,当我尝试访问 JS 应用程序中的内容时,它可以工作,但如果我尝试访问实际评论则不行:

const restaurantCount = await review.methods.restaurantCount().call() // works
const restaurant = await review.methods.restaurants(2).call() // works
const reviewObj = await review.methods.restaurants(2).reviews(0).call() // throws an error

如何访问映射内部的映射(两者都与结构相关)?

ethereum solidity web3js
2个回答
1
投票

在旧的 ABI v1 编码中,公共函数无法返回结构,包括为映射自动生成的结构。这根本不可能。您需要创建自己的访问器函数,将字段值作为元组(值列表)返回,或者使用支持 ABI v2 编码的工具链。

此外,我不确定是否会为映射的映射自动生成访问器函数,因此无论如何您最终可能会编写自己的函数。


0
投票

你有没有解决这个问题的解决方案,我也遇到了同样的问题

© www.soinside.com 2019 - 2024. All rights reserved.