如何在Solidity中部署后保留数据

时间:2018-06-04 11:18:19

标签: blockchain ethereum solidity distributed-apps

我对Solidity很新,并且总体上与以太坊合作。 在(d)应用程序中,我需要能够将数据保存到分类帐中,但我不确定我是否了解其工作原理。

我们说我有以下合同(简化实用性):

contract UserContract {
    struct User {
        address walletAddress;
        string organisation;
        string fName;
        string lName;
        string email;
        uint index;
    }
    mapping(address => User) private users;
    address[] private userIndex;


    function insertUser(
        address walletAddress,
        string organisation,
        string fName,
        string lName,
        string email        )
      public
      returns(uint index) {
          User memory newUser = User({
            walletAddress: walletAddress,
            organisation: organisation,
            fName: fName,
            lName: lName,
            email: email,
            index: users.length
            });

            users.push(newUser);
            userIndex[walletAddress] = newUser.index;
            return newUser.index;
    }
}

使用insertUser()方法,我可以插入新用户,并使用getter方法检索用户的信息。

现在,如果我更新合同(从而部署一个新合同),users映射再次为空,这并不奇怪。

我的问题:如何以未来合同版本可访问的方式存储数据?任何与此过程一致的设计模式?

谢谢!

1 个答案:

答案 0 :(得分:3)

正如您所知道的那样,存储的数据不会随新合同一起传输,并且在几次使用后将数据复制到新合同将是一项昂贵的任务......最好的办法是将功能与数据存储分开。

与一些仅处理数据存储的基本setter和getter创建合同(如果需要,从特定的合同地址处理)...然后创建连接到数据合同的主要功能合同。