Solidity

Solidity ^0.5.0 中結構映射內部的訪問映射

  • January 22, 2019

我有一個看起來像這樣的契約:

contract a {
   struct Str {
       uint256 totalTokens;
       mapping(address => uint256) playerTokens;
   }

   mapping(uint256 => Str) public tokenStores;
}

現在假設我們已將 tokenStores 定義為 public 並且將自動分配一個 getter 方法,是否可以使用來自 javascript 的鍵訪問特定的 playerTokens 值?Solidity ^0.5.0 中可能的任何解決方法?

您不能使用 getter from,public因為編譯器(尚)不知道如何使用嵌套鍵來製定函式。我相信如果您具體希望使用實驗性 ABI,這是可能的。

一個更安全、更傳統的解決方法是簡單地建構您自己的 getter。

contract a { 

 struct Str {
   uint256 totalTokens;
   mapping(address => uint256) playerTokens;
 }

 mapping(uint256 => Str) private tokenStores;  // we'll make the getter manually

 function getPlayerToken(uint256 tokenId, address player) public returns(uint, uint) {
     Str storage t =  tokenStores[tokenId];
     return (t.totalTokens, t.playerTokens[player]);
 }
}

希望能幫助到你。

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