PolkadotJS 开发教程 – 查询交易记录

因为区块链上只存储最新的状态,以及状态之间的变化,所以默认情况下无法像数据库那样查询交易记录。
一般查询交易记录的方法有三种:中心化归档、订阅Events、遍历Block。

中心化数据归档

请查看 Polkascan 的开源方案,本文不做展开
https://github.com/polkascan

Events

通过订阅 api.query.system.events

见代码
https://github.com/ericfish/Substrate-Dev-Book/blob/master/02-tx-history/events.js

运行

node events.js

到钱包界面发起一笔转账测试,会发现出现一条新的Event记录

Screen Shot 2020-03-31 at 15.32.01

对Event解析后,可以获得转账操作的各种详细信息:

[
    {
        "phase": {
            "ApplyExtrinsic": "0"
        }, 
        "event": {
            "index": "0x0000", 
            "data": [
                {
                    "weight": 10000, 
                    "class": "Operational", 
                    "paysFee": true
                }
            ]
        }, 
        "topics": [ ]
    }, 
    {
        "phase": {
            "ApplyExtrinsic": "1"
        }, 
        "event": {
            "index": "0x0302", 
            "data": [
                "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", 
                "5CiPPseXPECbkjWCa6MnjNokrgYjMqmKndv2rSnekmSK2DjL", 
                2200000000000, 
                0
            ]
        }, 
        "topics": [ ]
    }, 
    {
        "phase": {
            "ApplyExtrinsic": "1"
        }, 
        "event": {
            "index": "0x0000", 
            "data": [
                {
                    "weight": 1000000, 
                    "class": "Normal", 
                    "paysFee": true
                }
            ]
        }, 
        "topics": [ ]
    }
]

默认情况下,以下操作会产生Event
https://polkadot.js.org/api/substrate/events.html

另一个监听解析 Event 示例
https://polkadot.js.org/api/examples/promise/08_system_events/

另外一个通过监听Event,并写入记录到Mongodb的例子
https://substrate.dev/docs/en/tutorials/tcr/building-an-event-based-off-chain-storage
https://github.com/substrate-developer-hub/substrate-events-listener

遍历 Block

基于 Event 的数据,我们可以通过 range 来查询区块区间的所有数据

const events = await api.query.system.events.range([startHdr]);

示例:
https://github.com/ericfish/Substrate-Dev-Book/blob/master/02-tx-history/range.js

运行

node range.js

TIP

介绍一个可以比较方便的查询和测试 PolkadotJS API 的工具
https://apiexplorer.polkalert.com/
支持本地的ws接口

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注