如何将 FRAME 的 AccountId 转换为网络特定的 SS58?

How do I convert FRAME's AccountId to network specific SS58?

我想将 AccountId 转换为带有自定义网络前缀的 SS58 格式。

基本上从JS utilities复制以下内容,例如:

更改地址前缀(前缀查找),前缀 = 50

5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY

65ADzWZUAKXQGZVhQ7ebqRdqEzMEftKytB8a7rknW82EASXB

一般如何在 Substrate pallet 中完成?我是否需要将关联类型添加到我的配置特征中以扩展 Ss58Codec 特征,或者我能否以某种方式将 AccountId 转换为 AccountId32 然后使用其 to_ss58check_with_version() 函数?

最后我决定不在运行时以 ss58 格式处理地址,因为它被视为严格的外部事物。此外,substrate 中与 ss58 相关的所有函数都使用 STD,因此无法按原样用于 wasm 编译。

另一种解决方案是在 JS UI 中处理这种情况,我会使用 this 代码向用户解释公钥地址是什么以及它映射到什么 ss58 地址。 签名邮件中的地址将保留为十六进制格式。