From 0e803cd97cd98ddb3592ad947522c62f399bab67 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Thu, 13 Apr 2023 21:47:26 -0400 Subject: [PATCH 1/9] add filter and tests --- packages/web3-eth-contract/src/index.js | 28 +++++++++- test/e2e.contract.events.js | 73 +++++++++++++++++++++++-- 2 files changed, 95 insertions(+), 6 deletions(-) diff --git a/packages/web3-eth-contract/src/index.js b/packages/web3-eth-contract/src/index.js index 6ee2b25e30c..e1078982c89 100644 --- a/packages/web3-eth-contract/src/index.js +++ b/packages/web3-eth-contract/src/index.js @@ -285,7 +285,7 @@ var Contract = function Contract(jsonInterface, address, options) { _this.options.blockHeaderTimeout = val; }, enumerable: true - }); + }); Object.defineProperty(this, 'defaultAccount', { get: function () { return defaultAccount; @@ -682,6 +682,7 @@ Contract.prototype._generateEventOptions = function() { return { params: this._encodeEventABI(event, options), event: event, + filter: options.filter || {}, callback: callback }; }; @@ -808,7 +809,30 @@ Contract.prototype.getPastEvents = function(){ getPastLogs = null; - return call(subOptions.params, subOptions.callback); + const filterResults = (data) => { + if (Array.isArray(data)) { + const filter = subOptions.filter; + const filterKeys = Object.keys(filter); + return filterKeys.length > 0 + ? data.filter(log => typeof log === 'string' ? true : filterKeys.every((k) => Array.isArray(filter[k]) ? (filter[k]).some( + (v) => + String(log.returnValues[k]).toUpperCase() === + String(v).toUpperCase(), + ) : ( + String(log.returnValues[k]).toUpperCase() === + String(filter[k]).toUpperCase() + )), + ) + : data; + } + return data; + }; + + return call(subOptions.params, (err, data)=>{ + if(typeof subOptions.callback==='function'){ + subOptions.callback(err, filterResults(data)) + } + }).then(filterResults); }; diff --git a/test/e2e.contract.events.js b/test/e2e.contract.events.js index a3e687bde96..c4a76f264bc 100644 --- a/test/e2e.contract.events.js +++ b/test/e2e.contract.events.js @@ -54,6 +54,71 @@ describe('contract.events [ @E2E ]', function() { assert.notEqual(events[0].id, events[1].id); }); + it('contract.getPastEvents with filter', async function(){ + const str1 = 'str1' + const str2 = 'str2' + const str3 = 'str3' + await instance + .methods + .firesIndexedStringEvent(str1) + .send({from: accounts[0]}); + await instance + .methods + .firesIndexedStringEvent(str2) + .send({from: accounts[0]}); + await instance + .methods + .firesIndexedStringEvent(str3) + .send({from: accounts[0]}); + + const event1 = (await instance.getPastEvents('IndexedStringEvent',{ + filter : {str:str1}, + fromBlock: 'earliest', + toBlock: 'latest' + }))[0] + assert.equal(event1.returnValues.str, str1); + + const event2 = (await instance.getPastEvents('IndexedStringEvent',{ + filter : {str:str2}, + fromBlock: 'earliest', + toBlock: 'latest' + }))[0] + assert.equal(event2.returnValues.str, str2); + + const event3 = (await instance.getPastEvents({ + filter : {str:str3}, + fromBlock: 'earliest', + toBlock: 'latest' + }))[0] + assert.equal(event3.returnValues.str, str3); + + const events4 = await instance.getPastEvents('IndexedStringEvent',{ + filter : {str:[str2,str3]}, + fromBlock: 'earliest', + toBlock: 'latest' + }); + assert.equal(events4[0].returnValues.str, str2); + assert.equal(events4[1].returnValues.str, str3); + + instance.getPastEvents('IndexedStringEvent',{ + filter : {str:str3}, + fromBlock: 'earliest', + toBlock: 'latest' + },(err,events)=>{ + assert.equal(events[0].returnValues.str, str3); + }) + + instance.getPastEvents({ + filter : {str:str2}, + fromBlock: 'earliest', + toBlock: 'latest' + },(err,events)=>{ + assert.equal(events[0].returnValues.str, str2); + }) + + + }); + it('contract.events.', function(){ return new Promise(async resolve => { instance @@ -91,7 +156,7 @@ describe('contract.events [ @E2E ]', function() { this.removeAllListeners(); resolve(); }); - + assert.equal(message, 'Invalid option: toBlock. Use getPastEvents for specific range.'); console.warn = originalWarn @@ -106,7 +171,7 @@ describe('contract.events [ @E2E ]', function() { const originalWarn = console.warn let message console.warn = function(str) { message = str } - + return new Promise(async (resolve, reject) => { instance .events @@ -408,9 +473,9 @@ describe('contract.events [ @E2E ]', function() { assert.equal(events[0].returnValues.str, msg) }); - // Malformed utf-8 sequence in the following two tests comes from + // Malformed utf-8 sequence in the following two tests comes from // https://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html - // Section: 3.1.8 + // Section: 3.1.8 it('when an invalid utf-8 string is passed in JS as param to emit', async function(){ const msg = '�������'; From c4b7999fc8606d39379ecfbd2bd59b34f54b53b2 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Fri, 14 Apr 2023 20:24:19 -0400 Subject: [PATCH 2/9] add topic filter and tests --- packages/web3-eth-contract/src/index.js | 75 +++++++++---------------- test/e2e.contract.events.js | 53 ++++++----------- 2 files changed, 42 insertions(+), 86 deletions(-) diff --git a/packages/web3-eth-contract/src/index.js b/packages/web3-eth-contract/src/index.js index e1078982c89..6891ab87da0 100644 --- a/packages/web3-eth-contract/src/index.js +++ b/packages/web3-eth-contract/src/index.js @@ -415,46 +415,44 @@ Contract.prototype._encodeEventABI = function (event, options) { result[f] = formatters.inputBlockNumberFormatter(options[f]); }); - // use given topics - if(Array.isArray(options.topics)) { - result.topics = options.topics; - // create topics based on filter + let topics = [] + if (options.topics && Array.isArray(options.topics)) { + topics = [...options.topics]; } else { - - result.topics = []; - + topics = []; // add event signature if (event && !event.anonymous && event.name !== 'ALLEVENTS') { - result.topics.push(event.signature); + topics.push( + event.signature || abi.encodeEventSignature(utils.jsonInterfaceMethodToString(event)), + ); } // add event topics (indexed arguments) - if (event.name !== 'ALLEVENTS') { - var indexedTopics = event.inputs.filter(function (i) { - return i.indexed === true; - }).map(function (i) { - var value = filter[i.name]; - if (!value) { - return null; + if (event.name !== 'ALLEVENTS' && event.inputs) { + for (const input of event.inputs) { + if (!input.indexed) { + continue; } - // TODO: https://github.com/ethereum/web3.js/issues/344 - // TODO: deal properly with components + const value = filter[input.name]; + if (!value) { + // eslint-disable-next-line no-null/no-null + topics.push(null); + continue; + } if (Array.isArray(value)) { - return value.map(function (v) { - return abi.encodeParameter(i.type, v); - }); + topics.push(value.map(v => abi.encodeParameter(input.type, v))); + } else { + topics.push(abi.encodeParameter(input.type, value)); } - return abi.encodeParameter(i.type, value); - }); - - result.topics = result.topics.concat(indexedTopics); + } } + } - if(!result.topics.length) - delete result.topics; + if(topics.length) { + result.topics = topics } if(this.options.address) { @@ -809,30 +807,7 @@ Contract.prototype.getPastEvents = function(){ getPastLogs = null; - const filterResults = (data) => { - if (Array.isArray(data)) { - const filter = subOptions.filter; - const filterKeys = Object.keys(filter); - return filterKeys.length > 0 - ? data.filter(log => typeof log === 'string' ? true : filterKeys.every((k) => Array.isArray(filter[k]) ? (filter[k]).some( - (v) => - String(log.returnValues[k]).toUpperCase() === - String(v).toUpperCase(), - ) : ( - String(log.returnValues[k]).toUpperCase() === - String(filter[k]).toUpperCase() - )), - ) - : data; - } - return data; - }; - - return call(subOptions.params, (err, data)=>{ - if(typeof subOptions.callback==='function'){ - subOptions.callback(err, filterResults(data)) - } - }).then(filterResults); + return call(subOptions.params, subOptions.callback) }; diff --git a/test/e2e.contract.events.js b/test/e2e.contract.events.js index c4a76f264bc..c0caaa38436 100644 --- a/test/e2e.contract.events.js +++ b/test/e2e.contract.events.js @@ -55,68 +55,49 @@ describe('contract.events [ @E2E ]', function() { }); it('contract.getPastEvents with filter', async function(){ - const str1 = 'str1' - const str2 = 'str2' - const str3 = 'str3' await instance .methods - .firesIndexedStringEvent(str1) + .firesEvent(accounts[0], 1) .send({from: accounts[0]}); await instance .methods - .firesIndexedStringEvent(str2) + .firesEvent(accounts[0], 2) .send({from: accounts[0]}); await instance .methods - .firesIndexedStringEvent(str3) + .firesEvent(accounts[0], 3) .send({from: accounts[0]}); - const event1 = (await instance.getPastEvents('IndexedStringEvent',{ - filter : {str:str1}, + const event2 = (await instance.getPastEvents('BasicEvent',{ + filter : { val : 2 }, fromBlock: 'earliest', toBlock: 'latest' }))[0] - assert.equal(event1.returnValues.str, str1); + assert.equal(event2.returnValues.val, 2); - const event2 = (await instance.getPastEvents('IndexedStringEvent',{ - filter : {str:str2}, + const event3 = (await instance.getPastEvents('BasicEvent',{ + filter : { val : 3 }, fromBlock: 'earliest', toBlock: 'latest' }))[0] - assert.equal(event2.returnValues.str, str2); - const event3 = (await instance.getPastEvents({ - filter : {str:str3}, - fromBlock: 'earliest', - toBlock: 'latest' - }))[0] - assert.equal(event3.returnValues.str, str3); + assert.equal(event3.returnValues.val, 3); - const events4 = await instance.getPastEvents('IndexedStringEvent',{ - filter : {str:[str2,str3]}, + const events4 = await instance.getPastEvents('BasicEvent',{ + filter : { val : [ 2, 3 ] }, fromBlock: 'earliest', toBlock: 'latest' }); - assert.equal(events4[0].returnValues.str, str2); - assert.equal(events4[1].returnValues.str, str3); + assert.equal(events4[0].returnValues.val, 2); + assert.equal(events4[1].returnValues.val, 3); - instance.getPastEvents('IndexedStringEvent',{ - filter : {str:str3}, + instance.getPastEvents('BasicEvent',{ + filter : { val : 3}, fromBlock: 'earliest', toBlock: 'latest' - },(err,events)=>{ - assert.equal(events[0].returnValues.str, str3); + }, (err,events)=>{ + assert.equal(events[0].returnValues.val, 3); }) - - instance.getPastEvents({ - filter : {str:str2}, - fromBlock: 'earliest', - toBlock: 'latest' - },(err,events)=>{ - assert.equal(events[0].returnValues.str, str2); - }) - - }); it('contract.events.', function(){ From 33998f3db121b3aff0c95a5a3cf0a43404c0c0fc Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Tue, 18 Apr 2023 11:42:39 -0400 Subject: [PATCH 3/9] add filter for all events and tests --- packages/web3-eth-contract/src/index.js | 24 +++++++++++++- test/e2e.contract.events.js | 44 +++++++++++++++++++++++-- 2 files changed, 64 insertions(+), 4 deletions(-) diff --git a/packages/web3-eth-contract/src/index.js b/packages/web3-eth-contract/src/index.js index 6891ab87da0..0fa4d894ea9 100644 --- a/packages/web3-eth-contract/src/index.js +++ b/packages/web3-eth-contract/src/index.js @@ -783,6 +783,24 @@ Contract.prototype._on = function(){ return subscription; }; +const filterAllEventsResults = (subOptions, data) => { + if (subOptions.event && subOptions.event.name === 'ALLEVENTS' && Array.isArray(data)) { + const filter = subOptions.filter || {}; + const filterKeys = Object.keys(filter); + return filterKeys.length > 0 + ? data.filter(log => typeof log === 'string' ? true : filterKeys.every((k) => Array.isArray(filter[k]) ? (filter[k]).some( + (v) => + String(log.returnValues[k]).toUpperCase() === + String(v).toUpperCase(), + ) : ( + String(log.returnValues[k]).toUpperCase() === + String(filter[k]).toUpperCase() + )), + ) + : data; + } + return data; +}; /** * Get past events from contracts * @@ -807,7 +825,11 @@ Contract.prototype.getPastEvents = function(){ getPastLogs = null; - return call(subOptions.params, subOptions.callback) + return call(subOptions.params, (err, data)=>{ + if(typeof subOptions.callback === 'function'){ + subOptions.callback(err, filterAllEventsResults(subOptions, data)) + } + }).then(filterAllEventsResults.bind(this, subOptions)); }; diff --git a/test/e2e.contract.events.js b/test/e2e.contract.events.js index c0caaa38436..40927b2b246 100644 --- a/test/e2e.contract.events.js +++ b/test/e2e.contract.events.js @@ -68,12 +68,29 @@ describe('contract.events [ @E2E ]', function() { .firesEvent(accounts[0], 3) .send({from: accounts[0]}); - const event2 = (await instance.getPastEvents('BasicEvent',{ + const events2 = await instance.getPastEvents('BasicEvent',{ filter : { val : 2 }, fromBlock: 'earliest', toBlock: 'latest' - }))[0] - assert.equal(event2.returnValues.val, 2); + }) + assert.equal(events2.length, 1); + assert.equal(events2[0].returnValues.val, 2); + + const allEventsFilters = await instance.getPastEvents({ + filter : { val : 2 }, + fromBlock: 'earliest', + toBlock: 'latest' + }) + assert.equal(allEventsFilters.length, 1); + assert.equal(allEventsFilters[0].returnValues.val, 2); + + const allEventsFilters2 = await instance.getPastEvents('allEvents',{ + filter : { val : 2 }, + fromBlock: 'earliest', + toBlock: 'latest' + }) + assert.equal(allEventsFilters2.length, 1); + assert.equal(allEventsFilters2[0].returnValues.val, 2); const event3 = (await instance.getPastEvents('BasicEvent',{ filter : { val : 3 }, @@ -88,9 +105,30 @@ describe('contract.events [ @E2E ]', function() { fromBlock: 'earliest', toBlock: 'latest' }); + assert.equal(events4.length, 2); assert.equal(events4[0].returnValues.val, 2); assert.equal(events4[1].returnValues.val, 3); + const allEventsFilter3 = await instance.getPastEvents('allEvents',{ + filter : { val : [ 2, 3 ] }, + fromBlock: 'earliest', + toBlock: 'latest' + }); + assert.equal(allEventsFilter3.length, 2); + assert.equal(allEventsFilter3[0].returnValues.val, 2); + assert.equal(allEventsFilter3[1].returnValues.val, 3); + + + instance.getPastEvents('allEvents',{ + filter : { val : [ 2, 3 ] }, + fromBlock: 'earliest', + toBlock: 'latest' + }, (err,data)=>{ + assert.equal(data.length, 2); + assert.equal(data[0].returnValues.val, 2); + assert.equal(data[1].returnValues.val, 3); + }); + instance.getPastEvents('BasicEvent',{ filter : { val : 3}, fromBlock: 'earliest', From e1281e40db2f72641c45633f150345671dea7eb6 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Tue, 18 Apr 2023 11:50:10 -0400 Subject: [PATCH 4/9] add changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 70bc76b8e03..ac357ed99e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -672,3 +672,6 @@ Released with 1.0.0-beta.37 code base. - `transaction.type` is now formatted to a hex string before being send to provider (#5979) - When sending a transaction, if `transaction.type === '0x1' && transaction.accessList === undefined`, then `transaction.accessList` is set to `[]` (#5979) + +### Added +- Added support for `getPastEvents` method to filter `allEvents` and specific event (#6015) From dc148d62fa6856d9dc837a5196da6e8912f11792 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Thu, 20 Apr 2023 14:50:00 -0400 Subject: [PATCH 5/9] fix tests --- test/e2e.contract.events.js | 173 ++++++++++++++++++------------------ 1 file changed, 85 insertions(+), 88 deletions(-) diff --git a/test/e2e.contract.events.js b/test/e2e.contract.events.js index 40927b2b246..17bcd00e8dc 100644 --- a/test/e2e.contract.events.js +++ b/test/e2e.contract.events.js @@ -30,113 +30,110 @@ describe('contract.events [ @E2E ]', function() { basic = new web3.eth.Contract(Basic.abi, basicOptions); instance = await basic.deploy().send({from: accounts[0]}); - }); - - it('contract.getPastEvents', async function(){ await instance .methods .firesEvent(accounts[0], 1) .send({from: accounts[0]}); - await instance .methods .firesEvent(accounts[0], 2) .send({from: accounts[0]}); + await instance + .methods + .firesEvent(accounts[0], 3) + .send({from: accounts[0]}); + }); + it('contract.getPastEvents', async function(){ const events = await instance.getPastEvents({ fromBlock: 0, toBlock: 'latest' }); - assert.equal(events.length, 2); + assert.equal(events.length, 3); assert.equal(events[0].event, 'BasicEvent'); assert.equal(events[1].event, 'BasicEvent'); + assert.equal(events[2].event, 'BasicEvent'); assert.notEqual(events[0].id, events[1].id); }); - it('contract.getPastEvents with filter', async function(){ - await instance - .methods - .firesEvent(accounts[0], 1) - .send({from: accounts[0]}); - await instance - .methods - .firesEvent(accounts[0], 2) - .send({from: accounts[0]}); - await instance - .methods - .firesEvent(accounts[0], 3) - .send({from: accounts[0]}); - - const events2 = await instance.getPastEvents('BasicEvent',{ - filter : { val : 2 }, - fromBlock: 'earliest', - toBlock: 'latest' - }) - assert.equal(events2.length, 1); - assert.equal(events2[0].returnValues.val, 2); - - const allEventsFilters = await instance.getPastEvents({ - filter : { val : 2 }, - fromBlock: 'earliest', - toBlock: 'latest' - }) - assert.equal(allEventsFilters.length, 1); - assert.equal(allEventsFilters[0].returnValues.val, 2); - - const allEventsFilters2 = await instance.getPastEvents('allEvents',{ - filter : { val : 2 }, - fromBlock: 'earliest', - toBlock: 'latest' - }) - assert.equal(allEventsFilters2.length, 1); - assert.equal(allEventsFilters2[0].returnValues.val, 2); - - const event3 = (await instance.getPastEvents('BasicEvent',{ - filter : { val : 3 }, - fromBlock: 'earliest', - toBlock: 'latest' - }))[0] - - assert.equal(event3.returnValues.val, 3); - - const events4 = await instance.getPastEvents('BasicEvent',{ - filter : { val : [ 2, 3 ] }, - fromBlock: 'earliest', - toBlock: 'latest' - }); - assert.equal(events4.length, 2); - assert.equal(events4[0].returnValues.val, 2); - assert.equal(events4[1].returnValues.val, 3); - - const allEventsFilter3 = await instance.getPastEvents('allEvents',{ - filter : { val : [ 2, 3 ] }, - fromBlock: 'earliest', - toBlock: 'latest' - }); - assert.equal(allEventsFilter3.length, 2); - assert.equal(allEventsFilter3[0].returnValues.val, 2); - assert.equal(allEventsFilter3[1].returnValues.val, 3); - - - instance.getPastEvents('allEvents',{ - filter : { val : [ 2, 3 ] }, - fromBlock: 'earliest', - toBlock: 'latest' - }, (err,data)=>{ - assert.equal(data.length, 2); - assert.equal(data[0].returnValues.val, 2); - assert.equal(data[1].returnValues.val, 3); - }); - - instance.getPastEvents('BasicEvent',{ - filter : { val : 3}, - fromBlock: 'earliest', - toBlock: 'latest' - }, (err,events)=>{ - assert.equal(events[0].returnValues.val, 3); - }) - }); + // it('contract.getPastEvents filter by val', async function() { + // const events = await instance.getPastEvents('BasicEvent', { + // filter: { val: 2 }, + // fromBlock: 'earliest', + // toBlock: 'latest', + // }); + // assert.equal(events.length, 1); + // assert.equal(events[0].returnValues.val, 2); + // }); + // it('contract.getPastEvents without specify event name: filter by val', async function() { + // const events = await instance.getPastEvents({ + // filter: { val: 2 }, + // fromBlock: 'earliest', + // toBlock: 'latest', + // }); + // assert.equal(events.length, 1); + // assert.equal(events[0].returnValues.val, 2); + // }); + // it('contract.getPastEvents all events: filter by val', async function() { + // const events = await instance.getPastEvents('allEvents', { + // filter: { val: 2 }, + // fromBlock: 'earliest', + // toBlock: 'latest', + // }); + // assert.equal(events.length, 1); + // assert.equal(events[0].returnValues.val, 2); + // }); + // it('contract.getPastEvents filter by val different value', async function() { + // const events = await instance.getPastEvents('BasicEvent', { + // filter: { val: 3 }, + // fromBlock: 'earliest', + // toBlock: 'latest', + // }); + // assert.equal(events.length, 1); + // assert.equal(events[0].returnValues.val, 3); + // }); + // it('contract.getPastEvents filter by array', async function() { + // const events = await instance.getPastEvents('BasicEvent', { + // filter: { val: [2, 3] }, + // fromBlock: 'earliest', + // toBlock: 'latest', + // }); + // assert.equal(events.length, 2); + // assert.equal(events[0].returnValues.val, 2); + // assert.equal(events[1].returnValues.val, 3); + // }); + // it('contract.getPastEvents allEvents: filter by array', async function() { + // const events = await instance.getPastEvents('allEvents', { + // filter: { val: [2, 3] }, + // fromBlock: 'earliest', + // toBlock: 'latest', + // }); + // assert.equal(events.length, 2); + // assert.equal(events[0].returnValues.val, 2); + // assert.equal(events[1].returnValues.val, 3); + // }); + // it('contract.getPastEvents allEvents: filter by array using callback', async function() { + // instance.getPastEvents('allEvents', { + // filter: { val: [2, 3] }, + // fromBlock: 'earliest', + // toBlock: 'latest', + // }, (err, events) => { + // assert.equal(events.length, 2); + // assert.equal(events[0].returnValues.val, 2); + // assert.equal(events[1].returnValues.val, 3); + // }); + // }); + // it('contract.getPastEvents filter by val using callback', async function() { + // instance.getPastEvents('BasicEvent', { + // filter: { val: 3 }, + // fromBlock: 'earliest', + // toBlock: 'latest', + // }, (err, events) => { + // assert.equal(events.length, 1); + // assert.equal(events[0].returnValues.val, 3); + // }); + // }); it('contract.events.', function(){ return new Promise(async resolve => { From 4e9f442bf3c3870891b88c0609c2fd0468bef87c Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Thu, 20 Apr 2023 15:44:02 -0400 Subject: [PATCH 6/9] fix events --- test/e2e.contract.events.js | 161 +++++++++++++++++++----------------- 1 file changed, 84 insertions(+), 77 deletions(-) diff --git a/test/e2e.contract.events.js b/test/e2e.contract.events.js index 17bcd00e8dc..435f2cb12fe 100644 --- a/test/e2e.contract.events.js +++ b/test/e2e.contract.events.js @@ -57,83 +57,90 @@ describe('contract.events [ @E2E ]', function() { assert.notEqual(events[0].id, events[1].id); }); - // it('contract.getPastEvents filter by val', async function() { - // const events = await instance.getPastEvents('BasicEvent', { - // filter: { val: 2 }, - // fromBlock: 'earliest', - // toBlock: 'latest', - // }); - // assert.equal(events.length, 1); - // assert.equal(events[0].returnValues.val, 2); - // }); - // it('contract.getPastEvents without specify event name: filter by val', async function() { - // const events = await instance.getPastEvents({ - // filter: { val: 2 }, - // fromBlock: 'earliest', - // toBlock: 'latest', - // }); - // assert.equal(events.length, 1); - // assert.equal(events[0].returnValues.val, 2); - // }); - // it('contract.getPastEvents all events: filter by val', async function() { - // const events = await instance.getPastEvents('allEvents', { - // filter: { val: 2 }, - // fromBlock: 'earliest', - // toBlock: 'latest', - // }); - // assert.equal(events.length, 1); - // assert.equal(events[0].returnValues.val, 2); - // }); - // it('contract.getPastEvents filter by val different value', async function() { - // const events = await instance.getPastEvents('BasicEvent', { - // filter: { val: 3 }, - // fromBlock: 'earliest', - // toBlock: 'latest', - // }); - // assert.equal(events.length, 1); - // assert.equal(events[0].returnValues.val, 3); - // }); - // it('contract.getPastEvents filter by array', async function() { - // const events = await instance.getPastEvents('BasicEvent', { - // filter: { val: [2, 3] }, - // fromBlock: 'earliest', - // toBlock: 'latest', - // }); - // assert.equal(events.length, 2); - // assert.equal(events[0].returnValues.val, 2); - // assert.equal(events[1].returnValues.val, 3); - // }); - // it('contract.getPastEvents allEvents: filter by array', async function() { - // const events = await instance.getPastEvents('allEvents', { - // filter: { val: [2, 3] }, - // fromBlock: 'earliest', - // toBlock: 'latest', - // }); - // assert.equal(events.length, 2); - // assert.equal(events[0].returnValues.val, 2); - // assert.equal(events[1].returnValues.val, 3); - // }); - // it('contract.getPastEvents allEvents: filter by array using callback', async function() { - // instance.getPastEvents('allEvents', { - // filter: { val: [2, 3] }, - // fromBlock: 'earliest', - // toBlock: 'latest', - // }, (err, events) => { - // assert.equal(events.length, 2); - // assert.equal(events[0].returnValues.val, 2); - // assert.equal(events[1].returnValues.val, 3); - // }); - // }); - // it('contract.getPastEvents filter by val using callback', async function() { - // instance.getPastEvents('BasicEvent', { - // filter: { val: 3 }, - // fromBlock: 'earliest', - // toBlock: 'latest', - // }, (err, events) => { - // assert.equal(events.length, 1); - // assert.equal(events[0].returnValues.val, 3); - // }); - // }); + it('contract.getPastEvents filter by val', async function() { + const events = await instance.getPastEvents('BasicEvent', { + filter: { val: 2 }, + fromBlock: 'earliest', + toBlock: 'latest', + }); + assert.equal(events.length, 1); + assert.equal(events[0].returnValues.val, 2); + }); + + it('contract.getPastEvents without specify event name: filter by val', async function() { + const events = await instance.getPastEvents({ + filter: { val: 2 }, + fromBlock: 'earliest', + toBlock: 'latest', + }); + assert.equal(events.length, 1); + assert.equal(events[0].returnValues.val, 2); + }); + + it('contract.getPastEvents all events: filter by val', async function() { + const events = await instance.getPastEvents('allEvents', { + filter: { val: 2 }, + fromBlock: 'earliest', + toBlock: 'latest', + }); + assert.equal(events.length, 1); + assert.equal(events[0].returnValues.val, 2); + }); + + it('contract.getPastEvents filter by val different value', async function() { + const events = await instance.getPastEvents('BasicEvent', { + filter: { val: 3 }, + fromBlock: 'earliest', + toBlock: 'latest', + }); + assert.equal(events.length, 1); + assert.equal(events[0].returnValues.val, 3); + }); + + it('contract.getPastEvents filter by array', async function() { + const events = await instance.getPastEvents('BasicEvent', { + filter: { val: [2, 3] }, + fromBlock: 'earliest', + toBlock: 'latest', + }); + assert.equal(events.length, 2); + assert.equal(events[0].returnValues.val, 2); + assert.equal(events[1].returnValues.val, 3); + }); + + it('contract.getPastEvents allEvents: filter by array', async function() { + const events = await instance.getPastEvents('allEvents', { + filter: { val: [2, 3] }, + fromBlock: 'earliest', + toBlock: 'latest', + }); + assert.equal(events.length, 2); + assert.equal(events[0].returnValues.val, 2); + assert.equal(events[1].returnValues.val, 3); + }); + + it('contract.getPastEvents allEvents: filter by array using callback', async function() { + instance.getPastEvents('allEvents', { + filter: { val: [2, 3] }, + fromBlock: 'earliest', + toBlock: 'latest', + }, (err, events) => { + assert.equal(events.length, 2); + assert.equal(events[0].returnValues.val, 2); + assert.equal(events[1].returnValues.val, 3); + }); + }); + + it('contract.getPastEvents filter by val using callback', async function() { + instance.getPastEvents('BasicEvent', { + filter: { val: 3 }, + fromBlock: 'earliest', + toBlock: 'latest', + }, (err, events) => { + assert.equal(events.length, 1); + assert.equal(events[0].returnValues.val, 3); + }); + }); it('contract.events.', function(){ return new Promise(async resolve => { From 51446a373775e01cb48f9912760ac789fa0cbee5 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Thu, 20 Apr 2023 16:18:56 -0400 Subject: [PATCH 7/9] fix tests --- test/e2e.contract.events.js | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/test/e2e.contract.events.js b/test/e2e.contract.events.js index 435f2cb12fe..f7805584ced 100644 --- a/test/e2e.contract.events.js +++ b/test/e2e.contract.events.js @@ -208,11 +208,6 @@ describe('contract.events [ @E2E ]', function() { assert.equal(message, 'Invalid option: toBlock. Use getPastEvents for specific range.'); console.warn = originalWarn - - await instance - .methods - .firesEvent(accounts[0], 1) - .send({ from: accounts[0] }); }); }); @@ -488,7 +483,7 @@ describe('contract.events [ @E2E ]', function() { .firesStringEvent(msg) .send({from: accounts[0]}); - const events = await instance.getPastEvents({ + const events = await instance.getPastEvents('StringEvent', { fromBlock: 0, toBlock: 'latest' }); @@ -507,7 +502,7 @@ describe('contract.events [ @E2E ]', function() { .firesStringEvent(msg) .send({from: accounts[0]}); - const events = await instance.getPastEvents({ + const events = await instance.getPastEvents('StringEvent', { fromBlock: 0, toBlock: 'latest' }); @@ -521,7 +516,7 @@ describe('contract.events [ @E2E ]', function() { .firesIllegalUtf8StringEvent() .send({from: accounts[0]}); - const events = await instance.getPastEvents({ + const events = await instance.getPastEvents('StringEvent', { fromBlock: 0, toBlock: 'latest' }); @@ -537,7 +532,7 @@ describe('contract.events [ @E2E ]', function() { .firesStringEvent(msg) .send({from: accounts[0]}); - const events = await instance.getPastEvents({ + const events = await instance.getPastEvents('StringEvent', { fromBlock: 0, toBlock: 'latest' }); From 2e74d84ee00276713dd1d7914fa6d2fdaed5ef7a Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Thu, 20 Apr 2023 17:13:10 -0400 Subject: [PATCH 8/9] fix tests --- test/e2e.contract.events.js | 48 ++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/test/e2e.contract.events.js b/test/e2e.contract.events.js index f7805584ced..a4235a6196d 100644 --- a/test/e2e.contract.events.js +++ b/test/e2e.contract.events.js @@ -5,6 +5,20 @@ var Parent = require('./sources/Parent'); var utils = require('./helpers/test.utils'); var Web3 = utils.getWeb3(); +const prepareEvents = async (instance,address) => { + await instance + .methods + .firesEvent(address, 1) + .send({from: address}); + await instance + .methods + .firesEvent(address, 2) + .send({from: address}); + await instance + .methods + .firesEvent(address, 3) + .send({from: address}); +} describe('contract.events [ @E2E ]', function() { // `getPastEvents` not working with Geth instamine over websockets. if (process.env.GETH_INSTAMINE) return; @@ -30,21 +44,10 @@ describe('contract.events [ @E2E ]', function() { basic = new web3.eth.Contract(Basic.abi, basicOptions); instance = await basic.deploy().send({from: accounts[0]}); - await instance - .methods - .firesEvent(accounts[0], 1) - .send({from: accounts[0]}); - await instance - .methods - .firesEvent(accounts[0], 2) - .send({from: accounts[0]}); - await instance - .methods - .firesEvent(accounts[0], 3) - .send({from: accounts[0]}); }); it('contract.getPastEvents', async function(){ + await prepareEvents(instance, accounts[0]); const events = await instance.getPastEvents({ fromBlock: 0, toBlock: 'latest' @@ -58,6 +61,7 @@ describe('contract.events [ @E2E ]', function() { }); it('contract.getPastEvents filter by val', async function() { + await prepareEvents(instance, accounts[0]); const events = await instance.getPastEvents('BasicEvent', { filter: { val: 2 }, fromBlock: 'earliest', @@ -68,6 +72,7 @@ describe('contract.events [ @E2E ]', function() { }); it('contract.getPastEvents without specify event name: filter by val', async function() { + await prepareEvents(instance, accounts[0]); const events = await instance.getPastEvents({ filter: { val: 2 }, fromBlock: 'earliest', @@ -78,6 +83,7 @@ describe('contract.events [ @E2E ]', function() { }); it('contract.getPastEvents all events: filter by val', async function() { + await prepareEvents(instance, accounts[0]); const events = await instance.getPastEvents('allEvents', { filter: { val: 2 }, fromBlock: 'earliest', @@ -88,6 +94,7 @@ describe('contract.events [ @E2E ]', function() { }); it('contract.getPastEvents filter by val different value', async function() { + await prepareEvents(instance, accounts[0]); const events = await instance.getPastEvents('BasicEvent', { filter: { val: 3 }, fromBlock: 'earliest', @@ -98,6 +105,7 @@ describe('contract.events [ @E2E ]', function() { }); it('contract.getPastEvents filter by array', async function() { + await prepareEvents(instance, accounts[0]); const events = await instance.getPastEvents('BasicEvent', { filter: { val: [2, 3] }, fromBlock: 'earliest', @@ -109,6 +117,7 @@ describe('contract.events [ @E2E ]', function() { }); it('contract.getPastEvents allEvents: filter by array', async function() { + await prepareEvents(instance, accounts[0]); const events = await instance.getPastEvents('allEvents', { filter: { val: [2, 3] }, fromBlock: 'earliest', @@ -120,6 +129,7 @@ describe('contract.events [ @E2E ]', function() { }); it('contract.getPastEvents allEvents: filter by array using callback', async function() { + await prepareEvents(instance, accounts[0]); instance.getPastEvents('allEvents', { filter: { val: [2, 3] }, fromBlock: 'earliest', @@ -132,6 +142,7 @@ describe('contract.events [ @E2E ]', function() { }); it('contract.getPastEvents filter by val using callback', async function() { + await prepareEvents(instance, accounts[0]); instance.getPastEvents('BasicEvent', { filter: { val: 3 }, fromBlock: 'earliest', @@ -208,6 +219,11 @@ describe('contract.events [ @E2E ]', function() { assert.equal(message, 'Invalid option: toBlock. Use getPastEvents for specific range.'); console.warn = originalWarn + + await instance + .methods + .firesEvent(accounts[0], 1) + .send({ from: accounts[0] }); }); }); @@ -483,7 +499,7 @@ describe('contract.events [ @E2E ]', function() { .firesStringEvent(msg) .send({from: accounts[0]}); - const events = await instance.getPastEvents('StringEvent', { + const events = await instance.getPastEvents({ fromBlock: 0, toBlock: 'latest' }); @@ -502,7 +518,7 @@ describe('contract.events [ @E2E ]', function() { .firesStringEvent(msg) .send({from: accounts[0]}); - const events = await instance.getPastEvents('StringEvent', { + const events = await instance.getPastEvents({ fromBlock: 0, toBlock: 'latest' }); @@ -516,7 +532,7 @@ describe('contract.events [ @E2E ]', function() { .firesIllegalUtf8StringEvent() .send({from: accounts[0]}); - const events = await instance.getPastEvents('StringEvent', { + const events = await instance.getPastEvents({ fromBlock: 0, toBlock: 'latest' }); @@ -532,7 +548,7 @@ describe('contract.events [ @E2E ]', function() { .firesStringEvent(msg) .send({from: accounts[0]}); - const events = await instance.getPastEvents('StringEvent', { + const events = await instance.getPastEvents({ fromBlock: 0, toBlock: 'latest' }); From a921838fd2ed3b66340c4851992061fe117b6d11 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Thu, 20 Apr 2023 17:14:08 -0400 Subject: [PATCH 9/9] revert spaces --- test/e2e.contract.events.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/e2e.contract.events.js b/test/e2e.contract.events.js index a4235a6196d..5f878f33850 100644 --- a/test/e2e.contract.events.js +++ b/test/e2e.contract.events.js @@ -190,7 +190,6 @@ describe('contract.events [ @E2E ]', function() { this.removeAllListeners(); resolve(); }); - assert.equal(message, 'Invalid option: toBlock. Use getPastEvents for specific range.'); console.warn = originalWarn @@ -205,7 +204,6 @@ describe('contract.events [ @E2E ]', function() { const originalWarn = console.warn let message console.warn = function(str) { message = str } - return new Promise(async (resolve, reject) => { instance .events