Как сохранить данные после развертывания в Солидности
Я довольно новичок в 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 ответ
Поскольку, как вы знаете, сохраненные данные не будут перемещаться с новым контрактом, а копирование данных в новый контракт будет дорогостоящей задачей после нескольких использований... лучше всего отделить функциональность от хранилища данных.
Создайте контракт с некоторыми базовыми установщиками и получателями, которые занимаются только хранением данных (с определенного адреса договора, если это необходимо)... затем создайте основной функциональный договор, который подключается к договору на данные.