美文网首页Substrate区块链区块链大学
如何用RPC查询Substrate storage(1)

如何用RPC查询Substrate storage(1)

作者: goldenfiredo | 来源:发表于2020-01-12 20:33 被阅读0次

我们可以用Substrate提供的一系列RPC方法和Runtime进行交互,也可以查询链上的数据,比如查询链上账户的余额、Session模块的当前session等,substrate查询storage数据的方法是如下定义的:

调用storage方法的时候需要提供一个storage key和一个可选的区块哈希值。下面是用curl命令查询Session模块的当前session的例子:

其中params里以0x开头的字符串就是storage key。Substrate对不同的storage类型,key值有不同的计算方法。

1、storage value类型

对于在Runtime Module里storage项是value类型,key值使用以下公式计算:

        twox_128(ModuleName) + twox_128(StorageItem)

以上面提到的session为例,ModuleName为Session,StorageItem为CurrentIndex。

实现代码如下:

2、storage map类型

忽略中间一行,上面显示的就是一个map类型,它保存的是某个账户的余额。map类型key值计算公式是:

        twox_128(ModuleName) + twox_128(StorageItem) + blake2_256(StorageItemKey)

T::AccountId就是StorageItemKey。求key值的代码如下:

3、storage double map类型

暂时还没用到,以后再说哈。

通过以上的方法得到key值以后,就可以把它作为params参数值调用RPC获得存储在链上的值了。


注:以上的计算公式适用于Substrate的最新代码,即metadata版本是V10。对于metadata V8及之前版本,计算公式有所不同,storage value的key值按下式求得:twox_128(ModuleName + " " + StorageItem)

相关文章

网友评论

    本文标题:如何用RPC查询Substrate storage(1)

    本文链接:https://www.haomeiwen.com/subject/msiiactx.html