如何使用Polkadot-js-api解码块外部



我正在编写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编码的外部编码的长度。

0x280b00101000,即该值是0b00101010 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碱基

相关内容

  • 没有找到相关文章

最新更新