web3.js 订阅日志



subscribe(“logs”)
web3.eth.subscribe(‘logs’, options [, callback]);
订阅日志,并按指定条件进行过滤。 如果一个有效的 fromBlock 属性被指定,Web3 会提取从这个点开始的日志,必要时回填返回值。

参数
“logs” – String, 订阅类型

Object – 订阅选项

fromBlock – Number: 最早区块编号, 默认为 null。

address – String|Array: 地址或地址列表,仅订阅来自这些指定账户地址的日志。

topics – Array: 一个主题数组,数组中每个元素都应出现在日志项中。 数组中主题的顺序是很重要的, 如果你不想监听某个主题可以用 null 值, 比如 [null, ‘0x00…’]. 你也可以为每个主题传入另外一个数组来表示主题选项, 比如 [null, [‘option1’, ‘option2’]]

callback – Function: (可选) 可选的回调函数,其第一个参数为错误对象,第二个参数为结果。每当有订阅事件发生时都会被调用。

返回值
EventEmitter: 带有下面事件的一个 订阅实例 事件发生器:

“data” 返回 Object: 接收到新日志时触发,参数为日志对象

“changed” 返回 Object: 日志从链上移除时触发,该日志同时带有附加属性 “removed: true”

“error” 返回 Object: 当订阅中出现错误时触发

“connected” 返回 Number: 订阅成功后触发,返回订阅 id

要了解返回的事件对象结构,可查看 web3.eth.getPastEvents 返回值.

通知返回值
Object|Null – 如果订阅失败第一个参数为错误对象

Object – 日志对象,类似于 web3.eth.getPastEvents 返回值.

var subscription = web3.eth.subscribe('logs', {
    address: '0x123456..',
    topics: ['0x12345...']
}, function(error, result){
    if (!error)
        console.log(result);
})
.on("connected", function(subscriptionId){
    console.log(subscriptionId);
})
.on("data", function(log){
    console.log(log);
})
.on("changed", function(log){
});

// 取消订阅
subscription.unsubscribe(function(error, success){
    if(success)
        console.log('Successfully unsubscribed!');
});