0

我以 JSON 对象格式将用户信息存储在 IPFS 上,然后将该文件哈希存储在区块链上。每次添加新用户对象时,我都想更新该 JSON 对象数组。我怎样才能做到这一点?

我正在使用以太坊区块链和 ReactJS

4

2 回答 2

0

IPFS 哈希基于内容,因此在这种情况下,当 JSON 数据更改时,IPFS 哈希将更改。这意味着必须更新链上的内容哈希。

  1. 从 IPFS 读取当前 JSON 数据
  2. 使用新条目更新 JSON 数据
  3. 将新的 JSON 数据添加到 IPFS
  4. 更新智能合约上的内容哈希
于 2020-12-26T22:39:49.807 回答
-1

下面是一个智能合约示例,可用于维护指向用户对象的链接列表。

每个用户都被分配了一个唯一的标识符(例如,没有分隔符的 GUID 正好适合 bytes32)。方法PutUser用于添加/更新用户对象的链接。GetUser方法用于获取指向用户对象的链接GetUsersList方法用于获取用户列表。

当您更改某个用户的对象时,将其再次放入 IPFS 并使用PutUser添加新链接

pragma solidity >=0.5.8 <0.6.0;

contract UsersList
{
    address    Owner ;

    struct IpfsLink
    {
      bytes32  used ;
       string  link ;
    }

    mapping (bytes32 => IpfsLink)  UsersIpfsLinks ;

    bytes32[]  Users ;

//
   constructor() public
   {
              Owner     = tx.origin ;
   }
// 
   function PutUser(bytes32  user_, string memory ipfs_link_) public
   {
       if(msg.sender!=Owner)  return ;

       if(UsersIpfsLinks[user_].used!="Y")
       {
             UsersIpfsLinks[user_]=IpfsLink({ used: "Y", link: ipfs_link_ }) ;

                    Users.push(user_) ;
       }
       else
       {
             UsersIpfsLinks[user_].link=ipfs_link_ ;
       }
   }
//
    function GetUser(bytes32  user_) public view returns (string memory retVal)
    {
       return(UsersIpfsLinks[user_].link) ;
    }
//
    function GetUsersList() public view returns (bytes32[] memory retVal)
    {
       return(Users) ;
    }

}
于 2020-12-26T21:42:46.477 回答