如何使用Rust对Substrate中帐户id的十六进制字符串表示进行编码



给定一个十六进制表示:0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d,我们可以使用keyring.encodeAddress()和JavaScript获得它所表示的AccountId。然而,Rust中对应的函数是什么?

AccountId是Substrate用户地址的地址。例如,5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY是来自Substrate开发链的Alice的帐户id。

在rust中,您不应该真正从十六进制表示开始,而是希望使用字节。

但假设您有十六进制,您可以使用hex_literal::hex宏将十六进制字符串转换为AccountId字节:

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

请注意,0x已从十六进制文字中省略。

现在应该将[u8; 32]封装在AccountId32标识结构中。

从那里,您可以简单地为AccountId32:执行与Display实现相同的逻辑

#[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())
}
}

基本上,Address是Account Id字节的ss58编码版本。

ss58编解码器库可以在这里找到:https://substrate.dev/rustdocs/master/sp_core/crypto/trait.Ss58Codec.html

相关内容

  • 没有找到相关文章

最新更新