You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:09:03