1703877309
区块链项目开发指南 4.1.9 检索和监听合约事件
1703877310
1703877311
现在让我们看看如何监听一个合约事件。监听事件很重要,因为通过交易调用方法的结果通常是以触发事件的形式返回的。
1703877312
1703877313
1703877314
在了解如何检索和监听事件之前,我们需要学习事件的索引参数。一个事件最多有三个参数可以有被索引(indexed)属性。该属性用于提示节点对它进行索引,这样应用客户端可以用匹配返回值来检索事件。如果不使用indexed属性,则必须检索所有事件,并筛选出需要的那些事件。例如,可以这样编写logFileAddedStatus事件:
1703877315
1703877316
1703877317
1703877318
1703877319
下面是给出了监听合约事件的一个示例:
1703877320
1703877321
1703877322
1703877323
1703877324
1703877325
1703877326
1703877327
上述代码的执行过程如下:
1703877328
1703877329
1)调用一个合约实例的事件同名的方法获取事件对象。该方法用两个对象作为实参,用于筛选事件:
1703877330
1703877331
·第一个对象用索引返回数值筛选事件。例如,{‘valueA’:1,‘valueB’:[myFirstAddress,mySecondAddress]}。所有筛选数值都默认设置为null。这意味着它们将匹配该合约发出的任意类型事件。
1703877332
1703877333
·第二个对象可以包含三个属性,即fromBlock(搜索起始区块,默认为”latest”)、toBlock(搜索截至区块,默认为”latest”)和address(仅获取日志的地址列表;默认为合约地址)。
1703877334
1703877335
2)事件对象显示三种方法:get、watch和stopWatching。get用于获取区块范围内的所有事件。watch与get类似,但是它在获取事件后还监听变化。stopWatching可以用于停止监听变化。
1703877336
1703877337
3)合约实例的allEvents方法用于检索合约的所有事件。
1703877338
1703877339
4)每一个事件由一个包含下列属性的对象代表。
1703877340
1703877341
·args。一个带有来自事件的实参的对象。
1703877342
1703877343
·event。用一个字符串表示事件名。
1703877344
1703877345
·logIndex。用一个整数表示区块中的日志索引位置。
1703877346
1703877347
·transactionIndex。用一个整数表示日志最初的交易索引位置。
1703877348
1703877349
·transactionHash。用一个字符串表示日志最初的交易哈希。
1703877350
1703877351
·address。用一个字符串表示日志最初的地址。
1703877352
1703877353
·blockHash。用一个字符串表示日志所在区块的哈希。如待定,则为null。
1703877354
1703877355
·blockNumber。日志所在区块的序号。如待定,则为null。
1703877356
1703877357
[
上一页 ]
[ :1.703877308e+09 ]
[
下一页 ]