gpt4 book ai didi

blockchain - 开发 key (Alice) 如何从 `chain_specs.rs` 添加到本地 keystore ?

转载 作者:行者123 更新时间:2023-12-05 05:56:38 24 4
gpt4 key购买 nike

我试图了解将开发 key 添加到 Substrate 中的本地 keystore 以用于开发目的的内部逻辑。例如,我可以看到 Alicesession keys 正在生成并添加到 /bin/node/cli/src/chain_spec.rs 中的创世配置中 文件如下:

pub fn development_config() -> Result<ChainSpec, String> {
let wasm_binary =
WASM_BINARY.ok_or_else(|| "Development wasm binary not available".to_string())?;

Ok(ChainSpec::from_genesis(
// Name
"Development",
// ID
"dev",
ChainType::Development,
move || {
testnet_genesis(
wasm_binary,
// Initial PoA authorities
vec![authority_keys_from_seed("Alice")],
// Sudo account
get_account_id_from_seed::<sr25519::Public>("Alice"),
// Pre-funded accounts
vec![
get_account_id_from_seed::<sr25519::Public>("Alice"),
get_account_id_from_seed::<sr25519::Public>("Bob"),
get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
],
true,
)
},
// Bootnodes
vec![],
// Telemetry
None,
// Protocol ID
None,
// Properties
None,
// Extensions
None,
))
}

根据我的理解,用于开发的session keys 还包括ImOnlineId。我的问题是如何将 key 添加到本地 keystore ,以便我能够在 im-online pallet 中访问我的 key :

    fn local_authority_keys() -> impl Iterator<Item=(u32, T::AuthorityId)> {
// on-chain storage
//
// At index `idx`:
// 1. A (ImOnline) public key to be used by a validator at index `idx` to send im-online
// heartbeats.
let authorities = Keys::<T>::get();

// local keystore
//
// All `ImOnline` public (+private) keys currently in the local keystore.
let mut local_keys = T::AuthorityId::all();

local_keys.sort();

authorities.into_iter()
.enumerate()
.filter_map(move |(index, authority)| {
local_keys.binary_search(&authority)
.ok()
.map(|location| (index as u32, local_keys[location].clone()))
})
}

在调试时,我可以在 local_keys 中找到 Alice 的公钥。询问是因为我想开发类似的东西,并且通过这种方式可以更轻松地进行开发测试,而不是手动将 key 放入 keystore 。

最佳答案

  1. 在您的 pallet 中定义一个 genesis 配置构建器。例如 https://github.com/paritytech/substrate/blob/master/frame/im-online/src/lib.rs#L359-L376
  2. 通过添加 Config/Config<T> 启用创世配置同时构造运行时。例如 https://github.com/paritytech/substrate/blob/master/bin/node/runtime/src/lib.rs#L1229
  3. 将起源设置为 chain_spec .例如 https://github.com/paritytech/substrate/blob/master/bin/node/cli/src/chain_spec.rs#L349

注意:但在这个例子中,这些 key 是由 pallet-session 管理的。 https://github.com/paritytech/substrate/blob/master/bin/node/cli/src/chain_spec.rs#L307-L316 .

关于blockchain - 开发 key (Alice) 如何从 `chain_specs.rs` 添加到本地 keystore ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69127883/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com