• protolambda's avatar
    accounts/abi: Abi binding support for nested arrays, fixes #15648, including... · 0b814d32
    protolambda authored
    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.
    0b814d32
unpack.go 6.88 KB