在底物中的帐户信息中添加其他数据字段

问题描述

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

首先,如果我在以上内容上有误,请纠正我。

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

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

解决方法

Chain State只是所有内容的 state ,不一定与帐户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>)相关联。

我建议您仔细阅读上面的摘录中的this tutorial:它将向您确切说明如何将自定义信息添加到链中。

,

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

经过更多搜索之后,我还找到了本教程:Add a Pallet to Your Runtime. 这个托盘恰好专门增加了将昵称与帐户ID相关联的功能,这就是我在问题中给出的示例。但是,@ Swader的回答比较笼统,因此既有用,又更加贴切地回答了我的问题。

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...