/* This file is part of ethereum.js. ethereum.js is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. ethereum.js is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with ethereum.js. If not, see . */ /** * @file allevents.js * @author Marek Kotewicz * @date 2014 */ var sha3 = require('../utils/sha3'); var SolidityEvent = require('./event'); var formatters = require('./formatters'); var utils = require('../utils/utils'); var Filter = require('./filter'); var watches = require('./watches'); var AllSolidityEvents = function (json, address) { this._json = json; this._address = address; }; AllSolidityEvents.prototype.encode = function (options) { options = options || {}; var result = {}; ['fromBlock', 'toBlock'].filter(function (f) { return options[f] !== undefined; }).forEach(function (f) { result[f] = formatters.inputBlockNumberFormatter(options[f]); }); result.address = this._address; return result; }; AllSolidityEvents.prototype.decode = function (data) { data.data = data.data || ''; data.topics = data.topics || []; var eventTopic = data.topics[0].slice(2); var match = this._json.filter(function (j) { return eventTopic === sha3(utils.transformToFullName(j)); })[0]; if (!match) { // cannot find matching event? console.warn('cannot find event for log'); return data; } var event = new SolidityEvent(match, this._address); return event.decode(data); }; AllSolidityEvents.prototype.execute = function (options, callback) { if (utils.isFunction(arguments[arguments.length - 1])) { callback = arguments[arguments.length - 1]; if(arguments.length === 1) options = null; } var o = this.encode(options); var formatter = this.decode.bind(this); return new Filter(o, watches.eth(), formatter, callback); }; AllSolidityEvents.prototype.attachToContract = function (contract) { var execute = this.execute.bind(this); contract.allEvents = execute; }; module.exports = AllSolidityEvents;