jam.utils.codec.primitives.integers module

Integer codec implementations for JAM protocol encoding specification.

Implements both fixed-width integers and the general variable-length integer encoding scheme specified in JAM graypaper Appendix C.

Fixed width integers are encoded in little-endian format. Variable length integers use the following scheme: - 0x00-0xFC: Direct value (1 byte) - 0xFD: u16 value (3 bytes) - 0xFE: u24 value (4 bytes) - 0xFF: u32 value (5 bytes)

jam.utils.codec.primitives.integers.encode(value: int, byte_size: int) bytes[source]
jam.utils.codec.primitives.integers.decode(buffer: bytes | bytearray | memoryview) int[source]
class jam.utils.codec.primitives.integers.IntegerCodec(byte_size: int)[source]

Bases: Codec

Base codec for fixed-width integers.

Encodes integers in little-endian format with fixed width. Supports both signed and unsigned values.

__init__(byte_size: int)[source]

Initialize codec for specific integer type.

Parameters:
  • byte_size – Number of bytes for encoded value

  • python_type – Python type for values

encode_size(value) int[source]

Get encoded size (fixed for given type).

encode_into(value: int, buffer: bytes | bytearray | memoryview, offset: int = 0) int[source]

Encode integer into buffer.

Parameters:
  • value – Integer to encode

  • buffer – Target buffer

  • offset – Starting offset

Returns:

Number of bytes written

Raises:

EncodeError – If value out of bounds or buffer too small

static decode_from(_byte_size: int, buffer: bytes | bytearray | memoryview, offset: int = 0) Tuple[int, int][source]

Decode integer from buffer.

Parameters:
  • buffer – Source buffer

  • offset – Starting offset

  • context – Optional decoding context

Returns:

Tuple of (decoded value, bytes read)

Raises:

DecodeError – If buffer too small

class jam.utils.codec.primitives.integers.GeneralCodec[source]

Bases: Codec[int]

Codec for variable-length integer encoding.

Implements variable length int encoding scheme

static l(x)[source]
encode_size(value: int) int[source]

Calculate encoded size based on value magnitude.

encode_into(value: int, buffer: bytearray, offset: int = 0) int[source]

Encode integer using variable-length scheme.

Parameters:
  • value – Integer to encode

  • buffer – Target buffer

  • offset – Starting offset

Returns:

Number of bytes written

Raises:

EncodeError – If value invalid or buffer too small

static decode_from(buffer: bytes | bytearray | memoryview, offset: int = 0) Tuple[int, int][source]

Decode integer using variable-length scheme.

Parameters:
  • buffer – Source buffer

  • offset – Starting offset

Returns:

Tuple of (decoded value, bytes read)

Raises:

DecodeError – If buffer too small or invalid encoding