Как сохранить данные после развертывания в Солидности

Я довольно новичок в 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 ответ

Решение

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

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

Другие вопросы по тегам