From da4a05b81f86c45113c44283d833ce9119eaed6a Mon Sep 17 00:00:00 2001 From: nivida Date: Mon, 25 Nov 2019 12:25:33 +0100 Subject: [PATCH 1/2] big-number (BN & BigNumber) mapping added to abi.encodeParameter and abi.encodeParameters. --- package-lock.json | 8 ++++---- packages/web3-eth-abi/src/index.js | 23 ++++++++++++++++++----- test/abi.encodeParameter.js | 24 +++++++++++++++++++++++- 3 files changed, 45 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2358d6dee23..c077da35140 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "web3", - "version": "1.2.2", + "version": "1.2.3", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -16728,9 +16728,9 @@ } }, "typescript": { - "version": "3.8.0-dev.20191115", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.0-dev.20191115.tgz", - "integrity": "sha512-RWOHpwczVXrLrwkLSGmsYoNaPyxIZse9iXjR7G6QDEGHcSBNUp+rAOr6AAeyIZg7QyPYROM35BHJJQq1efwKpg==", + "version": "3.8.0-dev.20191125", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.0-dev.20191125.tgz", + "integrity": "sha512-wneTHLB4oFcN6rpNNwVxqQZP9u6v8La/VI3fq/rtXarSrd0VsOADMMgeUCTEEtfs1Gapnx4HryaaM5t7YXUvWg==", "dev": true }, "uglify-js": { diff --git a/packages/web3-eth-abi/src/index.js b/packages/web3-eth-abi/src/index.js index d21d80a846c..22a63575f0b 100644 --- a/packages/web3-eth-abi/src/index.js +++ b/packages/web3-eth-abi/src/index.js @@ -76,8 +76,10 @@ ABICoder.prototype.encodeEventSignature = function (functionName) { * Should be used to encode plain param * * @method encodeParameter - * @param {String} type - * @param {Object} param + * + * @param {String|Object} type + * @param {any} param + * * @return {String} encoded plain param */ ABICoder.prototype.encodeParameter = function (type, param) { @@ -88,12 +90,23 @@ ABICoder.prototype.encodeParameter = function (type, param) { * Should be used to encode list of params * * @method encodeParameters - * @param {Array} types - * @param {Array} params + * + * @param {Array} types + * @param {Array} params + * * @return {String} encoded list of params */ ABICoder.prototype.encodeParameters = function (types, params) { - return ethersAbiCoder.encode(this.mapTypes(types), params); + return ethersAbiCoder.encode( + this.mapTypes(types), + params.map(function (param) { + if (utils.isBN(param) || utils.isBigNumber(param)) { + return param.toString(10); + } + + return param; + }) + ); }; /** diff --git a/test/abi.encodeParameter.js b/test/abi.encodeParameter.js index 825e9b31751..1a64049fe6b 100644 --- a/test/abi.encodeParameter.js +++ b/test/abi.encodeParameter.js @@ -1,5 +1,7 @@ var chai = require('chai'); var assert = chai.assert; +var BN = require('bn.js'); +var BigNumber = require('bignumber.js'); var coder = require('../packages/web3-eth-abi'); @@ -305,7 +307,17 @@ describe('lib/solidity/coder', function () { '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000120' + '000000000000000000000000000000000000000000000000000000000000000f' + - '74657374696e672074657374696e670000000000000000000000000000000000' }) + '74657374696e672074657374696e670000000000000000000000000000000000' }); + test({ + type: 'uint256', + value: new BN(42), + expected: '000000000000000000000000000000000000000000000000000000000000002a' + }); + test({ + type: 'uint256', + value: new BigNumber(42), + expected: '000000000000000000000000000000000000000000000000000000000000002a' + }); }); }); @@ -656,6 +668,16 @@ describe('lib/solidity/coder', function () { 'bc00000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000001' + 'de00000000000000000000000000000000000000000000000000000000000000' }) + test({ + types: ['uint256', 'uint256'], + values: [new BN(42), new BN(42)], + expected: '000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a' + }); + test({ + types: ['uint256', 'uint256'], + values: [new BigNumber(42), new BigNumber(42)], + expected: '000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a' + }); }); }); From 4cef2eb02b8b4505e6010478ee73c98865a3fbb8 Mon Sep 17 00:00:00 2001 From: nivida Date: Mon, 25 Nov 2019 12:31:59 +0100 Subject: [PATCH 2/2] CHANGELOG.md updated --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d84e7e50cc8..1e5837a1491 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -105,5 +105,6 @@ Released with 1.0.0-beta.37 code base. - ``eth_requestAccounts`` as ``requestAccounts`` added to web3-eth package (#3219) - ``sha3Raw`` and ``soliditySha3Raw`` added to web3-utils package (#3226) - ``eth_getProof`` as ``getProof`` added to web3-eth package (#3220) +- ``BN`` and ``BigNumber`` objects are now supported by the ``abi.encodeParameter(s)`` method (#3238) ### Fixed