Внутри ржавчины вам не следует начинать с шестнадцатеричного представления, вам нужно работать с байтами.
Но если у вас есть шестнадцатеричный код, вы можете преобразовать шестнадцатеричную строку в байты 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