Как лучше всего хранить данные пользователей на смарт-контракте? Предположим, у нас есть n пользователей, и мы хотим сохранить имя каждого пользователя и другие его данные. Должны ли мы создавать смарт-контракт индивидуально для каждого пользователя?
Создайте такую структуру:
struct User {
uint256 id;
bytes32 name;
// other stuff
bool set; // This boolean is used to differentiate between unset and zero struct values
}
И создайте сопоставление:
mapping(address => User) public users;
Вы также можете использовать другие значения в качестве индекса, но это только для демонстрации.
Теперь, чтобы создать пользователя, используйте такую функцию:
function createUser(address _userAddress, uint256 _userId, bytes32 _userName) public {
User storage user = users[_userAddress];
// Check that the user did not already exist:
require(!user.set);
//Store the user
users[_userAddress] = User({
id: _userId,
name: _userName,
set: true
});
}
Готово!
РЕДАКТИРОВАТЬ Как вы указали в комментариях, вы хотите сохранить хэш информации о пользователе в смарт-контракте. Это еще проще: просто сохраните хэши в отображении.
Это сопоставление, которое вы используете для хранения хэшей:
mapping(uint256 => bytes32) public userDataHashes;
Теперь функция для установки хэша для идентификатора пользователя становится:
function storeUserDataHash(uint256 _userId, bytes32 _dataHash) public {
userDataHashes[_userId] = _dataHash;
}
Лаури Пелтонен
Хенк
Анубхав Гупта
Хенк
Анубхав Гупта
Хенк
bytes32 currentUserHash = userDataHashes[currentUsersId]
. Или в web3.js:theContract.userDataHashes(currentUsersId)