Как закодировать шестнадцатеричное представление идентификатора учетной записи в субстрате с помощью Rust? - PullRequest
1 голос
/ 02 апреля 2020

Учитывая шестнадцатеричное представление: 0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d, мы можем получить AccountId, который он представляет, используя keyring.encodeAddress(), используя JavaScript. Однако, что такое соответствующая функция в Rust?

AccountId является адресом Substrate адреса пользователя. Например, 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY - это идентификатор учетной записи Алисы из цепочки разработчиков Субстрата.

1 Ответ

2 голосов
/ 02 апреля 2020

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

Но если у вас есть шестнадцатеричный код, вы можете преобразовать шестнадцатеричную строку в байты AccountId с помощью макроса hex_literal::hex :

let account: AccountId32 = hex_literal::hex!["d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d"].into(),

Обратите внимание, что 0x опущен из шестнадцатеричного литерала.

Теперь у вас должен быть [u8; 32], заключенный в структуру идентификации AccountId32.

Оттуда вы можете просто сделать те же логи c, что и в реализации для Display для AccountId32:

#[cfg(feature = "std")]
impl std::fmt::Display for AccountId32 {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        write!(f, "{}", self.to_ss58check())
    }
}

По сути, адресом является ss58 зашифрованная версия байтов идентификатора учетной записи.

Библиотека ss58 c находится здесь: https://substrate.dev/rustdocs/master/sp_core/crypto/trait.Ss58Codec.html

...