【问题标题】:How to hardcode an address in the substrate runtime?如何在基板运行时硬编码地址?
【发布时间】:2021-02-05 01:13:59
【问题描述】:

您可以在托盘中手动预设整数、字符串和很多东西,但是除了 ensure_root 功能之外,我如何在托盘中手动设置 AccountId?

我假设由于区块链已经运行了很长时间,我无法更改链规范的起源。

【问题讨论】:

  • 预先设置到底是什么意思?
  • @kianenigma 例如,每个调度调用都会将 1 个 DOT 单位转移到 AccountId。我找不到如何在代码中设置所述帐户。
  • 如果您分享一些显示可分派的代码并清楚地表达您想要实现的目标,将会很有帮助。我想我知道你想要什么,答案可能很简单,但问题很模糊:)
  • 嗨@kianenigma,这个想法是这样的let donation: AccountId = '5axsca'; fn give_money(origin, amount: Balance) { Balance.transfer(origin, donation, amount) } 基于慈善示例,它实际上在托盘实例化时创建了另一个帐户,但我不想要这种方式。这可行吗?
  • 发布了答案,希望是你想要的。

标签: substrate


【解决方案1】:

根据您的评论,我只能假设您的问题的正确标题是:“如何在基板运行时硬编码地址”。

here 已经回答了类似的问题。在这里简要回顾一下,托盘内已知的 AccountId 类型仅与这些特征绑定:https://github.com/paritytech/substrate/blob/master/frame/system/src/lib.rs#L195

因此,硬编码一个 inside 托盘有点困难,尽管仍有可能。更明智的方法是将硬编码帐户从外部注入到您的托盘中作为配置。

首先,您的配置特征需要接受包含此帐户的类型:

trait Config: frame_system::Config {
   // A type that can deliver a single account id value to the pallet.
   type CharityDest: Get<<Self as frame_system::Config>::AccountId>
}

然后,要使用它,您只需:

// inside the `impl<T> Module<T>` or `impl<C> Pallet<T>` or `decl_module` where `T` is in scope.
some_transfer_function(T::CharityDest::get(), amount);

最后,在您的顶级运行时文件中,您可以硬编码 AccountId 并将其传入,如下所示:

parameter_types! {
     pub CharityDest: AccountId = hex_literal::hex!["hex-bytes-of-account"].into()
}

impl my_pallet::Config for Runtime {
   type CharityDest = CharityDest;
}

另外,您还可以使用大多数运行时的AccountId类型是AccountId32,它实现了Ss58Codec,这意味着它有一堆有用的函数可以从Ss58字符串转换为帐户,所以你可以做类似的事情

parameter_types! {
     pub CharityDest: AccountId = AccountId::from_ss58check("AccountSs58Format").unwrap()
}

【讨论】:

  • 感谢您的回答。我真的很感激这一点。对于 AccountId::from_ss58check("AccountSs58Format") ,它可以是 Polkadot、Kusama 或 Substrate 格式,对吗?我还更改了问题的标题以更好地反映问题。
  • 是的,您可以使用此功能设置您打算使用哪一个:docs.rs/sp-core/2.0.1/sp_core/crypto/…
  • 当我想在我的节点模板中使用from_ss58check 时,我导入了特征:use sp_core::crypto::{KeyTypeId, Ss58Codec}。它报告错误:no Ss58Codec in crypto。为什么?
猜你喜欢
  • 2018-06-09
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 2013-11-13
  • 2021-08-08
  • 1970-01-01
相关资源
最近更新 更多