Substrate如何将知名地址初始化为用作结构体成员的AccountId类型变量
你示例代码里的AcccountId拼写多了一个c,注意先修正为正确的类型名AccountId。
AccountId 类型初始化方案
不同开发场景下的初始化方法
Substrate Runtime/Pallet 开发场景
- 运行时动态通过SS58地址转换:
use sp_runtime::traits::IdentifyAccount; use frame_support::sp_runtime::MultiSigner; // 替换为你要使用的知名SS58地址 let known_addr = "13UVJyLnbVp9RBZYFwFGyDvVd1y27Tt8tkntv6Q7JVPhFsTB"; let account_id: AccountId = known_addr.parse().expect("无效的SS58地址格式");
- 常量场景写死公钥推导更高效:
// 方括号内替换为知名地址对应的32位公钥字节数组 const KNOWN_ACCOUNT: AccountId = MultiSigner::Ed25519(sp_core::ed25519::Public([/* 32位公钥字节 */])).into_account();
ink! 合约开发场景
- 动态转换SS58地址:
// 替换为你要使用的知名SS58地址 let known_addr = "13UVJyLnbVp9RBZYFwFGyDvVd1y27Tt8tkntv6Q7JVPhFsTB"; let account_id: AccountId = known_addr.parse().expect("无效的地址格式");
- 常量场景直接用官方宏:
const KNOWN_ACCOUNT: AccountId = ink::primitives::account_id!("13UVJyLnbVp9RBZYFwFGyDvVd1y27Tt8tkntv6Q7JVPhFsTB");
自定义结构体初始化示例
拿到AccountId实例后直接赋值即可:
let example_instance = ExampleStruct { id: 1001, name: "测试实例".to_string(), accountid: account_id, };
其他生态的
AccountId类型逻辑基本一致:先将知名地址转换为对应类型要求的底层字节数组,再调用对应From/parse方法完成初始化即可。
内容的提问来源于stack exchange,提问作者s.Takahashi
相关产品推荐
相关产品推荐

