Solidity

將使用者詳細資訊添加到智能合約

  • April 13, 2018

在智能合約上儲存使用者數據的最佳方式是什麼?假設我們有 n 個使用者並且我們想要儲存每個使用者名和他的其他詳細資訊,我們是否必須為每個使用者單獨創建一個智能合約?

像這樣創建一個結構:

struct User {
   uint256 id;
   bytes32 name;
   // other stuff

   bool set; // This boolean is used to differentiate between unset and zero struct values
}

並創建一個映射:

mapping(address => User) public users;

您也可以使用其他值作為索引,但這只是為了展示。

現在,要創建使用者,請使用如下函式:

function createUser(address _userAddress, uint256 _userId, bytes32 _userName) public {
   User storage user = users[_userAddress];
   // Check that the user did not already exist:
   require(!user.set);
   //Store the user
   users[_userAddress] = User({
       id: _userId,
       name: _userName,
       set: true
   });
}

並做了!

編輯 正如您在評論中所說,您希望將使用者資訊的雜湊儲存在智能合約中。那更簡單:只需將雜湊儲存在映射中。

這是您用來儲存雜湊的映射:

mapping(uint256 => bytes32) public userDataHashes;

現在,為使用者 ID 設置雜湊的函式變為:

function storeUserDataHash(uint256 _userId, bytes32 _dataHash) public {
   userDataHashes[_userId] = _dataHash;
}

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