abiEncode method

  1. @override
EncoderResult abiEncode(
  1. AbiParameter params,
  2. Object input
)
override

Encodes a byte array to ABI-encoded bytes.

Implementation

@override
EncoderResult abiEncode(AbiParameter params, Object input) {
  final inputAsBytes = JsonParser.valueAsBytes<List<int>>(
    input,
    allowHex: true,
  );
  if (params.isDynamic) {
    final parseLength =
        (inputAsBytes.length / ABIConst.uintBytesLength).ceil();
    final encoded = List<int>.filled(
      ABIConst.uintBytesLength + parseLength * ABIConst.uintBytesLength,
      0,
    );
    final number =
        const NumbersCoder()
            .abiEncode(AbiParameter.uint32, BigInt.from(inputAsBytes.length))
            .encoded;
    encoded.setAll(0, number);
    encoded.setAll(ABIConst.uintBytesLength, inputAsBytes);
    return EncoderResult(
      isDynamic: true,
      encoded: encoded,
      name: params.name,
    );
  }
  final size = ABIUtils._bytesSize(params.type);
  _ABIValidator.validateBytes(
    params.type,
    bytes: inputAsBytes,
    minLength: size!,
    maxLength: size,
  );
  final bytes = List<int>.filled(ABIConst.uintBytesLength, 0);
  bytes.setAll(0, inputAsBytes);
  return EncoderResult(isDynamic: false, encoded: bytes, name: params.name);
}