UNPKG

ethereum-web-token

Version:

EWT bundles Ethereum function-calls into [JWT](https://jwt.io/)-like tokens. It simplifies the use of ECDSA signatures for webapps and the development of [Smart Oracles](https://github.com/codius/codius/wiki/Smart-Oracles:-A-Simple,-Powerful-Approach-to-S

83 lines (53 loc) 3.53 kB
'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);var _createClass2 = require('babel-runtime/helpers/createClass');var _createClass3 = _interopRequireDefault(_createClass2);var _decoder = require('../../decoder/decoder');var _decoder2 = _interopRequireDefault(_decoder); var _decodedLog = require('./decodedLog');var _decodedLog2 = _interopRequireDefault(_decodedLog); var _decodedLogParam = require('./decodedLogParam');var _decodedLogParam2 = _interopRequireDefault(_decodedLogParam); var _eventParam = require('./eventParam');var _eventParam2 = _interopRequireDefault(_eventParam); var _sliceAs = require('../../util/sliceAs'); var _signature = require('../../util/signature');function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}var Event = function () { function Event(abi) {(0, _classCallCheck3.default)(this, Event); this._name = abi.name; this._inputs = _eventParam2.default.toEventParams(abi.inputs || []); this._anonymous = !!abi.anonymous; this._signature = (0, _signature.eventSignature)(this._name, this.inputParamTypes()); }(0, _createClass3.default)(Event, [{ key: 'inputParamTypes', value: function inputParamTypes() { return this._inputs.map(function (input) {return input.kind;}); } }, { key: 'inputParamNames', value: function inputParamNames() { return this._inputs.map(function (input) {return input.name;}); } }, { key: 'indexedParams', value: function indexedParams( indexed) { return this._inputs.filter(function (input) {return input.indexed === indexed;}); } }, { key: 'decodeLog', value: function decodeLog( topics, data) { var topicParams = this.indexedParams(true); var dataParams = this.indexedParams(false); var address = void 0; var toSkip = void 0; if (!this.anonymous) { address = (0, _sliceAs.asAddress)(topics[0]); toSkip = 1; } else { toSkip = 0; } var topicTypes = topicParams.map(function (param) {return param.kind;}); var flatTopics = topics.filter(function (topic, idx) {return idx >= toSkip;}).join(''); var topicTokens = _decoder2.default.decode(topicTypes, flatTopics); if (topicTokens.length !== topics.length - toSkip) { throw new Error('Invalid topic data'); } var dataTypes = dataParams.map(function (param) {return param.kind;}); var dataTokens = _decoder2.default.decode(dataTypes, data); var namedTokens = {}; topicParams.forEach(function (param, idx) { namedTokens[param.name] = topicTokens[idx]; }); dataParams.forEach(function (param, idx) { namedTokens[param.name] = dataTokens[idx]; }); var inputParamTypes = this.inputParamTypes(); var decodedParams = this.inputParamNames(). map(function (name, idx) {return new _decodedLogParam2.default(name, inputParamTypes[idx], namedTokens[name]);}); return new _decodedLog2.default(decodedParams, address); } }, { key: 'name', get: function get() {return this._name;} }, { key: 'inputs', get: function get() {return this._inputs;} }, { key: 'anonymous', get: function get() {return this._anonymous;} }, { key: 'signature', get: function get() {return this._signature;} }]);return Event;}();exports.default = Event;module.exports = exports['default'];