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
JavaScript
;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'];