1703877282
1703877283
1703877284
1703877285
现在让我们看看如何发送交易以调用合约方法。相关代码如下:
1703877286
1703877287
1703877288
1703877289
1703877290
这里调用方法同名对象的sendTransaction方法。被传送给这个sendTransaction方法的对象属性与web3.eth.sendTransaction()相同,只是data和to属性被忽略了。
1703877291
1703877292
如果想调用节点本地的方法,而非创建交易并广播,则可使用call而非sendTransaction。示例如下:
1703877293
1703877294
1703877295
1703877296
1703877297
有时必须发现找到调用方法所需的gas,这样可以决定是否调用。web3.eth.estimateGas可用于此目的。然而,直接使用web3.eth.estimateGas()要求生成交易,因此可以使用方法同名对象的estimateGas()方法。示例如下:
1703877298
1703877299
1703877300
1703877301
1703877302
1703877303
如果只想发送一些以太币到合约,而不调用任何方法,则可以使用web3.eth.sendTransaction方法。
1703877304
1703877305
1703877306
1703877307
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。这意味着它们将匹配该合约发出的任意类型事件。
[
上一页 ]
[ :1.703877282e+09 ]
[
下一页 ]