diff options
author | Marek Kotewicz <marek.kotewicz@gmail.com> | 2015-02-03 23:16:38 +0800 |
---|---|---|
committer | Marek Kotewicz <marek.kotewicz@gmail.com> | 2015-02-03 23:16:38 +0800 |
commit | a5909d82eb16d6e631bd5f89d700eced205b2fcf (patch) | |
tree | e27c8a49992843496c6c48bbb94928c7d3c62b04 /lib | |
parent | 1860b3dff93e3a09cb7fba753b8531b11169f915 (diff) | |
download | dexon-a5909d82eb16d6e631bd5f89d700eced205b2fcf.tar dexon-a5909d82eb16d6e631bd5f89d700eced205b2fcf.tar.gz dexon-a5909d82eb16d6e631bd5f89d700eced205b2fcf.tar.bz2 dexon-a5909d82eb16d6e631bd5f89d700eced205b2fcf.tar.lz dexon-a5909d82eb16d6e631bd5f89d700eced205b2fcf.tar.xz dexon-a5909d82eb16d6e631bd5f89d700eced205b2fcf.tar.zst dexon-a5909d82eb16d6e631bd5f89d700eced205b2fcf.zip |
parsing events output
Diffstat (limited to 'lib')
-rw-r--r-- | lib/contract.js | 9 | ||||
-rw-r--r-- | lib/event.js | 22 | ||||
-rw-r--r-- | lib/filter.js | 5 |
3 files changed, 32 insertions, 4 deletions
diff --git a/lib/contract.js b/lib/contract.js index 82e59af54..a0525bd9d 100644 --- a/lib/contract.js +++ b/lib/contract.js @@ -120,6 +120,11 @@ var addFunctionsToContract = function (contract, desc, address) { var addEventRelatedPropertiesToContract = function (contract, desc, 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', { get: function() { @@ -140,6 +145,10 @@ var addEventsToContract = function (contract, desc, address) { var signature = abi.eventSignatureFromAscii(e.name); var event = eventImpl.inputParser(address, signature, e); var o = event.apply(null, params); + o._onWatchEventResult = function (data) { + var parser = eventImpl.outputParser(e); + return parser(data); + }; return web3.eth.watch(o); }; diff --git a/lib/event.js b/lib/event.js index a50b2ae28..0c41e0a39 100644 --- a/lib/event.js +++ b/lib/event.js @@ -90,14 +90,18 @@ var getArgumentsObject = function (inputs, indexed, notIndexed) { }, {}); }; - var outputParser = function (event) { return function (output) { var result = { event: utils.extractDisplayName(event.name), - number: output.number + number: output.number, + args: {} }; + + if (!output.topic) { + return result; + } var indexedOutputs = filterInputs(event.inputs, true); var indexedData = "0x" + output.topic.slice(1, output.topic.length).map(function (topic) { return topic.slice(2); }).join(""); @@ -112,8 +116,20 @@ 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 = { inputParser: inputParser, - outputParser: outputParser + outputParser: outputParser, + getMatchingEvent: getMatchingEvent }; diff --git a/lib/filter.js b/lib/filter.js index 4cb297f37..352253ef3 100644 --- a/lib/filter.js +++ b/lib/filter.js @@ -36,6 +36,8 @@ var Filter = function(options, impl) { if (options.topics) { console.warn('"topics" is deprecated, use "topic" instead'); } + + this._onWatchResult = options._onWatchEventResult; // evaluate lazy properties options = { @@ -71,7 +73,8 @@ Filter.prototype.changed = function(callback) { Filter.prototype.trigger = function(messages) { for (var i = 0; i < this.callbacks.length; i++) { 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); } } }; |