Viv*_*mbi 3 ethereum solidity smartcontracts
这是我的合约代码。在这里,我试图存储特定旅行的坐标。同时存储信息合约执行良好。但是当我检索数据时,它应该给出坐标数组。但它抛出一个错误。
原因:'uint256 类型的数据不足'
contract TripHistory {
struct Trip {
string lat;
string lon;
}
mapping(string => Trip[]) trips;
function getTrip(string _trip_id) public view returns (Trip[]) {
return trips[_trip_id];
}
function storeTrip(string _trip_id, string _lat, string _lon) public {
trips[_trip_id].push(Trip(_lat, _lon));
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么。有没有其他方法可以实现我在这里尝试的目标?
PS:我是 Solidity 的新手。
Solidity 不直接支持第一个返回结构。相反,您需要返回结构中的每个单独元素,如下所示。
Function xyz(uint256 _value) returns(uint256 User.x, uint256 User.y)
public {}
Run Code Online (Sandbox Code Playgroud)
但是有一个实验性功能可以帮助您返回结构。您需要做的就是在第一个 pragma 行之后添加以下内容
pragma experimental ABIEncoderV2;
Run Code Online (Sandbox Code Playgroud)
然后继续你的代码。这应该可以在不更改代码的情况下工作。
可以在此链接中找到 abiencoderv2 返回结构的示例