Can someone help me with function data decoding:
I have contract: ###0x2a0c0dbecc7e4d658f48e01e3fa353f44050c208###
And Trade function ABI:
{"constant":false,"inputs":[{"name":"tradeValues","type":"uint256[8]"},{"name":"tradeAddresses","type":"address[4]"},{"name":"v","type":"uint8[2]"},{"name":"rs","type":"bytes32[4]"}],"name":"trade","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}
and imputData
How i can get function parameters mapped with this input data using your library?
For this you can use the Interface class directly:
// The ABI is a list of your methods and events
const abi = [ {"constant":false,"inputs":[{"name":"tradeValues","type":"uint256[8]"},{"name":"tradeAddresses","type":"address[4]"},{"name":"v","type":"uint8[2]"},{"name":"rs","type":"bytes32[4]"}],"name":"trade","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"} ];
// An Interface allows encoding and decoding
const iface = new ethers.utils.Interface(abi);
// Your data
const data = "0xef34358800000000000000000000000000000000000000000000000004c9ac80f14d93a000000000000000000000000000000000000000000000007c248edbd15e08d2db000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000038af47900000000000000000000000000000000000000000000000004c9ac80f14d93a00000000000000000000000000000000000000000000000000000000006da63ec00000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000b076a99e0184e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000763fa6806e1acf68130d2d0f0df754c93cc546b20000000000000000000000009fee99fa1eb0c0e7ddbba00ce764ae1fe9bd2684000000000000000000000000bd58cdf2266552d39ad8621793bd60c5b9f97e38000000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001c4627017b1356f69eeb22be5714a776eb22444aab1f1f06aaf73db2649b97790930819bcbf2d30aced3194e0a67f111a30a17d3b8d947bea28173be705b5d28647c18f4f245bf99ef360fbe036296b141920e6f4927aa1ce9d72e9a07af5aff1015146825ccd28ba8a0cd9ebaa9811039e4a31c94c3b5f9e1ceecd13d0060559a";
// Extract everything
const txInfo = iface.parseTransaction({ data })
// The complete description
console.log(txInfo);
/*
TransactionDescription {
args:
[ [ [BigNumber],
[BigNumber],
[BigNumber],
[BigNumber],
[BigNumber],
[BigNumber],
[BigNumber],
[BigNumber] ],
[ '0x0000000000000000000000000000000000000000',
'0x763Fa6806e1acf68130D2D0f0df754C93cC546B2',
'0x9Fee99FA1eb0C0E7DDbbA00ce764ae1FE9Bd2684',
'0xbD58cdF2266552D39AD8621793bD60c5b9F97E38' ],
[ 27, 28 ],
[ '0x4627017b1356f69eeb22be5714a776eb22444aab1f1f06aaf73db2649b977909',
'0x30819bcbf2d30aced3194e0a67f111a30a17d3b8d947bea28173be705b5d2864',
'0x7c18f4f245bf99ef360fbe036296b141920e6f4927aa1ce9d72e9a07af5aff10',
'0x15146825ccd28ba8a0cd9ebaa9811039e4a31c94c3b5f9e1ceecd13d0060559a' ],
tradeValues: [ [BigNumber],
[BigNumber],
[BigNumber],
[BigNumber],
[BigNumber],
[BigNumber],
[BigNumber],
[BigNumber] ],
tradeAddresses: [ '0x0000000000000000000000000000000000000000',
'0x763Fa6806e1acf68130D2D0f0df754C93cC546B2',
'0x9Fee99FA1eb0C0E7DDbbA00ce764ae1FE9Bd2684',
'0xbD58cdF2266552D39AD8621793bD60c5b9F97E38' ],
v: [ 27, 28 ],
rs: [ '0x4627017b1356f69eeb22be5714a776eb22444aab1f1f06aaf73db2649b977909',
'0x30819bcbf2d30aced3194e0a67f111a30a17d3b8d947bea28173be705b5d2864',
'0x7c18f4f245bf99ef360fbe036296b141920e6f4927aa1ce9d72e9a07af5aff10',
'0x15146825ccd28ba8a0cd9ebaa9811039e4a31c94c3b5f9e1ceecd13d0060559a' ] ],
functionFragment:
FunctionFragment {
type: 'function',
name: 'trade',
constant: false,
inputs: [ [ParamType], [ParamType], [ParamType], [ParamType] ],
outputs: [ [ParamType] ],
payable: false,
stateMutability: 'nonpayable',
gas: null,
_isFragment: true,
constructor:
{ [Function: FunctionFragment]
from: [Function],
fromObject: [Function],
fromString: [Function],
isFunctionFragment: [Function] },
format: [Function] },
name: 'trade',
signature: 'trade(uint256[8],address[4],uint8[2],bytes32[4])',
sighash: '0xef343588',
value: BigNumber { _hex: '0x00', _isBigNumber: true } }
*/
// Just the args
console.log(txInfo.args)
/*
[ [ BigNumber { _hex: '0x04c9ac80f14d93a0', _isBigNumber: true },
BigNumber { _hex: '0x7c248edbd15e08d2db', _isBigNumber: true },
BigNumber { _hex: '0x2710', _isBigNumber: true },
BigNumber { _hex: '0x038af479', _isBigNumber: true },
BigNumber { _hex: '0x04c9ac80f14d93a0', _isBigNumber: true },
BigNumber { _hex: '0x06da63ec', _isBigNumber: true },
BigNumber { _hex: '0x038d7ea4c68000', _isBigNumber: true },
BigNumber { _hex: '0x0b076a99e0184e', _isBigNumber: true } ],
[ '0x0000000000000000000000000000000000000000',
'0x763Fa6806e1acf68130D2D0f0df754C93cC546B2',
'0x9Fee99FA1eb0C0E7DDbbA00ce764ae1FE9Bd2684',
'0xbD58cdF2266552D39AD8621793bD60c5b9F97E38' ],
[ 27, 28 ],
[ '0x4627017b1356f69eeb22be5714a776eb22444aab1f1f06aaf73db2649b977909',
'0x30819bcbf2d30aced3194e0a67f111a30a17d3b8d947bea28173be705b5d2864',
'0x7c18f4f245bf99ef360fbe036296b141920e6f4927aa1ce9d72e9a07af5aff10',
'0x15146825ccd28ba8a0cd9ebaa9811039e4a31c94c3b5f9e1ceecd13d0060559a' ],
tradeValues: [ BigNumber { _hex: '0x04c9ac80f14d93a0', _isBigNumber: true },
BigNumber { _hex: '0x7c248edbd15e08d2db', _isBigNumber: true },
BigNumber { _hex: '0x2710', _isBigNumber: true },
BigNumber { _hex: '0x038af479', _isBigNumber: true },
BigNumber { _hex: '0x04c9ac80f14d93a0', _isBigNumber: true },
BigNumber { _hex: '0x06da63ec', _isBigNumber: true },
BigNumber { _hex: '0x038d7ea4c68000', _isBigNumber: true },
BigNumber { _hex: '0x0b076a99e0184e', _isBigNumber: true } ],
tradeAddresses: [ '0x0000000000000000000000000000000000000000',
'0x763Fa6806e1acf68130D2D0f0df754C93cC546B2',
'0x9Fee99FA1eb0C0E7DDbbA00ce764ae1FE9Bd2684',
'0xbD58cdF2266552D39AD8621793bD60c5b9F97E38' ],
v: [ 27, 28 ],
rs: [ '0x4627017b1356f69eeb22be5714a776eb22444aab1f1f06aaf73db2649b977909',
'0x30819bcbf2d30aced3194e0a67f111a30a17d3b8d947bea28173be705b5d2864',
'0x7c18f4f245bf99ef360fbe036296b141920e6f4927aa1ce9d72e9a07af5aff10',
'0x15146825ccd28ba8a0cd9ebaa9811039e4a31c94c3b5f9e1ceecd13d0060559a' ] ]
*/
Hope that helps. :)
works like a charm. Thank you
Most helpful comment
For this you can use the Interface class directly:
Hope that helps. :)