Добавление дополнительных полей данных к информации об учетной записи в Substrate
Очень новичок в Substrate и Rust. Насколько я понимаю, ChainState действует как база данных, в которой хранятся номера счетов (в данном случае открытые ключи) и связанные с ними балансы. При совершении транзакции Substrate в основном проверяет, есть ли у вас достаточный баланс, и если это так, транзакция завершается успешно. (Это отличается от метода UTXO, используемого в Биткойне.)
Прежде всего, если я ошибаюсь в вышеизложенном, поправьте меня.
Если я прав (или, по крайней мере, близок), я хотел бы найти метод для связывания других данных с каждой учетной записью. Я заметил, что в демонстрациях учетные записи также связаны с именами, такими как Алиса, Боб и т. Д. Это хранится в ChainState или это то, что будет храниться только на собственном узле?
Я пытаюсь определить способ связать дополнительные данные с учетными записями в ChainState. Например, как я могу сохранить имя (например, Алиса, Боб и т. Д.) В ChainState (при условии, что они хранятся только локально) или даже другую информацию, такую как день рождения владельца учетной записи или его любимого автора, или какая произвольная информация?
2 ответа
Состояние цепочки - это просто состояние всего, не обязательно связанное с идентификаторами учетных записей. Он, помимо прочего, хранит балансы и тому подобное, да, но также и многие другие вещи, которые так или иначе хранила цепочка.
Чтобы добавить пользовательские данные, вы должны создать новую структуру (карту), а затем сопоставить идентификаторы учетных записей с любыми данными, которые вы хотите. В качестве примера:
decl_storage! {
trait Store for Module<T: Trait> as TemplateModule {
/// The storage item for our proofs.
/// It maps a proof to the user who made the claim and when they made it.
Proofs: map hasher(blake2_128_concat) Vec<u8> => (T::AccountId, T::BlockNumber);
}
}
Вышеуказанное объявляет карту хранилища, которая будет связывать хэш с кортежем учетной записи и номера блока. Таким образом, запрос хэша вернет эти два значения. Вы также можете сделать обратное и связать Account ID с каким-либо другим значением, например строкой (Vec<u8>
).
Я рекомендую пройти через это руководство, из которого я взял приведенный выше фрагмент: он покажет вам, как именно добавлять пользовательскую информацию в цепочку.
Ответ, данный @Swader, был очень хорошим, поскольку он носил общий характер. Я буду больше изучать этот ответ, поскольку я пытаюсь связать больше типов информации. (Я проголосовал за него, но мой голос не отображается, потому что я относительно новичок в Stackru, по крайней мере, в этой учетной записи.)
После небольшого поиска я также нашел этот учебник: Добавить поддон в среду выполнения. Эта палитра специально добавляет возможность связывать никнейм с идентификатором учетной записи, что было примером, который я привел в своем вопросе. Ответ @ Swader, однако, был более общим и, следовательно, более полезным и более подробным ответом на мой вопрос.
Между прочим, псевдонимы сохраняются в шестнадцатеричной кодировке и также возвращаются в шестнадцатеричной кодировке. Простой способ проверить, что шестнадцатеричная кодировка фактически эквивалентна заданному нику, - это посетить https://convertstring.com/EncodeDecode/HexDecode и вставить шестнадцатеричную строку без начального 0x.