注意点:
使用“allEvents”时filter不起作用。
事件方法(once、events、getPastEvents)
- once : 仅仅收到一次监听的事件。
myContract.once(event[, options], callback)
参数:
- event - String: 指定的事件名称,或者使用“allEvents”监听所有的事件。
- options -Object(选填):
- filter - Object (optional): 可以通过indexed标识的参数进行条件约束。
示例:
监听到一次事件后,不再监听。如下所示:
方法代码:
async function once(deployedContractAddress) {
console.log('********* once *********');
const web3 = new Web3(besu.member1.wsUrl);
const myContract = new web3.eth.Contract(contractAbi, deployedContractAddress);
myContract.once('SetEventIndexParam', {
filter: { no: [20, 21] }, // Using an array means OR: e.g. 20 or 21
}, function (error, event) {
console.log('***********once start *************');
console.log(event);
console.log('***********once end *************');
});
}
结果输出:
***********once start *************
{
logIndex: 0,
removed: false,
blockNumber: 41625,
blockHash: '0x06de5075e3e48d5d28c3178ce4be90ead3e0d56824ac8c057ee3d4aac3aa239a',
transactionHash: '0x2332d73be8a723c7ff08155d55e8980614d7dd8ff0de5c6cc9891e0a0248fd17',
transactionIndex: 0,
address: '0xCE43A53f22471d00Eb038A9618B588f40C61E97e',
id: 'log_df6d00d3',
returnValues: Result {
'0': '20',
'1': '0x67df77adbc271f558df88504cf3a3f87bfdd2d55b11e86c55c4fd978a935a836',
no: '20',
addr: '0x67df77adbc271f558df88504cf3a3f87bfdd2d55b11e86c55c4fd978a935a836'
},
event: 'SetEventIndexParam',
signature: '0x5c105cb8c4301efd6cb5e58d7edc6409c9875d38a2fa6cfc271f38e4a32364ad',
raw: {
data: '0x',
topics: [
'0x5c105cb8c4301efd6cb5e58d7edc6409c9875d38a2fa6cfc271f38e4a32364ad',
'0x0000000000000000000000000000000000000000000000000000000000000014',
'0x67df77adbc271f558df88504cf3a3f87bfdd2d55b11e86c55c4fd978a935a836'
]
}
}
***********once end *************
- events
myContract.events.MyEvent([options][, callback])
参数:
- options -Object(选填):
- filter - Object (optional): 可以通过indexed标识的参数进行条件约束(仅仅uint类型支持,其他string测试没起效)。
- fromBlock - Number|String|BN|BigNumber (optional):从指定的块号开始获取事件内容。
示例:
从块号3000开始,监听no为20或者21的事件。如下:
方法代码:
async function testEventIndexedParam(deployedContractAddress) {
const web3 = new Web3(besu.member1.wsUrl);
myContract = new web3.eth.Contract(contractAbi, deployedContractAddress);
myContract.events.SetEventIndexParam({
filter: { no: [20, 21] },
fromBlock: 3000
}, function (error, event) {
console.log('***********testEventIndexedParam start *************');
console.log(event);
console.log('***********testEventIndexedParam end *************');
}).on("connected", function (subscriptionId) {
console.log("connected:" + subscriptionId);
}).on('data', function (event) {
// console.log("data:\n"+ JSON.stringify(event)); // same results as the optional callback above
}).on('changed', function (event) {
// remove event from local database
console.log("changed:\n" + event)
}).on('error', function (error, receipt) { // If the transaction was rejected by the network with a receipt, the second parameter will be the receipt.
console.log(error);
});
}
结果输出:
***********testEventIndexedParam start *************
{
logIndex: 0,
removed: false,
blockNumber: 37063,
blockHash: '0x6e44d0b602ea1594c7da11fd39f0846bac4e5fbae71d413ae6806a1ad15e80ec',
transactionHash: '0xcde8dd9d08bffa1c97c38956700116ffdc7ba84446694d2c13b7d039e0449bd1',
transactionIndex: 0,
address: '0xCE43A53f22471d00Eb038A9618B588f40C61E97e',
id: 'log_903c6e97',
returnValues: Result {
'0': '20',
'1': '0x3ac225168df54212a25c1c01fd35bebfea408fdac2e31ddd6f80a4bbf9a5f1cb',
no: '20',
addr: '0x3ac225168df54212a25c1c01fd35bebfea408fdac2e31ddd6f80a4bbf9a5f1cb'
},
event: 'SetEventIndexParam',
signature: '0x5c105cb8c4301efd6cb5e58d7edc6409c9875d38a2fa6cfc271f38e4a32364ad',
raw: {
data: '0x',
topics: [
'0x5c105cb8c4301efd6cb5e58d7edc6409c9875d38a2fa6cfc271f38e4a32364ad',
'0x0000000000000000000000000000000000000000000000000000000000000014',
'0x3ac225168df54212a25c1c01fd35bebfea408fdac2e31ddd6f80a4bbf9a5f1cb'
]
}
}
***********testEventIndexedParam end *************
***********testEventIndexedParam start *************
{
logIndex: 0,
removed: false,
blockNumber: 37097,
blockHash: '0xae021bb48bb8b9786a9e3a5dc65183787ea79ac1ea900a5165abb239066cd538',
transactionHash: '0xab8f32a6798b6707a97d55a4e2847e8452a95616058bf964323edc848dc3367f',
transactionIndex: 0,
address: '0xCE43A53f22471d00Eb038A9618B588f40C61E97e',
id: 'log_e5e96480',
returnValues: Result {
'0': '21',
'1': '0x67fad3bfa1e0321bd021ca805ce14876e50acac8ca8532eda8cbf924da565160',
no: '21',
addr: '0x67fad3bfa1e0321bd021ca805ce14876e50acac8ca8532eda8cbf924da565160'
},
event: 'SetEventIndexParam',
signature: '0x5c105cb8c4301efd6cb5e58d7edc6409c9875d38a2fa6cfc271f38e4a32364ad',
raw: {
data: '0x',
topics: [
'0x5c105cb8c4301efd6cb5e58d7edc6409c9875d38a2fa6cfc271f38e4a32364ad',
'0x0000000000000000000000000000000000000000000000000000000000000015',
'0x67fad3bfa1e0321bd021ca805ce14876e50acac8ca8532eda8cbf924da565160'
]
}
}
***********testEventIndexedParam end *************
- getPassEvents
myContract.getPastEvents(event[, options][, callback])
参数:
- event - String: 指定的事件名称,或者使用“allEvents”监听所有的事件。
- options -Object(选填):
- filter - Object (optional): 可以通过indexed标识的参数进行条件约束(仅仅uint类型支持,其他string测试没起效)。
- fromBlock - Number|String|BN|BigNumber (optional):从指定的块号(大于等于)开始获取事件内容。
- toBlock - Number|String|BN|BigNumber (optional):截至到指定的块号(小于等于)获取事件内容。
返回:
- 返回数组(Array):事件的 Objects
示例:
从块号3000开始,监听no为20或者21的事件。如下:
方法代码:
async function getPastEvent(deployedContractAddress) {
const web3 = new Web3(besu.member1.wsUrl);
const myContract = new web3.eth.Contract(contractAbi, deployedContractAddress);
myContract.getPastEvents('SetEventIndexParam', {
filter: { no: [20, 21] }, // Using an array means OR: e.g. 20 or 21
fromBlock: 3576,
toBlock: 'latest'
}, function (error, events) {
// console.log(error);
// console.log("events:\n"+JSON.stringify(events));
for (let index = 0; index < events.length; index++) {
console.log('***********getPastEvent start *************');
const element = events[index];
console.log(element.returnValues);
console.log('***********getPastEvent end *************');
}
}).then(function (events) {
// console.log(events) // same results as the optional callback above
});
}
结果输出:
***********getPastEvent start *************
{
logIndex: 0,
removed: false,
blockNumber: 37063,
blockHash: '0x6e44d0b602ea1594c7da11fd39f0846bac4e5fbae71d413ae6806a1ad15e80ec',
transactionHash: '0xcde8dd9d08bffa1c97c38956700116ffdc7ba84446694d2c13b7d039e0449bd1',
transactionIndex: 0,
address: '0xCE43A53f22471d00Eb038A9618B588f40C61E97e',
id: 'log_903c6e97',
returnValues: Result {
'0': '20',
'1': '0x3ac225168df54212a25c1c01fd35bebfea408fdac2e31ddd6f80a4bbf9a5f1cb',
no: '20',
addr: '0x3ac225168df54212a25c1c01fd35bebfea408fdac2e31ddd6f80a4bbf9a5f1cb'
},
event: 'SetEventIndexParam',
signature: '0x5c105cb8c4301efd6cb5e58d7edc6409c9875d38a2fa6cfc271f38e4a32364ad',
raw: {
data: '0x',
topics: [
'0x5c105cb8c4301efd6cb5e58d7edc6409c9875d38a2fa6cfc271f38e4a32364ad',
'0x0000000000000000000000000000000000000000000000000000000000000014',
'0x3ac225168df54212a25c1c01fd35bebfea408fdac2e31ddd6f80a4bbf9a5f1cb'
]
}
}
***********getPastEvent end *************
***********getPastEvent start *************
{
logIndex: 0,
removed: false,
blockNumber: 37097,
blockHash: '0xae021bb48bb8b9786a9e3a5dc65183787ea79ac1ea900a5165abb239066cd538',
transactionHash: '0xab8f32a6798b6707a97d55a4e2847e8452a95616058bf964323edc848dc3367f',
transactionIndex: 0,
address: '0xCE43A53f22471d00Eb038A9618B588f40C61E97e',
id: 'log_e5e96480',
returnValues: Result {
'0': '21',
'1': '0x67fad3bfa1e0321bd021ca805ce14876e50acac8ca8532eda8cbf924da565160',
no: '21',
addr: '0x67fad3bfa1e0321bd021ca805ce14876e50acac8ca8532eda8cbf924da565160'
},
event: 'SetEventIndexParam',
signature: '0x5c105cb8c4301efd6cb5e58d7edc6409c9875d38a2fa6cfc271f38e4a32364ad',
raw: {
data: '0x',
topics: [
'0x5c105cb8c4301efd6cb5e58d7edc6409c9875d38a2fa6cfc271f38e4a32364ad',
'0x0000000000000000000000000000000000000000000000000000000000000015',
'0x67fad3bfa1e0321bd021ca805ce14876e50acac8ca8532eda8cbf924da565160'
]
}
}
*
网友评论