polkadart_scale_codec 1.6.0  polkadart_scale_codec: ^1.6.0 copied to clipboard
polkadart_scale_codec: ^1.6.0 copied to clipboard
Implementation of the SCALE codec in Dart
polkadart_scale_codec #
polkadart_scale_codec is a flutter and dart library for encoding and decoding types supported by polkadot.
Lets Get Started #
Supported types: #
| Types | Sign | 
|---|---|
| Unsigned Int | u8, u16, u32, u64, u128, u256 | 
| Signed Int | i8, i16, i32, i64, i128, i256 | 
| String | Str | 
| Boolean | bool | 
| Compact | Compact<T> | 
| Enum | _enum | 
| Composite | {} | 
| FixedVec | [u8, length] | 
| BitVec | BitVec | 
| Option | Option<T> | 
| Tuple | (K, V, T....) | 
| Result | Result<Ok, Err> | 
Usage #
Unsigned Integers ( u8 | u16 | u32 ) #
//
// Encode
var output = HexOutput();
final value = 69;
U8Codec.codec.encodeTo(value, output);
// 0x45
var encodedHex = output.toString();
//
// Decode
var input = Input.fromHex(encodedHex);
// 69
var decoded = U8Codec.codec.decode(input);
Unsigned Integers ( u64 | u128 | u256 ) #
//
// Encode
var output = HexOutput();
final value = BigInt.parse('115792089237316195423570985008687907853269984665640564039457584007913129639935');
U256Codec.codec.encodeTo(value, output);
// 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
var encodedHex = output.toString();
//
// Decode
var input = Input.fromHex(encodedHex);
// BigInt.parse('115792089237316195423570985008687907853269984665640564039457584007913129639935');
var decoded = U256Codec.codec.decode(input);
Signed Integers ( i8 | i16 | i32 ) #
//
// Encode
var output = HexOutput();
final value = -128;
I8Codec.codec.encodeTo(value, output);
// 0x80
var encodedHex = output.toString();
//
// Decode
var input = Input.fromHex(encodedHex);
// -128
var decoded = I8Codec.codec.decode(input);
Signed Integers ( i64 | i128 | i256 ) #
//
// Encode
var output = HexOutput();
final value = BigInt.parse('-9223372036854775808');
I64Codec.codec.encodeTo(value, output);
// 0x0000000000000080
var encodedHex = output.toString();
//
// Decode
var input = Input.fromHex(encodedHex);
// BigInt.parse('-9223372036854775808')
var decoded = I64Codec.codec.decode(input);
Compact #
//
// Encode
var output = HexOutput();
final value = 69;
CompactCodec.codec.encodeTo(value, output);
// 0x1501
var encodedHex = output.toString();
//
// Decode
var input = Input.fromHex(encodedHex);
// 69
var decoded = CompactCodec.codec.decode(input);
Option #
  final value = Option.some(true);
  final output = HexOutput();
  
  OptionCodec(BoolCodec.codec).encodeTo(value, output);
  // 0x0101
  var encodedHex = output.toString();
  final input = Input.fromHex(encodedHex);
  // Option.some(true)
  var decoded = OptionCodec(BoolCodec.codec).decode(input);
  // or
  // None
  final value = Option.none();
  final output = HexOutput();
  
  OptionCodec(BoolCodec.codec).encodeTo(value, output);
  // 0x00
  var encodedHex = output.toString();
  final input = Input.fromHex(encodedHex);
  // Option.none()
  var decoded = OptionCodec(BoolCodec.codec).decode(input);
BitVec #
  // Initializing Codec object
  final codec = BitSequenceCodec(BitStore.U8, BitOrder.LSB);
  final value = '11111';
  final bitArray = BitArray.parseBinary(value);
  final output = HexOutput();
  codec.encodeTo(value, output);
  // 0x1f
  final encodedHex = output.toString();
  final input = Input.fromHex(encodedHex);
  // BitArray.parseBinary('11111')
  var decoded = codec.decode(input);
Enum #
  // ignore: unnecessary_cast
  final extraDataCodec = CompositeCodec({
    'index': U8Codec.codec,
    'name': StrCodec.codec,
    'customTuple': TupleCodec([
      SimpleEnumCodec.fromList(['Red', 'Orange']),
      BoolCodec.codec,
    ]),
  }) as Codec;
  final codec = ComplexEnumCodec.sparse(
    {
      0: MapEntry('Plain', StrCodec.codec),
      1: MapEntry('ExtraData', extraDataCodec),
    },
  );
  final value = MapEntry('ExtraData', );
  final output = HexOutput();
  codec.encodeTo(value, output);
  // 0x010124706f6c6b61646172740001
  final encodedHex = output.toString();
  final input = Input.fromHex(encodedHex);
  // MapEntry('ExtraData', {
  //       'index': 1,
  //       'name': 'polkadart',
  //       'customTuple': ['Red', true],
  //     })
  var decoded = codec.decode(input);
Composite #
  // Composite Codec
  final codec = CompositeCodec({
    'index': U8Codec.codec,
    'name': StrCodec.codec,
    'customTuple': TupleCodec([
      SimpleEnumCodec.fromList(['Red', 'Orange']),
      BoolCodec.codec,
    ]),
  }) as Codec;
  final value = {
        'index': 1,
        'name': 'polkadart',
        'customTuple': ['Red', true],
      };
  final output = HexOutput();
  codec.encodeTo(value, output);
  // 0x0124706f6c6b61646172740001
  final encodedHex = output.toString();
  final input = Input.fromHex(encodedHex);
  // {
  //  'index': 1,
  //  'name': 'polkadart',
  //  'customTuple': ['Red', true],
  // }
  var decoded = codec.decode(input);
Result<Ok, Err> #
  // Creates the registry for parsing the types
  final registry = Registry();
  // register the customCodec of your choice
  registry.registerCustomCodec(<String, dynamic>{'A':'Result<u8, bool>'});
  
  // Initialize the scale codec
  final codec = ScaleCodec(registry);
  final output = HexOutput();
  
  codec.encodeTo('A', MapEntry('Ok', 42), output);
  
  // 0x002a
  final encodedHex = output.toString();
  
  final input = Input.fromHex(encodedHex);
  // MapEntry('Ok', 42)
  var decoded = codec.decode('A', input);
  // or
  //
  // For Err field
  //
  final value = MapEntry('Err', false);
  codec.encodeTo('A', value, output);
  // 0x0100
  final encodedHex = output.toString();
  // MapEntry('Err', false)
  var decoded = codec.decode('A', input);