Solidity

無法通過 web3 訪問映射內的結構內的數組

  • August 17, 2019

以下是我的智能合約中的一些相關程式碼片段

 struct Constituency{
   uint16 id;
   string name;
   uint64[] cans;
 }

 mapping(uint => Constituency) public constituencies;

 function newConstituency(string memory _name) private{
   uint64[] memory tmp;
   constituencies[concount] = Constituency(concount, _name, tmp);
   concount++;
 }

 constructor() public{
   newConstituency("Bikini Bottom");
   constituencies[0].cans = [1,2,3];
 }

這是我用來訪問選區映射中的元素的 web3 片段:

election.methods.constituencies(0).call({from : defaultAccount},function(e,r){ console.log(r) })

這是它給出的響應:

Result { '0': '0', '1': 'Bikini Bottom', id: '0', name: 'Bikini Bottom' }

如您所見,它根本沒有提到數組。我能做些什麼來解決這個問題?

你必須製作自己的getter函式。Web3 無法處理這樣的二維數組返回。這是您需要的:

 function getConstituency(uint _id) external view returns (uint, string memory, uint64[]) {
     return (constituencies[_id].id, constituencies[_id].name, constituencies[_id].cans);
 }

但是還有一件事:我將根據您提供的程式碼向您展示一個範例,但是您真的應該擺脫id結構內部。這是多餘的,因為它與用於映射的數字相同,並且選區在數組中的位置相同。它只是用完儲存而無需。

希望能幫助到你!

引用自:https://ethereum.stackexchange.com/questions/73963