forked from cerc-io/plugeth
parsing events output
This commit is contained in:
parent
1860b3dff9
commit
a5909d82eb
36
dist/ethereum.js
vendored
36
dist/ethereum.js
vendored
@ -391,6 +391,11 @@ var addFunctionsToContract = function (contract, desc, address) {
|
|||||||
|
|
||||||
var addEventRelatedPropertiesToContract = function (contract, desc, address) {
|
var addEventRelatedPropertiesToContract = function (contract, desc, address) {
|
||||||
contract.address = address;
|
contract.address = address;
|
||||||
|
contract._onWatchEventResult = function (data) {
|
||||||
|
var matchingEvent = event.getMatchingEvent(utils.filterEvents(desc));
|
||||||
|
var parser = eventImpl.outputParser(matchingEvent);
|
||||||
|
return parser(data);
|
||||||
|
};
|
||||||
|
|
||||||
Object.defineProperty(contract, 'topic', {
|
Object.defineProperty(contract, 'topic', {
|
||||||
get: function() {
|
get: function() {
|
||||||
@ -411,6 +416,10 @@ var addEventsToContract = function (contract, desc, address) {
|
|||||||
var signature = abi.eventSignatureFromAscii(e.name);
|
var signature = abi.eventSignatureFromAscii(e.name);
|
||||||
var event = eventImpl.inputParser(address, signature, e);
|
var event = eventImpl.inputParser(address, signature, e);
|
||||||
var o = event.apply(null, params);
|
var o = event.apply(null, params);
|
||||||
|
o._onWatchEventResult = function (data) {
|
||||||
|
var parser = eventImpl.outputParser(e);
|
||||||
|
return parser(data);
|
||||||
|
};
|
||||||
return web3.eth.watch(o);
|
return web3.eth.watch(o);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -571,15 +580,19 @@ var getArgumentsObject = function (inputs, indexed, notIndexed) {
|
|||||||
}, {});
|
}, {});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
var outputParser = function (event) {
|
var outputParser = function (event) {
|
||||||
|
|
||||||
return function (output) {
|
return function (output) {
|
||||||
var result = {
|
var result = {
|
||||||
event: utils.extractDisplayName(event.name),
|
event: utils.extractDisplayName(event.name),
|
||||||
number: output.number
|
number: output.number,
|
||||||
|
args: {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (!output.topic) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
var indexedOutputs = filterInputs(event.inputs, true);
|
var indexedOutputs = filterInputs(event.inputs, true);
|
||||||
var indexedData = "0x" + output.topic.slice(1, output.topic.length).map(function (topic) { return topic.slice(2); }).join("");
|
var indexedData = "0x" + output.topic.slice(1, output.topic.length).map(function (topic) { return topic.slice(2); }).join("");
|
||||||
var indexedRes = abi.formatOutput(indexedOutputs, indexedData);
|
var indexedRes = abi.formatOutput(indexedOutputs, indexedData);
|
||||||
@ -593,9 +606,21 @@ var outputParser = function (event) {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var getMatchingEvent = function (events, payload) {
|
||||||
|
for (var i = 0; i < events.length; i++) {
|
||||||
|
var signature = abi.eventSignatureFromAscii(events[i].name);
|
||||||
|
if (signature === payload.topic[0]) {
|
||||||
|
return events[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
inputParser: inputParser,
|
inputParser: inputParser,
|
||||||
outputParser: outputParser
|
outputParser: outputParser,
|
||||||
|
getMatchingEvent: getMatchingEvent
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -639,6 +664,8 @@ var Filter = function(options, impl) {
|
|||||||
console.warn('"topics" is deprecated, use "topic" instead');
|
console.warn('"topics" is deprecated, use "topic" instead');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this._onWatchResult = options._onWatchEventResult;
|
||||||
|
|
||||||
// evaluate lazy properties
|
// evaluate lazy properties
|
||||||
options = {
|
options = {
|
||||||
to: options.to,
|
to: options.to,
|
||||||
@ -673,7 +700,8 @@ Filter.prototype.changed = function(callback) {
|
|||||||
Filter.prototype.trigger = function(messages) {
|
Filter.prototype.trigger = function(messages) {
|
||||||
for (var i = 0; i < this.callbacks.length; i++) {
|
for (var i = 0; i < this.callbacks.length; i++) {
|
||||||
for (var j = 0; j < messages.length; j++) {
|
for (var j = 0; j < messages.length; j++) {
|
||||||
this.callbacks[i].call(this, messages[j]);
|
var message = this._onWatchResult ? this._onWatchResult(messages[j]) : messages[j];
|
||||||
|
this.callbacks[i].call(this, message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
8
dist/ethereum.js.map
vendored
8
dist/ethereum.js.map
vendored
File diff suppressed because one or more lines are too long
2
dist/ethereum.min.js
vendored
2
dist/ethereum.min.js
vendored
File diff suppressed because one or more lines are too long
@ -120,6 +120,11 @@ var addFunctionsToContract = function (contract, desc, address) {
|
|||||||
|
|
||||||
var addEventRelatedPropertiesToContract = function (contract, desc, address) {
|
var addEventRelatedPropertiesToContract = function (contract, desc, address) {
|
||||||
contract.address = address;
|
contract.address = address;
|
||||||
|
contract._onWatchEventResult = function (data) {
|
||||||
|
var matchingEvent = event.getMatchingEvent(utils.filterEvents(desc));
|
||||||
|
var parser = eventImpl.outputParser(matchingEvent);
|
||||||
|
return parser(data);
|
||||||
|
};
|
||||||
|
|
||||||
Object.defineProperty(contract, 'topic', {
|
Object.defineProperty(contract, 'topic', {
|
||||||
get: function() {
|
get: function() {
|
||||||
@ -140,6 +145,10 @@ var addEventsToContract = function (contract, desc, address) {
|
|||||||
var signature = abi.eventSignatureFromAscii(e.name);
|
var signature = abi.eventSignatureFromAscii(e.name);
|
||||||
var event = eventImpl.inputParser(address, signature, e);
|
var event = eventImpl.inputParser(address, signature, e);
|
||||||
var o = event.apply(null, params);
|
var o = event.apply(null, params);
|
||||||
|
o._onWatchEventResult = function (data) {
|
||||||
|
var parser = eventImpl.outputParser(e);
|
||||||
|
return parser(data);
|
||||||
|
};
|
||||||
return web3.eth.watch(o);
|
return web3.eth.watch(o);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
26
lib/event.js
26
lib/event.js
@ -90,15 +90,19 @@ var getArgumentsObject = function (inputs, indexed, notIndexed) {
|
|||||||
}, {});
|
}, {});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
var outputParser = function (event) {
|
var outputParser = function (event) {
|
||||||
|
|
||||||
return function (output) {
|
return function (output) {
|
||||||
var result = {
|
var result = {
|
||||||
event: utils.extractDisplayName(event.name),
|
event: utils.extractDisplayName(event.name),
|
||||||
number: output.number
|
number: output.number,
|
||||||
|
args: {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (!output.topic) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
var indexedOutputs = filterInputs(event.inputs, true);
|
var indexedOutputs = filterInputs(event.inputs, true);
|
||||||
var indexedData = "0x" + output.topic.slice(1, output.topic.length).map(function (topic) { return topic.slice(2); }).join("");
|
var indexedData = "0x" + output.topic.slice(1, output.topic.length).map(function (topic) { return topic.slice(2); }).join("");
|
||||||
var indexedRes = abi.formatOutput(indexedOutputs, indexedData);
|
var indexedRes = abi.formatOutput(indexedOutputs, indexedData);
|
||||||
@ -112,8 +116,20 @@ var outputParser = function (event) {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = {
|
var getMatchingEvent = function (events, payload) {
|
||||||
inputParser: inputParser,
|
for (var i = 0; i < events.length; i++) {
|
||||||
outputParser: outputParser
|
var signature = abi.eventSignatureFromAscii(events[i].name);
|
||||||
|
if (signature === payload.topic[0]) {
|
||||||
|
return events[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
inputParser: inputParser,
|
||||||
|
outputParser: outputParser,
|
||||||
|
getMatchingEvent: getMatchingEvent
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -37,6 +37,8 @@ var Filter = function(options, impl) {
|
|||||||
console.warn('"topics" is deprecated, use "topic" instead');
|
console.warn('"topics" is deprecated, use "topic" instead');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this._onWatchResult = options._onWatchEventResult;
|
||||||
|
|
||||||
// evaluate lazy properties
|
// evaluate lazy properties
|
||||||
options = {
|
options = {
|
||||||
to: options.to,
|
to: options.to,
|
||||||
@ -71,7 +73,8 @@ Filter.prototype.changed = function(callback) {
|
|||||||
Filter.prototype.trigger = function(messages) {
|
Filter.prototype.trigger = function(messages) {
|
||||||
for (var i = 0; i < this.callbacks.length; i++) {
|
for (var i = 0; i < this.callbacks.length; i++) {
|
||||||
for (var j = 0; j < messages.length; j++) {
|
for (var j = 0; j < messages.length; j++) {
|
||||||
this.callbacks[i].call(this, messages[j]);
|
var message = this._onWatchResult ? this._onWatchResult(messages[j]) : messages[j];
|
||||||
|
this.callbacks[i].call(this, message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user