0

对 Substrate 和 Rust 来说非常新。我对 ChainState 的理解是,它的行为有点像一个数据库,其中包含帐号(在本例中为公钥)及其相关余额。在进行交易时,Substrate 基本上会检查您是否有足够的余额,如果有,则交易成功。(这与比特币中使用的 UTXO 方法不同。)

首先,如果我在上面说错了,请纠正我。

如果我是正确的(或至少接近),我想找到一种将其他数据与每个帐户相关联的方法。我注意到在演示中,帐户还与名称相关联,例如 Alice、Bob 等。这是保存在 ChainState 中,还是只能存储在自己的节点上?

我正在尝试确定一种将附加数据与 ChainState 中的帐户相关联的方法。例如,我如何在 ChainState 中存储一个名字(比如 Alice、Bob 等)(假设它们只存储在本地)甚至其他信息,比如帐户所有者的生日,或者他们最喜欢的作者,或者什么任意信息?

4

2 回答 2

1

链状态只是一切的状态,不一定与账户 ID 相关联。除其他外,它确实存储余额等,是的,但也存储了许多其他东西,该链以一种或另一种方式存储。

要添加自定义数据,您将创建一个新结构(映射),然后将帐户 ID 映射到您想要的任何数据。举个例子:

decl_storage! {
    trait Store for Module<T: Trait> as TemplateModule {
        /// The storage item for our proofs.
        /// It maps a proof to the user who made the claim and when they made it.
        Proofs: map hasher(blake2_128_concat) Vec<u8> => (T::AccountId, T::BlockNumber);
    }
}

上面声明了一个存储映射,它将哈希与帐户和块号的元组相关联。这样,查询哈希将返回这两个值。您也可以执行相反的操作并将 AccountID 与其他值相关联,例如字符串 ( Vec<u8>)。

我建议阅读本教程,我从中提取了上面的片段:它将准确地向您展示如何将自定义信息添加到链中。

于 2020-08-26T08:04:40.743 回答
0

@Swader 给出的答案非常好,因为它的范围很广。当我尝试关联更多类型的信息时,我将更多地研究这个答案。(我投了赞成票,但我的投票不可见,因为我对 StackOverflow 比较陌生,至少在这个帐户上是这样。)

经过一番搜索后,我还找到了本教程:将托盘添加到您的运行时。 这个托盘恰好专门添加了将昵称与帐户 ID 相关联的功能,这是我在问题中给出的示例。然而,@Swader 的回答更笼统,因此更有用,也更贴切地回答了我的问题。

顺便说一句,昵称被保存为十六进制编码,并且也以十六进制编码返回。检查十六进制编码实际上是否等同于设置的昵称的一种简单方法是访问https://convertstring.com/EncodeDecode/HexDecode并粘贴十六进制字符串,不带初始 0x。

于 2020-08-28T05:31:43.287 回答