bcs: {
    bool(
        options?: BcsTypeOptions<boolean, boolean>,
    ): BcsType<boolean, boolean>;
    bytes<T extends number>(
        size: T,
        options?: BcsTypeOptions<Uint8Array, Iterable<number>>,
    ): BcsType<Uint8Array, Iterable<number>>;
    enum<T extends Record<string, null | BcsType<any, any>>>(
        name: string,
        values: T,
        options?: Omit<
            BcsTypeOptions<
                EnumOutputShape<
                    {
                        [K in string
                        | number
                        | symbol]: T[K] extends BcsType<U, any> ? U : true
                    },
                >,
                EnumInputShape<
                    {
                        [K in string
                        | number
                        | symbol]: T[K] extends BcsType<any, U> ? U : null | boolean | object
                    },
                >,
            >,
            "name",
        >,
    ): BcsType<
        EnumOutputShape<
            {
                [K in string
                | number
                | symbol]: T[K] extends BcsType<U, any> ? U : true
            },
        >,
        EnumInputShape<
            {
                [K in string
                | number
                | symbol]: T[K] extends BcsType<any, U> ? U : null | boolean | object
            },
        >,
    >;
    fixedArray<T, Input>(
        size: number,
        type: BcsType<T, Input>,
        options?: BcsTypeOptions<T[], Iterable<Input> & { length: number }>,
    ): BcsType<T[], Iterable<Input> & { length: number }>;
    lazy<T extends BcsType<any, any>>(cb: () => T): T;
    map<K, V, InputK = K, InputV = V>(
        keyType: BcsType<K, InputK>,
        valueType: BcsType<V, InputV>,
    ): BcsType<Map<K, V>, Map<InputK, InputV>>;
    option<T, Input>(
        type: BcsType<T, Input>,
    ): BcsType<null | T, undefined | null | Input>;
    string(options?: BcsTypeOptions<string, string>): BcsType<string, string>;
    struct<T extends Record<string, BcsType<any, any>>>(
        name: string,
        fields: T,
        options?: Omit<
            BcsTypeOptions<
                {
                    [K in string
                    | number
                    | symbol]: T[K] extends BcsType<U, any> ? U : never
                },
                {
                    [K in string
                    | number
                    | symbol]: T[K] extends BcsType<any, U> ? U : never
                },
            >,
            "name",
        >,
    ): BcsType<
        {
            [K in string
            | number
            | symbol]: T[K] extends BcsType<U, any> ? U : never
        },
        {
            [K in string
            | number
            | symbol]: T[K] extends BcsType<any, U> ? U : never
        },
    >;
    tuple<const Types extends readonly BcsType<any, any>[]>(
        types: Types,
        options?: BcsTypeOptions<
            {
                -readonly [K in string
                | number
                | symbol]: Types[K<K>] extends BcsType<T, any> ? T : never
            },
            {
                [K in string
                | number
                | symbol]: Types[K<K>] extends BcsType<any, T> ? T : never
            },
        >,
    ): BcsType<
        {
            -readonly [K in string
            | number
            | symbol]: Types[K<K>] extends BcsType<T, any> ? T : never
        },
        {
            [K in string
            | number
            | symbol]: Types[K<K>] extends BcsType<any, T> ? T : never
        },
    >;
    u128(
        options?: BcsTypeOptions<string, string | number | bigint>,
    ): BcsType<string, string | number | bigint>;
    u16(options?: BcsTypeOptions<number, number>): BcsType<number, number>;
    u256(
        options?: BcsTypeOptions<string, string | number | bigint>,
    ): BcsType<string, string | number | bigint>;
    u32(options?: BcsTypeOptions<number, number>): BcsType<number, number>;
    u64(
        options?: BcsTypeOptions<string, string | number | bigint>,
    ): BcsType<string, string | number | bigint>;
    u8(options?: BcsTypeOptions<number, number>): BcsType<number, number>;
    uleb128(options?: BcsTypeOptions<number, number>): BcsType<number, number>;
    vector<T, Input>(
        type: BcsType<T, Input>,
        options?: BcsTypeOptions<T[], Iterable<Input> & { length: number }>,
    ): BcsType<T[], Iterable<Input> & { length: number }>;
} = ...

Type declaration

  • bool:function
    • Creates a BcsType that can be used to read and write boolean values.

      Parameters

      Returns BcsType<boolean, boolean>

      bcs.bool().serialize(true).toBytes() // Uint8Array [ 1 ]
      
  • bytes:function
    • Creates a BcsType representing a fixed length byte array

      Type Parameters

      • T extends number

      Parameters

      • size: T

        The number of bytes this types represents

      • Optionaloptions: BcsTypeOptions<Uint8Array, Iterable<number>>

      Returns BcsType<Uint8Array, Iterable<number>>

      bcs.bytes(3).serialize(new Uint8Array([1, 2, 3])).toBytes() // Uint8Array [1, 2, 3]
      
  • enum:function
    • Creates a BcsType representing an enum of a given set of options

      Type Parameters

      • T extends Record<string, null | BcsType<any, any>>

      Parameters

      • name: string

        The name of the enum

      • values: T

        The values of the enum. The order of the values affects how data is serialized and deserialized. null can be used to represent a variant with no data.

      • Optionaloptions: Omit<
            BcsTypeOptions<
                EnumOutputShape<
                    {
                        [K in string
                        | number
                        | symbol]: T[K] extends BcsType<U, any> ? U : true
                    },
                >,
                EnumInputShape<
                    {
                        [K in string
                        | number
                        | symbol]: T[K] extends BcsType<any, U> ? U : null | boolean | object
                    },
                >,
            >,
            "name",
        >

      Returns BcsType<
          EnumOutputShape<
              {
                  [K in string
                  | number
                  | symbol]: T[K] extends BcsType<U, any> ? U : true
              },
          >,
          EnumInputShape<
              {
                  [K in string
                  | number
                  | symbol]: T[K] extends BcsType<any, U> ? U : null | boolean | object
              },
          >,
      >

      const enum = bcs.enum('MyEnum', {
      A: bcs.u8(),
      B: bcs.string(),
      C: null,
      })
      enum.serialize({ A: 1 }).toBytes() // Uint8Array [ 0, 1 ]
      enum.serialize({ B: 'a' }).toBytes() // Uint8Array [ 1, 1, 97 ]
      enum.serialize({ C: true }).toBytes() // Uint8Array [ 2 ]
  • fixedArray:function
    • Creates a BcsType that represents a fixed length array of a given type

      Type Parameters

      • T
      • Input

      Parameters

      • size: number

        The number of elements in the array

      • type: BcsType<T, Input>

        The BcsType of each element in the array

      • Optionaloptions: BcsTypeOptions<T[], Iterable<Input> & { length: number }>

      Returns BcsType<T[], Iterable<Input> & { length: number }>

      bcs.fixedArray(3, bcs.u8()).serialize([1, 2, 3]).toBytes() // Uint8Array [ 1, 2, 3 ]
      
  • lazy:function
    • Creates a BcsType that wraps another BcsType which is lazily evaluated. This is useful for creating recursive types.

      Type Parameters

      Parameters

      • cb: () => T

        A callback that returns the BcsType

      Returns T

  • map:function
  • option:function
    • Creates a BcsType representing an optional value

      Type Parameters

      • T
      • Input

      Parameters

      Returns BcsType<null | T, undefined | null | Input>

      bcs.option(bcs.u8()).serialize(null).toBytes() // Uint8Array [ 0 ]
      bcs.option(bcs.u8()).serialize(1).toBytes() // Uint8Array [ 1, 1 ]
  • string:function
    • Creates a BcsType that can ser/de string values. Strings will be UTF-8 encoded

      Parameters

      Returns BcsType<string, string>

      bcs.string().serialize('a').toBytes() // Uint8Array [ 1, 97 ]
      
  • struct:function
    • Creates a BcsType representing a struct of a given set of fields

      Type Parameters

      • T extends Record<string, BcsType<any, any>>

      Parameters

      • name: string

        The name of the struct

      • fields: T

        The fields of the struct. The order of the fields affects how data is serialized and deserialized

      • Optionaloptions: Omit<
            BcsTypeOptions<
                {
                    [K in string
                    | number
                    | symbol]: T[K] extends BcsType<U, any> ? U : never
                },
                {
                    [K in string
                    | number
                    | symbol]: T[K] extends BcsType<any, U> ? U : never
                },
            >,
            "name",
        >

      Returns BcsType<
          {
              [K in string
              | number
              | symbol]: T[K] extends BcsType<U, any> ? U : never
          },
          {
              [K in string
              | number
              | symbol]: T[K] extends BcsType<any, U> ? U : never
          },
      >

      const struct = bcs.struct('MyStruct', {
      a: bcs.u8(),
      b: bcs.string(),
      })
      struct.serialize({ a: 1, b: 'a' }).toBytes() // Uint8Array [ 1, 1, 97 ]
  • tuple:function
    • Creates a BcsType representing a tuple of a given set of types

      Type Parameters

      • const Types extends readonly BcsType<any, any>[]

      Parameters

      • types: Types

        The BcsTypes for each element in the tuple

      • Optionaloptions: BcsTypeOptions<
            {
                -readonly [K in string
                | number
                | symbol]: Types[K<K>] extends BcsType<T, any> ? T : never
            },
            {
                [K in string
                | number
                | symbol]: Types[K<K>] extends BcsType<any, T> ? T : never
            },
        >

      Returns BcsType<
          {
              -readonly [K in string
              | number
              | symbol]: Types[K<K>] extends BcsType<T, any> ? T : never
          },
          {
              [K in string
              | number
              | symbol]: Types[K<K>] extends BcsType<any, T> ? T : never
          },
      >

      const tuple = bcs.tuple([bcs.u8(), bcs.string(), bcs.bool()])
      tuple.serialize([1, 'a', true]).toBytes() // Uint8Array [ 1, 1, 97, 1 ]
  • u128:function
    • Creates a BcsType that can be used to read and write a 128-bit unsigned integer.

      Parameters

      Returns BcsType<string, string | number | bigint>

      bcs.u128().serialize(1).toBytes() // Uint8Array [ 1, ..., 0 ]
      
  • u16:function
    • Creates a BcsType that can be used to read and write a 16-bit unsigned integer.

      Parameters

      Returns BcsType<number, number>

      bcs.u16().serialize(65535).toBytes() // Uint8Array [ 255, 255 ]
      
  • u256:function
    • Creates a BcsType that can be used to read and write a 256-bit unsigned integer.

      Parameters

      Returns BcsType<string, string | number | bigint>

      bcs.u256().serialize(1).toBytes() // Uint8Array [ 1, ..., 0 ]
      
  • u32:function
    • Creates a BcsType that can be used to read and write a 32-bit unsigned integer.

      Parameters

      Returns BcsType<number, number>

      bcs.u32().serialize(4294967295).toBytes() // Uint8Array [ 255, 255, 255, 255 ]
      
  • u64:function
    • Creates a BcsType that can be used to read and write a 64-bit unsigned integer.

      Parameters

      Returns BcsType<string, string | number | bigint>

      bcs.u64().serialize(1).toBytes() // Uint8Array [ 1, 0, 0, 0, 0, 0, 0, 0 ]
      
  • u8:function
    • Creates a BcsType that can be used to read and write an 8-bit unsigned integer.

      Parameters

      Returns BcsType<number, number>

      bcs.u8().serialize(255).toBytes() // Uint8Array [ 255 ]
      
  • uleb128:function
    • Creates a BcsType that can be used to read and write unsigned LEB encoded integers

      Parameters

      Returns BcsType<number, number>

      
      
  • vector:function
    • Creates a BcsType representing a variable length vector of a given type

      Type Parameters

      • T
      • Input

      Parameters

      Returns BcsType<T[], Iterable<Input> & { length: number }>

      bcs.vector(bcs.u8()).toBytes([1, 2, 3]) // Uint8Array [ 3, 1, 2, 3 ]