我正在编写typescript代码以获取块信息。我已连接到wss://kusama-rpc.polkadot.io。我遵循polkadot-js-api的官方文档。
我正在调用api.rpc.chain.getBlock方法获取块信息,它以json:的形式返回块信息
{
"header": {
"parentHash": "0xf292579563eb2f12e7a1571643d5285a072f04694397758cae76b38075daf631",
"number": 1134,
"stateRoot": "0x468de0ef831c96f56d518017b18d76a89f35f30371c45866d12c12ca2116a407",
"extrinsicsRoot": "0x4875f3ab89c2a3c30f5de8be2ac40cfaee02059fd69ea76115550a418db5fcc8",
"digest": {
"logs": [
"0x066175726120d86ae01200000000",
"0x05617572610101be3d6d596445d3cb3b711da09e22f9f24c283306744657ce397d17ff1dbf9859051def7406cd356b2d3d2add155d76618f6b098de0c4ce6b7620106ec00e1188"
]
}
},
"extrinsics": [
"0x280401000bc0ca26af7001"
]
}
如何获取外部详细信息作为-
{
"method": {
"callIndex": "0x0200",
"section":"timestamp",
"method": "set",
"args" : [
"1,582,827,870,000"
]
},
"isSigned": false
}
我假设我得到的外在信息是编码的,解码它的方法是什么?
我发现parseInt('0x33c395')
非常适合解码块号
这些是十六进制Uint8Array编码的。如果使用node.js,您可以简单地去掉";0x";字符串并执行Buffer.from(<U8A>, 'hex')
假定外部是0x280401000bc0ca26af7001
让我们解码。首先是由compact
编码的外部编码的长度。
0x28
是0b00101000
,即该值是0b001010
或10
10基
0x04
表示它不是4
版本(EXTRINSIC_VERSION
(的外部签名,否则它将是0b1000_0000 | EXTRINSIC_VERSION
由于它没有签名,接下来是call_data
,否则会有签名
0x01
运行时枚举特定值(托盘索引(
0x00
运行时枚举特定值(call_index(
0x0bc0ca26af7001
根据compact
编码第一个字节0x0b
(0b0000_1011
(表示是big-integer
根据0b11
的两个低位编码,其他的0b000010
是除了4
的移位之外的后面的字节数,即LE编码中的字节数是4 + 0b10 = 6
。因此,必须根据字节顺序来交换CCD_ 25字节。CCD_ 26->0x0170af26cac0
,即1583486520000
10碱基