我以 JSON 对象格式将用户信息存储在 IPFS 上,然后将该文件哈希存储在区块链上。每次添加新用户对象时,我都想更新该 JSON 对象数组。我怎样才能做到这一点?
我正在使用以太坊区块链和 ReactJS
IPFS 哈希基于内容,因此在这种情况下,当 JSON 数据更改时,IPFS 哈希将更改。这意味着必须更新链上的内容哈希。
下面是一个智能合约示例,可用于维护指向用户对象的链接列表。
每个用户都被分配了一个唯一的标识符(例如,没有分隔符的 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) ;
}
}