Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ethereum 如何更新IPFS上的数据_Ethereum_Ipfs_Js Ipfs - Fatal编程技术网

Ethereum 如何更新IPFS上的数据

Ethereum 如何更新IPFS上的数据,ethereum,ipfs,js-ipfs,Ethereum,Ipfs,Js Ipfs,我以JSON对象格式存储IPF上的用户信息,然后将该文件散列存储在区块链上。我想在每次添加新的用户对象时更新JSON对象数组。我怎样才能做到这一点 我正在使用以太区块链和ReactJS,下面是一个智能合约的示例,可用于维护指向用户对象的链接列表 每个用户都被分配一个唯一的标识符(例如,没有分隔符的GUID只适合字节32)。 方法PutUser用于添加/更新指向用户对象的链接。 GetUser方法用于获取指向用户对象的链接。 方法GetUsersList用于获取用户列表 当您更改某个用户的对象时,

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


我正在使用以太区块链和ReactJS,下面是一个智能合约的示例,可用于维护指向用户对象的链接列表

每个用户都被分配一个唯一的标识符(例如,没有分隔符的GUID只适合字节32)。 方法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) ;
    }

}
pragma solidity>=0.5.8 IpfsLink)用户SIPFSLINKs;
字节32[]个用户;
//
构造函数()公共
{
所有者=tx.origin;
}
// 
函数PutUser(bytes32 user,字符串内存ipfs\u link)public
{
如果(消息发送者!=所有者)返回;
if(UsersIpfsLinks[user_389;].已使用!=“Y”)
{
UsersIpfsLinks[user_]=IpfsLink({使用:“Y”,link:ipfs_link});
用户。推送(用户);
}
其他的
{
UsersIpfsLinks[user_u3;].link=ipfs_3;link;
}
}
//
函数GetUser(bytes32 user_u2;)公共视图返回(字符串内存返回)
{
return(UsersIpfsLinks[user\].link);
}
//
函数GetUsersList()公共视图返回(bytes32[]memory retVal)
{
返回(用户);
}
}

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

  • 从IPFS读取当前JSON数据
  • 使用新条目更新JSON数据
  • 向IPFS添加新的JSON数据
  • 更新智能合约上的内容哈希

  • 你能分享你试过的代码吗?