Socket
Socket
Sign inDemoInstall

ethereum-input-data-decoder

Package Overview
Dependencies
Maintainers
1
Versions
34
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ethereum-input-data-decoder - npm Package Compare versions

Comparing version 0.0.15 to 0.0.16

test/data/erc71_transferfrom_tx_data.txt

48

dist/index.js

@@ -41,2 +41,3 @@ 'use strict';

var obj = this.abi[i];
if (obj.type !== 'constructor') {

@@ -86,5 +87,5 @@ continue;

var dataBuf = new Buffer(data.replace(/^0x/, ''), 'hex');
var methodId = dataBuf.slice(0, 4).toString('hex');
var inputsBuf = dataBuf.slice(4);
var dataBuf = Buffer.from(data.replace(/^0x/, ''), 'hex');
var methodId = dataBuf.subarray(0, 4).toString('hex');
var inputsBuf = dataBuf.subarray(4);

@@ -100,7 +101,3 @@ var result = this.abi.reduce(function (acc, obj) {

if (hash === methodId) {
// https://github.com/miguelmota/ethereum-input-data-decoder/issues/8
if (methodId === 'a9059cbb') {
inputsBuf = Buffer.concat([new Buffer(12), inputsBuf.slice(12, 32), inputsBuf.slice(32)]);
}
inputsBuf = normalizeAddresses(types, inputsBuf);
var inputs = ethabi.rawDecode(types, inputsBuf);

@@ -134,2 +131,37 @@

function normalizeAddresses(types, input) {
var offset = 0;
for (var i = 0; i < types.length; i++) {
var type = types[i];
if (type === 'address') {
input.set(Buffer.alloc(12), offset);
}
if (isArray(type)) {
var size = parseTypeArray(type);
if (size && size !== 'dynamic') {
offset += 32 * size;
} else {
offset += 32;
}
} else {
offset += 32;
}
}
return input;
}
function parseTypeArray(type) {
var tmp = type.match(/(.*)\[(.*?)\]$/);
if (tmp) {
return tmp[2] === '' ? 'dynamic' : parseInt(tmp[2], 10);
}
return null;
}
function isArray(type) {
return type.lastIndexOf(']') === type.length - 1;
}
module.exports = InputDataDecoder;

@@ -74,4 +74,4 @@ const fs = require('fs')

const dataBuf = Buffer.from(data.replace(/^0x/, ''), 'hex')
const methodId = dataBuf.slice(0, 4).toString('hex')
var inputsBuf = dataBuf.slice(4)
const methodId = dataBuf.subarray(0, 4).toString('hex')
var inputsBuf = dataBuf.subarray(4)

@@ -85,7 +85,3 @@ const result = this.abi.reduce((acc, obj) => {

if (hash === methodId) {
// NOTE: https://github.com/miguelmota/ethereum-input-data-decoder/issues/8
if (methodId === 'a9059cbb') {
inputsBuf = Buffer.concat([new Buffer(12), inputsBuf.slice(12, 32), inputsBuf.slice(32)])
}
inputsBuf = normalizeAddresses(types, inputsBuf)
const inputs = ethabi.rawDecode(types, inputsBuf)

@@ -116,2 +112,37 @@

function normalizeAddresses (types, input) {
let offset = 0
for (let i = 0; i < types.length; i++) {
const type = types[i]
if (type === 'address') {
input.set(Buffer.alloc(12), offset)
}
if (isArray(type)) {
const size = parseTypeArray(type)
if (size && size !== 'dynamic') {
offset += 32 * size
} else {
offset += 32
}
} else {
offset += 32
}
}
return input
}
function parseTypeArray (type) {
const tmp = type.match(/(.*)\[(.*?)\]$/)
if (tmp) {
return tmp[2] === '' ? 'dynamic' : parseInt(tmp[2], 10)
}
return null
}
function isArray (type) {
return type.lastIndexOf(']') === type.length - 1
}
module.exports = InputDataDecoder

5

package.json
{
"name": "ethereum-input-data-decoder",
"version": "0.0.15",
"version": "0.0.16",
"description": "Ethereum smart contract transaction input data decoder",

@@ -11,3 +11,4 @@ "main": "dist/index.js",

"lint": "standard index.js test/*.js",
"lint:fix": "standard --fix index.js test/*.js"
"lint:fix": "standard --fix index.js test/*.js",
"prepublishOnly": "npm run lint:fix && npm run build"
},

@@ -14,0 +15,0 @@ "repository": {

const fs = require('fs')
const test = require('tape')
const InputDataDecoder = require('../')
const InputDataDecoder = require('../index')
// NOTE: Example input data from this transaction
// https://etherscan.io/tx/0xa6f019f2fc916bd8df607f1c99148ebb06322999ff08bc88927fe8406acae1b2
test('decoder', t => {
// https://etherscan.io/tx/0xa6f019f2fc916bd8df607f1c99148ebb06322999ff08bc88927fe8406acae1b2
const data = '0x67043cae0000000000000000000000005a9dac9315fdd1c3d13ef8af7fdfeb522db08f020000000000000000000000000000000000000000000000000000000058a20230000000000000000000000000000000000000000000000000000000000040293400000000000000000000000000000000000000000000000000000000000000a0f3df64775a2dfb6bc9e09dced96d0816ff5055bf95da13ce5b6c3f53b97071c800000000000000000000000000000000000000000000000000000000000000034254430000000000000000000000000000000000000000000000000000000000'

@@ -65,2 +63,17 @@

})
// https://etherscan.io/tx/0x94fadf5f5c7805b8ceb8a13a0a7fbce06054ff08cdfdc2fd555a7902592aebe6
t.test('erc721 transferFrom', t => {
t.plan(3)
const abi = JSON.parse(fs.readFileSync(`${__dirname}/data/erc721_abi.json`))
const decoder = new InputDataDecoder(abi)
const data = fs.readFileSync(`${__dirname}/data/erc71_transferfrom_tx_data.txt`)
const result = decoder.decodeData(data)
t.equal(result.inputs[0].toString(16), '10017ca37b1257ac0771e24652aa28c758e378eb')
t.equal(result.inputs[1].toString(16), 'e7a632d89104385bdd3992eeb82cffeb48e4e539')
t.equal(result.inputs[2].toString(16), '5dc5')
})
})

@@ -67,0 +80,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc