2

我对 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映射又是空的,这并不奇怪。

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

谢谢!

4

1 回答 1

3

如您所知,存储的数据不会随新合约一起传输,并且在使用几次后将数据复制到新合约将是一项昂贵的任务……您最好的选择是将功能与数据存储分开。

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

于 2018-06-04T11:58:52.357 回答