encodeRLP function

Uint8List encodeRLP(
  1. RLPItem input
)

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,
    ],
  );
}