mirror of https://github.com/status-im/op-geth.git
events
This commit is contained in:
parent
2491c99b37
commit
80c97ca21b
|
@ -502,27 +502,36 @@ var utils = require('./utils');
|
|||
|
||||
var inputWithName = function (inputs, name) {
|
||||
var index = utils.findIndex(inputs, function (input) {
|
||||
return input.name === name;
|
||||
return input.name === name;
|
||||
});
|
||||
|
||||
if (index === -1) {
|
||||
console.error('indexed param ' + name + ' not found in the abi');
|
||||
return undefined;
|
||||
console.error('indexed paray with name ' + name + ' not found');
|
||||
return undefined;
|
||||
}
|
||||
return inputs[index];
|
||||
};
|
||||
|
||||
var indexedParamsToTopics = function (inputs, indexed) {
|
||||
Object.keys(indexed).map(function (key) {
|
||||
var inp = inputWithName(key);
|
||||
var indexedParamsToTopics = function (event, indexed) {
|
||||
// sort keys?
|
||||
return Object.keys(indexed).map(function (key) {
|
||||
// TODO: simplify this!
|
||||
var parser = abi.inputParser([{
|
||||
name: 'test',
|
||||
inputs: [inputWithName(event.inputs, key)]
|
||||
}]);
|
||||
|
||||
var value = indexed[key];
|
||||
if (value instanceof Array) {
|
||||
|
||||
return value.map(function (v) {
|
||||
return parser.test(v);
|
||||
});
|
||||
}
|
||||
return parser.test(value);
|
||||
});
|
||||
};
|
||||
|
||||
var implementationOfEvent = function (address, signature, event) {
|
||||
|
||||
|
||||
// valid options are 'earliest', 'latest', 'offset' and 'max', as defined for 'eth.watch'
|
||||
return function (indexed, options) {
|
||||
|
@ -530,6 +539,9 @@ var implementationOfEvent = function (address, signature, event) {
|
|||
o.address = address;
|
||||
o.topic = [];
|
||||
o.topic.push(signature);
|
||||
if (indexed) {
|
||||
o.topic = o.topic.concat(indexedParamsToTopics(event, indexed));
|
||||
}
|
||||
return o;
|
||||
};
|
||||
};
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
28
lib/event.js
28
lib/event.js
|
@ -25,27 +25,36 @@ var utils = require('./utils');
|
|||
|
||||
var inputWithName = function (inputs, name) {
|
||||
var index = utils.findIndex(inputs, function (input) {
|
||||
return input.name === name;
|
||||
return input.name === name;
|
||||
});
|
||||
|
||||
if (index === -1) {
|
||||
console.error('indexed param ' + name + ' not found in the abi');
|
||||
return undefined;
|
||||
console.error('indexed paray with name ' + name + ' not found');
|
||||
return undefined;
|
||||
}
|
||||
return inputs[index];
|
||||
};
|
||||
|
||||
var indexedParamsToTopics = function (inputs, indexed) {
|
||||
Object.keys(indexed).map(function (key) {
|
||||
var inp = inputWithName(key);
|
||||
var indexedParamsToTopics = function (event, indexed) {
|
||||
// sort keys?
|
||||
return Object.keys(indexed).map(function (key) {
|
||||
// TODO: simplify this!
|
||||
var parser = abi.inputParser([{
|
||||
name: 'test',
|
||||
inputs: [inputWithName(event.inputs, key)]
|
||||
}]);
|
||||
|
||||
var value = indexed[key];
|
||||
if (value instanceof Array) {
|
||||
|
||||
return value.map(function (v) {
|
||||
return parser.test(v);
|
||||
});
|
||||
}
|
||||
return parser.test(value);
|
||||
});
|
||||
};
|
||||
|
||||
var implementationOfEvent = function (address, signature, event) {
|
||||
|
||||
|
||||
// valid options are 'earliest', 'latest', 'offset' and 'max', as defined for 'eth.watch'
|
||||
return function (indexed, options) {
|
||||
|
@ -53,6 +62,9 @@ var implementationOfEvent = function (address, signature, event) {
|
|||
o.address = address;
|
||||
o.topic = [];
|
||||
o.topic.push(signature);
|
||||
if (indexed) {
|
||||
o.topic = o.topic.concat(indexedParamsToTopics(event, indexed));
|
||||
}
|
||||
return o;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
var assert = require('assert');
|
||||
var event = require('../lib/event.js');
|
||||
var f = require('../lib/formatters.js');
|
||||
|
||||
describe('event', function () {
|
||||
it('should create basic filter input object', function () {
|
||||
|
@ -7,9 +8,13 @@ describe('event', function () {
|
|||
// given
|
||||
var address = '0x012345';
|
||||
var signature = '0x987654';
|
||||
var e = {
|
||||
name: 'Event',
|
||||
inputs: [{"name":"a","type":"uint256","indexed":true},{"name":"b","type":"hash256","indexed":false}]
|
||||
};
|
||||
|
||||
// when
|
||||
var impl = event(address, signature);
|
||||
var impl = event(address, signature, e);
|
||||
var result = impl();
|
||||
|
||||
// then
|
||||
|
@ -19,7 +24,7 @@ describe('event', function () {
|
|||
|
||||
});
|
||||
|
||||
it('should create basic filter input object', function () {
|
||||
it('should create filter input object with options', function () {
|
||||
|
||||
// given
|
||||
var address = '0x012345';
|
||||
|
@ -30,9 +35,13 @@ describe('event', function () {
|
|||
offset: 3,
|
||||
max: 4
|
||||
};
|
||||
var e = {
|
||||
name: 'Event',
|
||||
inputs: [{"name":"a","type":"uint256","indexed":true},{"name":"b","type":"hash256","indexed":false}]
|
||||
};
|
||||
|
||||
// when
|
||||
var impl = event(address, signature);
|
||||
var impl = event(address, signature, e);
|
||||
var result = impl({}, options);
|
||||
|
||||
// then
|
||||
|
@ -46,5 +55,70 @@ describe('event', function () {
|
|||
|
||||
});
|
||||
|
||||
it('should create filter input object with indexed params', function () {
|
||||
|
||||
// given
|
||||
var address = '0x012345';
|
||||
var signature = '0x987654';
|
||||
var options = {
|
||||
earliest: 1,
|
||||
latest: 2,
|
||||
offset: 3,
|
||||
max: 4
|
||||
};
|
||||
var e = {
|
||||
name: 'Event',
|
||||
inputs: [{"name":"a","type":"uint256","indexed":true},{"name":"b","type":"hash256","indexed":false}]
|
||||
};
|
||||
|
||||
// when
|
||||
var impl = event(address, signature, e);
|
||||
var result = impl({a: 4}, options);
|
||||
|
||||
// then
|
||||
assert.equal(result.address, address);
|
||||
assert.equal(result.topic.length, 2);
|
||||
assert.equal(result.topic[0], signature);
|
||||
assert.equal(result.topic[1], f.formatInputInt(4));
|
||||
assert.equal(result.earliest, options.earliest);
|
||||
assert.equal(result.latest, options.latest);
|
||||
assert.equal(result.offset, options.offset);
|
||||
assert.equal(result.max, options.max);
|
||||
|
||||
});
|
||||
|
||||
it('should create filter input object with an array of indexed params', function () {
|
||||
|
||||
// given
|
||||
var address = '0x012345';
|
||||
var signature = '0x987654';
|
||||
var options = {
|
||||
earliest: 1,
|
||||
latest: 2,
|
||||
offset: 3,
|
||||
max: 4
|
||||
};
|
||||
var e = {
|
||||
name: 'Event',
|
||||
inputs: [{"name":"a","type":"uint256","indexed":true},{"name":"b","type":"hash256","indexed":false}]
|
||||
};
|
||||
|
||||
// when
|
||||
var impl = event(address, signature, e);
|
||||
var result = impl({a: [4, 69]}, options);
|
||||
|
||||
// then
|
||||
assert.equal(result.address, address);
|
||||
assert.equal(result.topic.length, 2);
|
||||
assert.equal(result.topic[0], signature);
|
||||
assert.equal(result.topic[1][0], f.formatInputInt(4));
|
||||
assert.equal(result.topic[1][1], f.formatInputInt(69));
|
||||
assert.equal(result.earliest, options.earliest);
|
||||
assert.equal(result.latest, options.latest);
|
||||
assert.equal(result.offset, options.offset);
|
||||
assert.equal(result.max, options.max);
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
|
Loading…
Reference in New Issue