Skip to content

abi decode value returned as [Getter] and throws error when accessing it #1361

Closed
@miguelmota

Description

@miguelmota

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

DeepinScreenshot_select-area_20210314182221

Etherscan is able to decode it correctly

DeepinScreenshot_select-area_20210314182214

Metadata

Metadata

Assignees

No one assigned

    Labels

    discussionQuestions, feedback and general information.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions