go-ethereum/accounts/abi
protolambda 0b814d32f8 accounts/abi: Abi binding support for nested arrays, fixes #15648, including nested array unpack fix (#15676)
* accounts/abi/bind: support for multi-dim arrays

Also:
- reduce usage of regexes a bit.
- fix minor Java syntax problems

Fixes #15648

* accounts/abi/bind: Add some more documentation

* accounts/abi/bind: Improve code readability

* accounts/abi: bugfix for unpacking nested arrays

The code previously assumed the arrays/slices were always 1 level
deep. While the packing supports nested arrays (!!!).

The current code for unpacking doesn't return the "consumed" length, so
this fix had to work around that by calculating it (i.e. packing and
 getting resulting length) after the unpacking of the array element.
It's far from ideal, but unpacking behaviour is fixed now.

* accounts/abi: Fix unpacking of nested arrays

Removed the temporary workaround of packing to calculate size, which was
incorrect for slice-like types anyway.
Full size of nested arrays is used now.

* accounts/abi: deeply nested array unpack test

Test unpacking of an array nested more than one level.

* accounts/abi: Add deeply nested array pack test

Same as the deep nested array unpack test, but the other way around.

* accounts/abi/bind: deeply nested arrays bind test

Test the usage of bindings that were generated
for methods with multi-dimensional (and not
just a single extra dimension, like foo[2][3])
array arguments and returns.

edit: trigger rebuild, CI failed to fetch linter module.

* accounts/abi/bind: improve array binding

wrapArray uses a regex now, and arrayBindingJava is improved.

* accounts/abi: Improve naming of element size func

The full step size for unpacking an array
 is now retrieved with "getFullElemSize".

* accounts/abi: support nested nested array args

Previously, the code only considered the outer-size of the array,
ignoring the size of the contents. This was fine for most types,
but nested arrays are packed directly into it, and count towards
the total size. This resulted in arguments following a nested
array to replicate some of the binary contents of the array.

The fix: for arrays, calculate their complete contents size:
 count the arg.Type.Elem.Size when Elem is an Array, and
 repeat when their child is an array too, etc.
The count is the number of 32 byte elements, similar to how it
 previously counted, but nested.

* accounts/abi: Test deep nested arr multi-arguments

Arguments with a deeply nested array should not cause the next arguments
to be read from the wrong position.
2018-03-04 23:24:17 +01:00
..
bind accounts/abi: Abi binding support for nested arrays, fixes #15648, including nested array unpack fix (#15676) 2018-03-04 23:24:17 +01:00
abi_test.go accounts/abi: address review concerns 2018-02-21 12:27:50 +01:00
abi.go accounts/abi: address review concerns 2018-02-21 12:27:50 +01:00
argument.go accounts/abi: Abi binding support for nested arrays, fixes #15648, including nested array unpack fix (#15676) 2018-03-04 23:24:17 +01:00
doc.go all: fix license headers one more time 2015-07-23 18:35:11 +02:00
error.go accounts/abi: improve type handling, add event support (#14743) 2017-10-17 13:07:08 +02:00
event_test.go accounts/abi: merging of https://github.com/ethereum/go-ethereum/pull/15452 + lookup by id 2017-12-22 19:26:57 +01:00
event.go accounts/abi/bind: support event filtering in abigen 2018-01-24 10:54:13 +02:00
method.go acounts/abi: refactor abi, generalize abi pack/unpack to Arguments 2017-12-22 19:26:52 +01:00
numbers_test.go accounts/abi: reorganizing package with small fixes (#14610) 2017-06-27 11:05:33 +03:00
numbers.go accounts/abi: improve type handling, add event support (#14743) 2017-10-17 13:07:08 +02:00
pack_test.go accounts/abi: Abi binding support for nested arrays, fixes #15648, including nested array unpack fix (#15676) 2018-03-04 23:24:17 +01:00
pack.go accounts/abi: satisfy most of the linter warnings 2017-12-21 15:14:50 +01:00
reflect.go accounts/abi: merging of https://github.com/ethereum/go-ethereum/pull/15452 + lookup by id 2017-12-22 19:26:57 +01:00
type_test.go accounts/abi: improve type handling, add event support (#14743) 2017-10-17 13:07:08 +02:00
type.go accounts/abi: satisfy most of the linter warnings 2017-12-21 15:14:50 +01:00
unpack_test.go accounts/abi: Abi binding support for nested arrays, fixes #15648, including nested array unpack fix (#15676) 2018-03-04 23:24:17 +01:00
unpack.go accounts/abi: Abi binding support for nested arrays, fixes #15648, including nested array unpack fix (#15676) 2018-03-04 23:24:17 +01:00