ox
Version:
Ethereum Standard Library
897 lines (850 loc) • 767 kB
text/typescript
import { AbiItem, AbiParameters, type Address, Bytes, type Hex } from 'ox'
import { assertType, describe, expect, test } from 'vp/test'
import {
multicall3Abi,
seaportContractConfig,
} from '../../../test/constants/abis.js'
import { address } from '../../../test/constants/addresses.js'
describe('static', () => {
test('blank', () => {
const result = AbiParameters.decode([], '0x')
assertType<readonly []>(result)
expect(result).toEqual([])
})
test('uint', () => {
const result = AbiParameters.decode(
AbiParameters.from('uint'),
'0x0000000000000000000000000000000000000000000000000000000000010f2c',
)
assertType<readonly [bigint]>(result)
expect(result).toEqual([69420n])
})
test('uint8', () => {
const result = AbiParameters.decode(
AbiParameters.from('uint8'),
'0x0000000000000000000000000000000000000000000000000000000000000020',
)
assertType<readonly [number]>(result)
expect(result).toEqual([32])
})
test('uint32', () => {
const result = AbiParameters.decode(
AbiParameters.from('uint32'),
'0x0000000000000000000000000000000000000000000000000000000000010f2c',
)
assertType<readonly [number]>(result)
expect(result).toEqual([69420])
})
describe('int', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('int'),
'0x0000000000000000000000000000000000000000000000000000000000010f2c',
)
assertType<readonly [bigint]>(result)
expect(result).toEqual([69420n])
})
test('negative (twos compliment)', () => {
const result = AbiParameters.decode(
AbiParameters.from('int'),
'0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef0d4',
)
assertType<readonly [bigint]>(result)
expect(result).toEqual([-69420n])
})
})
describe('int8', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('int8'),
'0x000000000000000000000000000000000000000000000000000000000000007f',
)
assertType<readonly [number]>(result)
expect(result).toEqual([127])
})
test('negative (twos compliment)', () => {
const result = AbiParameters.decode(
AbiParameters.from('int8'),
'0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80',
)
assertType<readonly [number]>(result)
expect(result).toEqual([-128])
})
})
describe('int32', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('int32'),
'0x000000000000000000000000000000000000000000000000000000007fffffff',
)
assertType<readonly [number]>(result)
expect(result).toEqual([2147483647])
})
test('negative (twos compliment)', () => {
const result = AbiParameters.decode(
AbiParameters.from('int32'),
'0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000',
)
assertType<readonly [number]>(result)
expect(result).toEqual([-2147483648])
})
})
describe('address', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('address'),
'0x00000000000000000000000014dc79964da2c08b23698b3d3cc7ca32193d9955',
)
assertType<readonly [Address.Address]>(result)
expect(
AbiParameters.decode(
AbiParameters.from('address'),
'0x00000000000000000000000014dc79964da2c08b23698b3d3cc7ca32193d9955',
),
).toEqual(['0x14dC79964da2C08b23698B3D3cc7Ca32193d9955'])
})
test('options: checksumAddress = false', () => {
expect(
AbiParameters.decode(
AbiParameters.from('address'),
'0x00000000000000000000000014dc79964da2c08b23698b3d3cc7ca32193d9955',
{ checksumAddress: false },
),
).toEqual(['0x14dc79964da2c08b23698b3d3cc7ca32193d9955'])
})
})
describe('bytes8', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('bytes8'),
'0x0123456789abcdef000000000000000000000000000000000000000000000000',
)
assertType<readonly [Hex.Hex]>(result)
expect(result).toEqual(['0x0123456789abcdef'])
})
})
describe('bytes16', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('bytes16'),
'0x0123456789abcdef0123456789abcdef00000000000000000000000000000000',
)
assertType<readonly [Hex.Hex]>(result)
expect(result).toEqual(['0x0123456789abcdef0123456789abcdef'])
})
})
describe('uint[3]', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('uint256[3]'),
'0x0000000000000000000000000000000000000000000000000000000000010f2c000000000000000000000000000000000000000000000000000000000000a45500000000000000000000000000000000000000000000000000000000190f1b44',
)
assertType<readonly [readonly [bigint, bigint, bigint]]>(result)
expect(result).toEqual([[69420n, 42069n, 420420420n]])
})
})
describe('int[3]', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('int[3]'),
'0x0000000000000000000000000000000000000000000000000000000000010f2cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5bab00000000000000000000000000000000000000000000000000000000190f1b44',
)
assertType<readonly [readonly [bigint, bigint, bigint]]>(result)
expect(result).toEqual([[69420n, -42069n, 420420420n]])
})
})
describe('address[2]', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('address[2]'),
'0x000000000000000000000000c961145a54c96e3ae9baa048c4f4d6b04c13916b000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ac',
)
assertType<readonly [readonly [Address.Address, Address.Address]]>(result)
expect(result).toEqual([
[
'0xc961145a54C96E3aE9bAA048c4F4D6b04C13916b',
'0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC',
],
])
})
})
describe('bool[2]', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('bool[2]'),
'0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000',
)
assertType<readonly [readonly [boolean, boolean]]>(result)
expect(result).toEqual([[true, false]])
})
})
describe('uint[3][2]', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('uint256[3][2]'),
'0x0000000000000000000000000000000000000000000000000000000000010f2c000000000000000000000000000000000000000000000000000000000000a45500000000000000000000000000000000000000000000000000000000190f1b4400000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000000000000000000000000001a6',
)
assertType<
readonly [
readonly [
readonly [bigint, bigint, bigint],
readonly [bigint, bigint, bigint],
],
]
>(result)
expect(result).toEqual([
[
[69420n, 42069n, 420420420n],
[420n, 44n, 422n],
],
])
})
})
describe('uint[3][2][4]', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('uint[3][2][4]'),
'0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001300000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000015000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000170000000000000000000000000000000000000000000000000000000000000018',
)
assertType<
readonly [
readonly [
readonly [
readonly [bigint, bigint, bigint],
readonly [bigint, bigint, bigint],
],
readonly [
readonly [bigint, bigint, bigint],
readonly [bigint, bigint, bigint],
],
readonly [
readonly [bigint, bigint, bigint],
readonly [bigint, bigint, bigint],
],
readonly [
readonly [bigint, bigint, bigint],
readonly [bigint, bigint, bigint],
],
],
]
>(result)
expect(result).toEqual([
[
[
[1n, 2n, 3n],
[4n, 5n, 6n],
],
[
[7n, 8n, 9n],
[10n, 11n, 12n],
],
[
[13n, 14n, 15n],
[16n, 17n, 18n],
],
[
[19n, 20n, 21n],
[22n, 23n, 24n],
],
],
])
})
})
describe('struct: (uint256,bool,address)', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('(uint256 x, bool y, address z)'),
'0x00000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ac',
)
assertType<
readonly [
{
x: bigint
y: boolean
z: Hex.Hex
},
]
>(result)
expect(result).toEqual([
{ x: 420n, y: true, z: '0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC' },
])
})
})
describe('struct: (uint256,bool,address)', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('(uint256, bool, address)'),
'0x00000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ac',
)
assertType<readonly [readonly [bigint, boolean, Hex.Hex]]>(result)
expect(result).toEqual([
[420n, true, '0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC'],
])
})
})
describe('struct: (uint256,bool,address)', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('(uint256 x, bool, address z)'),
'0x00000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ac',
)
assertType<readonly [readonly [bigint, boolean, Hex.Hex]]>(result)
expect(result).toEqual([
[420n, true, '0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC'],
])
})
})
describe('struct: ()', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from([{ type: 'tuple', components: [] }]),
'0x00000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ac',
)
assertType<readonly [readonly []]>(result)
expect(result).toEqual([[]])
})
})
describe('struct: ((uint256,bool,address),(uint256,bool,address),uint8[2])', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from(
'((uint256 x,bool y,address z) foo, (uint256 x,bool y,address z) baz, uint8[2] x)',
),
'0x00000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ac00000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c961145a54c96e3ae9baa048c4f4d6b04c13916b00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002',
)
assertType<
readonly [
{
foo: {
x: bigint
y: boolean
z: Hex.Hex
}
baz: {
x: bigint
y: boolean
z: Hex.Hex
}
x: readonly [number, number]
},
]
>(result)
expect(result).toEqual([
{
foo: {
x: 420n,
y: true,
z: '0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC',
},
baz: {
x: 69n,
y: false,
z: '0xc961145a54C96E3aE9bAA048c4F4D6b04C13916b',
},
x: [1, 2],
},
])
})
})
describe('uint256[2],bool,string[3]', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('uint256[2], bool, string[3]'),
'0x00000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000004500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000057761676d6900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047669656d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036c6f6c0000000000000000000000000000000000000000000000000000000000',
)
assertType<
readonly [
readonly [bigint, bigint],
boolean,
readonly [string, string, string],
]
>(result)
expect(result).toEqual([[420n, 69n], true, ['wagmi', 'viem', 'lol']])
})
})
describe('uint256[2],bool,string[3]', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('uint256[2], bool, string[3]'),
'0x00000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000004500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000057761676d6900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047669656d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036c6f6c0000000000000000000000000000000000000000000000000000000000',
)
assertType<
readonly [
readonly [bigint, bigint],
boolean,
readonly [string, string, string],
]
>(result)
expect(result).toEqual([[420n, 69n], true, ['wagmi', 'viem', 'lol']])
})
})
describe('uint,bool,address', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('uint, bool, address'),
'0x00000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c961145a54c96e3ae9baa048c4f4d6b04c13916b',
)
assertType<readonly [bigint, boolean, string]>(result)
expect(result).toEqual([
420n,
true,
'0xc961145a54C96E3aE9bAA048c4F4D6b04C13916b',
])
})
})
})
describe('dynamic', () => {
describe('string', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('string'),
'0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000057761676d69000000000000000000000000000000000000000000000000000000',
)
assertType<readonly [string]>(result)
expect(result).toEqual(['wagmi'])
})
test('empty', () => {
const result = AbiParameters.decode(
AbiParameters.from('string'),
'0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000',
)
assertType<readonly [string]>(result)
expect(result).toEqual([''])
})
test('leading NUL byte', () => {
const result = AbiParameters.decode(
AbiParameters.from('string'),
'0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030061620000000000000000000000000000000000000000000000000000000000',
)
assertType<readonly [string]>(result)
expect(result).toMatchInlineSnapshot(`
[
"\u0000ab",
]
`)
})
test('default', () => {
expect(
AbiParameters.decode(
AbiParameters.from('string'),
'0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002da4c6f72656d20697073756d20646f6c6f722073697420616d65742c20636f6e73656374657475722061646970697363696e6720656c69742e204e756e63206661756369627573206c6f72656d2061206c696265726f20617563746f7220636f6e64696d656e74756d2e20446f6e6563206f726e617265206d617373612072686f6e637573206c616375732072757472756d2c20656765742070756c76696e6172206172637520656c656d656e74756d2e204e756e63206d6175726973206c6f72656d2c20736f64616c65732065676574207669766572726120696e2c20657569736d6f642071756973206d692e205072616573656e74206e656320636f6d6d6f646f206c656f2e2050686173656c6c757320636f6e64696d656e74756d206d61757269732073656420616363756d73616e20656c656966656e642e205072616573656e7420616320626c616e6469742073656d2c2065742072757472756d20697073756d2e20457469616d20696e2074656c6c757320616320656e696d20666163696c6973697320756c7472696365732e20467573636520616320766573746962756c756d207175616d2e204475697320736564207075727573207363656c657269737175652c20736f6c6c696369747564696e20657261742061632c2070756c76696e6172206e6973692e2050656c6c656e746573717565206575207075727573206e65632073617069656e207665686963756c6120636f6e76616c6c69732075742076656c20656c69742e2053757370656e6469737365206567657420657820766974616520656e696d20766f6c7574706174207363656c657269737175652e20536564207175697320656c6974207472697374697175652065726174206c756374757320656765737461732061206163206f64696f2e2044756973207665686963756c6120656e696d206163206d6574757320677261766964612c2076656c206d6178696d7573206e69736920696d706572646965742e000000000000',
),
).toMatchInlineSnapshot(
`
[
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc faucibus lorem a libero auctor condimentum. Donec ornare massa rhoncus lacus rutrum, eget pulvinar arcu elementum. Nunc mauris lorem, sodales eget viverra in, euismod quis mi. Praesent nec commodo leo. Phasellus condimentum mauris sed accumsan eleifend. Praesent ac blandit sem, et rutrum ipsum. Etiam in tellus ac enim facilisis ultrices. Fusce ac vestibulum quam. Duis sed purus scelerisque, sollicitudin erat ac, pulvinar nisi. Pellentesque eu purus nec sapien vehicula convallis ut vel elit. Suspendisse eget ex vitae enim volutpat scelerisque. Sed quis elit tristique erat luctus egestas a ac odio. Duis vehicula enim ac metus gravida, vel maximus nisi imperdiet.",
]
`,
)
})
test('emojis', () => {
expect(
AbiParameters.decode(
AbiParameters.from('string'),
'0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000026f09f91a8e2808df09f91a8e2808df09f91a6e2808df09f91a6f09f8fb4e2808de298a0efb88f0000000000000000000000000000000000000000000000000000',
),
).toMatchInlineSnapshot(
`
[
"👨👨👦👦🏴☠️",
]
`,
)
})
})
describe('string,uint,bool', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('string, uint, bool'),
'0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000057761676d69000000000000000000000000000000000000000000000000000000',
)
assertType<readonly [string, bigint, boolean]>(result)
expect(result).toEqual(['wagmi', 420n, true])
})
})
describe('uint[2],bool,string', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('uint[2], bool, string'),
'0x00000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000057761676d69000000000000000000000000000000000000000000000000000000',
)
assertType<readonly [readonly [bigint, bigint], boolean, string]>(result)
expect(result).toEqual([[420n, 69n], true, 'wagmi'])
})
})
describe('bytes', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('bytes'),
'0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030420690000000000000000000000000000000000000000000000000000000000',
)
assertType<readonly [Hex.Hex]>(result)
expect(result).toEqual(['0x042069'])
})
})
describe('(uint256[][2])', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('uint256[][2]'),
'0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001',
)
assertType<readonly [readonly [readonly bigint[], readonly bigint[]]]>(
result,
)
expect(result).toEqual([
[
[1n, 2n, 3n, 4n],
[3n, 2n, 1n],
],
])
})
})
describe('uint256[2][][2]', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('uint256[2][][2]'),
'0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000b',
)
assertType<
readonly [
readonly [
readonly (readonly [bigint, bigint])[],
readonly (readonly [bigint, bigint])[],
],
]
>(result)
expect(result).toEqual([
[
[
[1n, 2n],
[4n, 5n],
],
[
[8n, 9n],
[10n, 11n],
],
],
])
})
})
describe('uint256[][][2]', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('uint256[][][2]'),
'0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000a',
)
assertType<
readonly [
readonly [
readonly (readonly bigint[])[],
readonly (readonly bigint[])[],
],
]
>(result)
expect(result).toEqual([
[
[
[1n, 2n, 3n],
[4n, 5n, 6n, 7n],
],
[[8n], [9n, 10n]],
],
])
})
})
describe('uint256[][1][1]', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('uint256[][1][1]'),
'0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003',
)
assertType<readonly [readonly [readonly [readonly bigint[]]]]>(result)
expect(result).toEqual([[[[1n, 2n, 3n]]]])
})
})
describe('(uint256[][2][2])', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('uint256[][2][2]'),
'0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000a',
)
assertType<
readonly [
readonly [
readonly [readonly bigint[], readonly bigint[]],
readonly [readonly bigint[], readonly bigint[]],
],
]
>(result)
expect(result).toEqual([
[
[
[1n, 2n, 3n],
[4n, 5n, 6n, 7n],
],
[[8n], [9n, 10n]],
],
])
})
})
describe('(uint256[][3][2])', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('uint256[][3][2]'),
'0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000f00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011',
)
assertType<
readonly [
readonly [
readonly [readonly bigint[], readonly bigint[], readonly bigint[]],
readonly [readonly bigint[], readonly bigint[], readonly bigint[]],
],
]
>(result)
expect(result).toEqual([
[
[
[1n, 2n, 3n],
[4n, 5n, 6n, 7n],
[8n, 9n, 10n],
],
[[11n], [12n, 13n], [14n, 15n, 16n, 17n]],
],
])
})
})
describe('(uint256[][2][3])', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('uint256[][2][3]'),
'0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000f00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011',
)
assertType<
readonly [
readonly [
readonly [readonly bigint[], readonly bigint[]],
readonly [readonly bigint[], readonly bigint[]],
readonly [readonly bigint[], readonly bigint[]],
],
]
>(result)
expect(result).toEqual([
[
[
[1n, 2n],
[3n, 4n, 5n],
],
[
[6n, 7n, 8n],
[9n, 10n],
],
[
[11n, 12n, 13n],
[14n, 15n, 16n, 17n],
],
],
])
})
})
describe('(uint256[][2][3][4])', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('uint256[][2][3][4]'),
'0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000000000b80000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000006',
)
assertType<
readonly [
readonly [
readonly [
readonly [readonly bigint[], readonly bigint[]],
readonly [readonly bigint[], readonly bigint[]],
readonly [readonly bigint[], readonly bigint[]],
],
readonly [
readonly [readonly bigint[], readonly bigint[]],
readonly [readonly bigint[], readonly bigint[]],
readonly [readonly bigint[], readonly bigint[]],
],
readonly [
readonly [readonly bigint[], readonly bigint[]],
readonly [readonly bigint[], readonly bigint[]],
readonly [readonly bigint[], readonly bigint[]],
],
readonly [
readonly [readonly bigint[], readonly bigint[]],
readonly [readonly bigint[], readonly bigint[]],
readonly [readonly bigint[], readonly bigint[]],
],
],
]
>(result)
expect(result).toMatchInlineSnapshot(`
[
[
[
[
[
1n,
2n,
3n,
],
[
4n,
5n,
6n,
7n,
],
],
[
[
8n,
],
[
9n,
10n,
],
],
[
[
11n,
12n,
],
[
13n,
],
],
],
[
[
[
14n,
15n,
],
[
16n,
17n,
18n,
],
],
[
[
0n,
1n,
],
[
2n,
3n,
4n,
],
],
[
[
5n,
6n,
],
[
1n,
2n,
1n,
],
],
],
[
[
[
1n,
2n,
1n,
2n,
],
[
1n,
5n,
6n,
],
],
[
[
1n,
],
[
2n,
],
],
[
[
1n,
2n,
3n,
],
[
5n,
6n,
7n,
],
],
],
[
[
[
9n,
8n,
7n,
],
[
5n,
5n,
5n,
],
],
[
[
1n,
2n,
3n,
],
[
4n,
4n,
4n,
],
],
[
[
5n,
5n,
5n,
],
[
6n,
6n,
6n,
],
],
],
],
]
`)
})
})
describe('(uint256[2][][2])', () => {
test('default', () => {
const result = AbiParameters.decode(
AbiParameters.from('uint256[2][][2]'),
'0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000a',
)
assertType<
readonly [
readonly [
readonly (readonly [bigint, bigint])[],
readonly (readonly [bigint, bigint])[],
],
]
>(result)
expect(result).toEqual([
[
[
[1n, 2n],
[4n, 5n],
],
[