假设我有这个数据结构布局:
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
如何访问映射内部的映射(两者都与结构相关)?
在旧的 ABI v1 编码中,公共函数无法返回结构,包括为映射自动生成的结构。这根本不可能。您需要创建自己的访问器函数,将字段值作为元组(值列表)返回,或者使用支持 ABI v2 编码的工具链。
此外,我不确定是否会为映射的映射自动生成访问器函数,因此无论如何您最终可能会编写自己的函数。
你有没有解决这个问题的解决方案,我也遇到了同样的问题