encodeRLP function
Implementation
Uint8List encodeRLP(RLPItem input) {
final buffer = input.buffer;
/// Check for int = 0
if (input is RLPInt && buffer.length == 1 && input.value == 0) {
return buffer;
}
/// Check for bigint = 0
if (input is RLPBigInt && buffer.length == 1 && input.value == BigInt.zero) {
return buffer;
}
if (input is! RLPList && buffer.length == 1 && buffer[0] < 128) {
return buffer;
}
if (buffer.length < 56) {
final flag = switch (input) {
RLPList _ => 0xc0,
_ => 0x80,
};
return Uint8List.fromList([flag + buffer.length, ...buffer]);
}
final lengthBuffer = arrayifyInteger(buffer.length);
final flag = switch (input) {
RLPList _ => 0xf7,
_ => 0xb7,
};
return Uint8List.fromList(
[
flag + lengthBuffer.length,
...lengthBuffer,
...buffer,
],
);
}