import pkg/stew/endians2 import pkg/stint import ./types type Abi* = object AbiWriter* = object bytes: seq[byte] tuples: seq[Tuple] Tuple = object start: int postponed: seq[Split] Split = object head: Slice[int] tail: seq[byte] proc isStatic*(_: type Abi, t: type SomeUnsignedInt): bool = true proc isStatic*(_: type Abi, t: type StUint): bool = true proc isStatic*(_: type Abi, t: type bool): bool = true proc isStatic*(_: type Abi, t: type enum): bool = true proc isStatic*[T](_: type Abi, t: type seq[T]): bool = false proc isStatic*[I, T](_: type Abi, t: type array[I, T]): bool = Abi.isStatic(T) proc encode*[T](_: type Abi, value: T): seq[byte] proc pad(writer: var AbiWriter, len: int) = let padlen = (32 - len mod 32) mod 32 for _ in 0..