solidity - 访问嵌套映射solidity
问题描述
注意:几天前我在使用solidity 0.7.0时问过这个问题。现在我使用的是 solc 0.8.0。使用新的 ABI V2 编码,这应该是可能的。但是,我仍然卡住了。
NOTE2:我知道我可以写一个 getter 来获得特定的评论。但是,我知道 gas 成本,我需要一次性获得所有评级来计算平均值,所以我认为这是不可行的。
假设我有这个数据结构布局:
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
如何访问映射内部的映射(两者都与结构有关)?
解决方案
您的reviews
映射是在您的Restaurant
结构中定义的,这就是您无法访问它的原因,您需要先访问重新启动程序才能访问其评论。
例如:
const restaurantCount = await review.methods.restaurantCount().call()
const restaurant = await review.methods.restaurants(2).call()
for(let i = 0; i > restaurant.reviewCount; i++){
let reviewObj = restaurant.reviews[i];
console.log(reviewObj);
};
推荐阅读
- gcc - Ubuntu 18.04:找不到 CMAKE_C_COMPILER
- c# - WPF Child定义的附加属性初始值
- arrays - 如何仅在 angular-laravel 中使用 1 ng-repeat 就可以查看多个对象数组值
- delphi - 创建自定义控件。我必须给他们一个名字吗?
- python - 如何将日志记录模块输出保存在python中的指定目录中
- amazon-web-services - 如何知道谁使用 AWS Serverless 应用程序启动或停止了 EC2 实例
- mysql - 不重复计数查询
- sql-server - SQL Server 2008 将数据类型作为函数的参数传递
- php - 如何响应 Volley 从手机发送的 POST 请求并将内容添加到 SQL 服务器?
- java - Hibernate 多租户命名策略