打字猴:1.703877293e+09
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
1703877308 区块链项目开发指南 [:1703875335]
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
[ 上一页 ]  [ :1.703877293e+09 ]  [ 下一页 ]