Skip to content

Commit

Permalink
ethjs-abi 2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
SilentCicero authored and SilentCicero committed Sep 13, 2017
1 parent d16fb48 commit fef852f
Show file tree
Hide file tree
Showing 7 changed files with 41 additions and 28 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# 0.2.0 -- accept length zero

1. accept length zero, '0x' for address/fixed and dymaic bytes

# 0.1.9 -- event and log decoding

1. Event and log decoding methods
Expand Down
19 changes: 14 additions & 5 deletions dist/ethjs-abi.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/ethjs-abi.js.map

Large diffs are not rendered by default.

11 changes: 0 additions & 11 deletions dist/ethjs-abi.min.js

This file was deleted.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ethjs-abi",
"version": "0.1.9",
"version": "0.2.0",
"description": "Just the Ethereum encoding and decoding methods from the ethers-io-wallet.",
"main": "lib/index.js",
"files": [
Expand Down Expand Up @@ -137,7 +137,7 @@
],
"repository": {
"type": "git",
"url": "git://github.com/ethjs/ethers-abi"
"url": "git://github.com/ethjs/ethjs-abi"
},
"license": "MIT",
"lint-staged": {
Expand Down
21 changes: 16 additions & 5 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ function decodeParams(names, types, data, useNumberedParams = true) {
var offset = 0;
types.forEach(function(type, index) {
var coder = getParamCoder(type);

if (coder.dynamic) {
var dynamicOffset = uint256Coder.decode(data, offset);
var result = coder.decode(data, dynamicOffset.value.toNumber());
Expand All @@ -81,8 +82,14 @@ function decodeParams(names, types, data, useNumberedParams = true) {
var result = coder.decode(data, offset);
offset += result.consumed;
}
if (useNumberedParams) values[index] = result.value;
if (names[index]) { values[names[index]] = result.value; }

if (useNumberedParams) {
values[index] = result.value;
}

if (names[index]) {
values[names[index]] = result.value;
}
});
return values;
}
Expand Down Expand Up @@ -111,6 +118,7 @@ function encodeEvent(eventObject, values) {

function eventSignature(eventObject) {
const signature = `${eventObject.name}(${utils.getKeys(eventObject.inputs, 'type').join(',')})`;

return `0x${utils.keccak256(signature)}`;
}

Expand All @@ -121,12 +129,15 @@ function decodeEvent(eventObject, data, topics, useNumberedParams = true) {
const nonIndexedTypes = utils.getKeys(nonIndexed, 'type');
const event = decodeParams(nonIndexedNames, nonIndexedTypes, utils.hexOrBuffer(data), useNumberedParams);
const topicOffset = eventObject.anonymous ? 0 : 1;

eventObject.inputs.filter((input) => input.indexed).map((input, i) => {
const topic = new Buffer(topics[i + topicOffset].slice(2),'hex');
const topic = new Buffer(topics[i + topicOffset].slice(2), 'hex');
const coder = getParamCoder(input.type);
event[input.name] = coder.decode(topic, 0).value;
})
event._eventName = eventObject.name
});

event._eventName = eventObject.name;

return event;
}

Expand Down
8 changes: 4 additions & 4 deletions src/utils/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ function coderFixedBytes(length) {
return result;
},
decode: function decodeFixedBytes(data, offset) {
if (data.length < offset + 32) { throw new Error(`[ethjs-abi] while decoding fixed bytes, invalid bytes data length: ${length}`); }
if (data.length !== 0 && data.length < offset + 32) { throw new Error(`[ethjs-abi] while decoding fixed bytes, invalid bytes data length: ${length}`); }

return {
consumed: 32,
Expand All @@ -168,7 +168,7 @@ const coderAddress = {
value: '0x',
};
}
if (data.length < offset + 32) { throw new Error(`[ethjs-abi] while decoding address data, invalid address data, invalid byte length ${data.length}`); }
if (data.length !== 0 && data.length < offset + 32) { throw new Error(`[ethjs-abi] while decoding address data, invalid address data, invalid byte length ${data.length}`); }
return {
consumed: 32,
value: `0x${data.slice(offset + 12, offset + 32).toString('hex')}`,
Expand All @@ -189,11 +189,11 @@ function encodeDynamicBytesHelper(value) {
}

function decodeDynamicBytesHelper(data, offset) {
if (data.length < offset + 32) { throw new Error(`[ethjs-abi] while decoding dynamic bytes data, invalid bytes length: ${data.length} should be less than ${offset + 32}`); }
if (data.length !== 0 && data.length < offset + 32) { throw new Error(`[ethjs-abi] while decoding dynamic bytes data, invalid bytes length: ${data.length} should be less than ${offset + 32}`); }

var length = uint256Coder.decode(data, offset).value; // eslint-disable-line
length = length.toNumber();
if (data.length < offset + 32 + length) { throw new Error(`[ethjs-abi] while decoding dynamic bytes data, invalid bytes length: ${data.length} should be less than ${offset + 32 + length}`); }
if (data.length !== 0 && data.length < offset + 32 + length) { throw new Error(`[ethjs-abi] while decoding dynamic bytes data, invalid bytes length: ${data.length} should be less than ${offset + 32 + length}`); }

return {
consumed: parseInt(32 + 32 * Math.ceil(length / 32), 10),
Expand Down

0 comments on commit fef852f

Please sign in to comment.