abiEncode method
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);
}