encodeTo method

  1. @override
void encodeTo(
  1. UncheckedExtrinsic value,
  2. Output output
)
override

Convert self to a slice and append it to the destination.

Implementation

@override
void encodeTo(final UncheckedExtrinsic value, final Output output) {
  // Build and write version byte
  final versionByte = _buildVersionByte(value.version, value.type);
  output.pushByte(versionByte);

  switch (value.type) {
    case ExtrinsicType.signed:
      // Encode signature
      if (value.signature == null) {
        throw MetadataException('Signed extrinsic must have a signature');
      }
      _signatureCodec.encodeTo(value.signature!, output);
      break;

    case ExtrinsicType.general:
      // Encode extension version byte + extensions
      if (value.extensions == null) {
        throw MetadataException('General extrinsic must have extensions');
      }
      final extensionVersion = value.extensions!['extensionVersion'] as int? ?? 0;
      output.pushByte(extensionVersion);

      // Encode the extensions data
      final extData = Map<String, dynamic>.from(value.extensions!);
      extData.remove('extensionVersion');
      _extensionsCodec.encodeTo(extData, output);
      break;

    case ExtrinsicType.bare:
      // No additional data for bare extrinsics
      break;
  }

  // Encode call
  _callCodec.encodeTo(value.call, output);
}