5

我正在编写打字稿代码来获取块信息。我已连接到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
}

我假设我得到的外部编码是编码的,解码它的方法是什么?

4

3 回答 3

1

我发现parseInt('0x33c395')解码块号的效果很好

于 2021-01-18T06:47:16.500 回答
0

鉴于外部是0x280401000bc0ca26af7001 让我们解码。首先是由编码编码的外部编码的长度compact

0x28is0b00101000即值是0b0010101010-base

0x04表示在4第 th 个版本外EXTRINSIC_VERSION没有0b1000_0000 | EXTRINSIC_VERSION 签名(call_data

0x01运行时枚举特定值 (pallet_index)

0x00运行时枚举特定值(call_index)

0x0bc0ca26af7001根据compact编码第一个字节0x0b0b0000_1011)表示是big-integer根据0b11低两位编码,其他0b000010是后面的字节数,除了移位4,即字节数4 + 0b10 = 6在LE编码中。0xc0ca26af7001因此,必须根据字节顺序 交换字节。0xc0ca26af7001->0x0170af26cac0158348652000010 基

于 2021-10-04T12:49:21.530 回答
0

这些是十六进制 Uint8Array 编码的。如果使用 node.js,您可以简单地摆脱“0x”字符串并执行Buffer.from(<U8A>, 'hex')

于 2020-10-05T19:21:16.780 回答