Как сохранить данные после развертывания в Солидности - PullRequest
0 голосов
/ 04 июня 2018

Я довольно новичок в Solidity и работаю с Ethereum в целом.В приложении (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(), я могу вставить нового пользователя, а с помощью метода получателя я могу получить информацию о пользователе.

Теперь, если я обновлюконтракт (таким образом, разверните новый), отображение users снова пусто, что неудивительно.

Мой вопрос: как мне хранить данные таким образом, чтобы они были доступны для будущих версий контракта?Какие-либо шаблоны проектирования, которые согласуются с этим процессом?

Спасибо!

1 Ответ

0 голосов
/ 04 июня 2018

Поскольку, как вы знаете, сохраненные данные не будут перемещаться с новым контрактом, а копирование данных в новый контракт будет дорогостоящей задачей после нескольких использований ... лучше всего отделить функциональность от хранилища данных.

Создайте контракт с некоторыми базовыми установщиками и получателями, которые занимаются только хранением данных (с определенного адреса договора, если это необходимо) ... затем создайте основной функциональный договор, который подключается к договору на данные.

...