Добавление дополнительных полей данных к информации об учетной записи в Substrate

#cryptocurrency #parity #substrate #polkadot #polkadot-js

#криптовалюта #четность #substrate #polkadot #polkadot-js

Вопрос:

Очень новое для Substrate и Rust. Мое понимание ChainState заключается в том, что оно действует как база данных, которая содержит номера учетных записей (в данном случае открытые ключи) и связанные с ними балансы. При совершении транзакции Substrate в основном проверяет, есть ли у вас достаточный баланс, и если да, транзакция завершается успешно. (Это отличается от метода UTXO, используемого в биткойнах.)

Прежде всего, если я ошибаюсь в приведенном выше, пожалуйста, поправьте меня.

Если я прав (или, по крайней мере, близок) Я хотел бы найти способ связать другие данные с каждой учетной записью. Я заметил, что в демонстрационных версиях учетные записи также связаны с именами, такими как Алиса, Боб и т.д. Хранится ли это в ChainState или это то, что будет храниться только на собственном узле?

Я пытаюсь определить способ связать дополнительные данные с учетными записями в цепочке State. Например, как я мог бы сохранить имя (например, Алиса, Боб и т.д.) В ChainState (при условии, что они хранятся только локально) или даже другую информацию, такую как день рождения владельца учетной записи или их любимого автора, или любую другую произвольную информацию?

Ответ №1:

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

Чтобы добавить пользовательские данные, вы должны создать новую структуру (карту), а затем сопоставить идентификаторы учетных записей с любыми данными, которые вы хотите. В качестве примера:

 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);
    }
}
  

Выше объявлена карта хранилища, которая будет связывать хэш с кортежем учетной записи и номером блока. Таким образом, запрос хэша вернет эти два значения. Вы также можете сделать обратное и связать AccountId с каким-либо другим значением, например, со строкой ( Vec<u8> ).

Я рекомендую ознакомиться с этим руководством, из которого я взял приведенный выше фрагмент: он покажет вам, как именно добавлять пользовательскую информацию в цепочку.

Комментарии:

1. Я ценю вашу помощь. Я уже прошел через руководство выше и несколько других тоже. Я все еще определенно в замешательстве. Итак, состояние цепочки хранит всевозможную информацию. Он хранит открытый ключ учетной записи и балансы, но также и другие вещи — правильно ли это? И хранятся ли имена Алиса, Боб и т.д. в состоянии цепочки или локально? (Если локально, то где?)

2. Имена не хранятся в цепочке. Алиса названа так, потому что начальное значение, используемое для генерации ее закрытого ключа, является //Alice

3. @ShawnTabrizi Где хранятся имена?

4. @John_Vision Они жестко запрограммированы в пользовательском интерфейсе Polkadot JS.

Ответ №2:

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

После небольшого поиска я также нашел это руководство: Добавьте поддон в свою среду выполнения. Эта панель специально добавляет возможность связывать псевдоним с идентификатором учетной записи, что было примером, который я привел в своем вопросе. однако ответ @ Swader был более общим и, следовательно, более полезным, а также более точно отвечал на мой вопрос.

Кстати, псевдонимы сохраняются в шестнадцатеричном кодировании и возвращаются также в шестнадцатеричном кодировании. Простой способ проверить, что шестнадцатеричная кодировка фактически эквивалентна установленному нику, — это посетитьhttps://convertstring.com/EncodeDecode/HexDecode и вставьте шестнадцатеричную строку без начального 0x.