Как с помощью Rust закодировать шестнадцатеричное строковое представление идентификатора учетной записи в Substrate?
Учитывая шестнадцатеричное представление: 0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d
, мы можем получить AccountId, который он представляет, используя keyring.encodeAddress()
используя JavaScript. Однако какова соответствующая функция в Rust?
AccountId - это адрес адреса пользователя Substrate. Например,5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY
- идентификатор учетной записи Алисы из цепочки разработчиков Substrate.
1 ответ
В ржавчине вам не следует начинать с шестнадцатеричного представления, вы хотите работать с байтами.
Но если у вас есть шестнадцатеричный код, вы можете преобразовать шестнадцатеричную строку в байты AccountId, используя hex_literal::hex
макрос:
let account: AccountId32 = hex_literal::hex!["d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d"].into(),
Обратите внимание, что
0x
опускается в шестнадцатеричном литерале.
Теперь у тебя должно быть [u8; 32]
завернутый в AccountId32
структура идентичности.
Оттуда вы можете просто выполнить ту же логику, что и в реализации для 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 можно найти здесь: https://substrate.dev/rustdocs/master/sp_core/crypto/trait.Ss58Codec.html