Closed
Description
Hi,
I'm trying to decode function data but geting an unexpected result. This ABI has two input types so the expected result is an array with two values. The result array is indeed length of 2, however the first item is returned as [Getter]
function instead of returning the address value.
const ethers = require('ethers')
const fragment = { constant: false, inputs: [{ name: '_to', type: 'address' }, { name: '_value', type: 'uint256' }], name: 'transfer', outputs: [{ name: 'success', type: 'bool' }], payable: false, type: 'function' }
const ifc = new ethers.utils.Interface([])
const data = '0xa9059cbb85f1150654584d0192059454e9dc1532d9d9cf914926406a02370cea80cf32f600000000000000000000000000000000000000000000000000000000033dc10b'
const result = ifc.decodeFunctionData(ethers.utils.FunctionFragment.fromObject(fragment), data)
console.log(result)
console.log(result.length)
console.log(result[0])
[
[Getter],
BigNumber { _hex: '0x033dc10b', _isBigNumber: true },
_value: BigNumber { _hex: '0x033dc10b', _isBigNumber: true }
]
2
/home/mota/Sandbox/test/node_modules/ethers/node_modules/@ethersproject/abi/lib/coders/array.js:163
get: function () { throw value; }
^
_to: value out of range (argument="value", value=20, code=INVALID_ARGUMENT, version=bytes/5.0.11)
at Logger.makeError (/home/mota/Sandbox/test/node_modules/@ethersproject/logger/lib/index.js:180:21)
at Logger.throwError (/home/mota/Sandbox/test/node_modules/@ethersproject/logger/lib/index.js:189:20)
at Logger.throwArgumentError (/home/mota/Sandbox/test/node_modules/@ethersproject/logger/lib/index.js:192:21)
at Object.hexZeroPad (/home/mota/Sandbox/test/node_modules/@ethersproject/bytes/lib/index.js:264:16)
at AddressCoder.decode (/home/mota/Sandbox/test/node_modules/ethers/node_modules/@ethersproject/abi/lib/coders/address.js:40:45)
at /home/mota/Sandbox/test/node_modules/ethers/node_modules/@ethersproject/abi/lib/coders/array.js:109:31
at Array.forEach (<anonymous>)
at Object.unpack (/home/mota/Sandbox/test/node_modules/ethers/node_modules/@ethersproject/abi/lib/coders/array.js:88:12)
at TupleCoder.decode (/home/mota/Sandbox/test/node_modules/ethers/node_modules/@ethersproject/abi/lib/coders/tuple.js:74:49)
at AbiCoder.decode (/home/mota/Sandbox/test/node_modules/ethers/node_modules/@ethersproject/abi/lib/abi-coder.js:100:22) {
reason: 'value out of range',
code: 'INVALID_ARGUMENT',
argument: 'value',
value: 20,
baseType: 'address',
type: 'address'
}
Tx for reference: https://etherscan.io/tx/0x0fc8f1cb5112c4679dfcbde54306cabecedfbfd115030252b2e3d77ed7b7da8c
Etherscan is able to decode it correctly