encodeSliverForUpload function

Uint8List encodeSliverForUpload(
  1. SliverData sliver,
  2. SliverType type
)

BCS-encode a SliverData as a Sliver enum for storage node PUT.

Wraps the sliver in the BCS Sliver enum with the specified variant. This is different from WalrusBlobEncoder.bcsSliverData() which encodes only the inner SliverData struct.

Implementation

Uint8List encodeSliverForUpload(SliverData sliver, SliverType type) {
  final builder = BytesBuilder(copy: false);

  // Sliver enum variant
  builder.addByte(type == SliverType.primary ? 0 : 1);

  // Symbols.data: byteVector
  _writeUleb128(builder, sliver.data.length);
  builder.add(sliver.data);

  // Symbols.symbol_size: u16 LE
  builder.addByte(sliver.symbolSize & 0xFF);
  builder.addByte((sliver.symbolSize >> 8) & 0xFF);

  // index: u16 LE
  builder.addByte(sliver.index & 0xFF);
  builder.addByte((sliver.index >> 8) & 0xFF);

  return builder.toBytes();
}