erigon-pulse/accounts/abi/bind
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
..
backends eth, les, light: filter on logs only, derive receipts on demand 2018-02-22 19:12:43 +02:00
auth.go accounts, cmd, eth, internal, mobile, node: split account backends 2017-02-13 14:00:02 +02:00
backend.go accounts/abi/bind: support event filtering in abigen 2018-01-24 10:54:13 +02:00
base.go accounts/abi/bind: support event filtering in abigen 2018-01-24 10:54:13 +02:00
bind_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
bind.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
template.go accounts/abi/bind: support event filtering in abigen 2018-01-24 10:54:13 +02:00
topics.go accounts/abi/bind: support event filtering in abigen 2018-01-24 10:54:13 +02:00
util_test.go all: switch gas limits from big.Int to uint64 2018-01-03 14:45:35 +02:00
util.go all: import "context" instead of "golang.org/x/net/context" 2017-03-22 20:49:15 +01:00