Simple Serialize (SSZ)
npm install @chainsafe/ssz
See our autogenerated API docs
In order to properly serialize/deserialize/hash values, we need both the value and the "type" of the value.
The simple serialization spec operates over a few specific types.
Types are either specified in a simplified form (eg: "uint32"
) or an extended form
(eg: {type: Type.uint, byteLength: 4, offset: 0, useNumber: false}
). In most cases, the simplified form suffices.
A uint serialization value may be either a js number
or a BN
from bn.js.
A uint type is specified by either "uintN"
or "numberN"
, where N is the number of bits to serialize.
uintN
> 48 bits is deserialized to a BN
else deserialized to a number
.
Every numberN
is deserialized to a number.
A boolean serialization value must be either true
or false
. Anything other input will throw an Error
.
The boolean type is specified as "bool"
.
A "vector" according to the spec is a fixed-length list with every element of the same type.
A vector serialization value may be either an Array
or Buffer
.
Vector types are specified as either "bytesN"
or [elementType, vectorlength]
bytesN
is deserialized to Buffer
.
[elementType, vectorLength]
is deserialized to Array<elementType>
unless elementType is byte
, when the value is deserialized to Buffer
.
A "list" according to the spec is a list of unspecified length with every element of the same type.
A list serialization value may be either an Array
or Buffer
.
Tuple types are specified as either "bytes"
or [elementType]
bytes
is deserialized to Buffer
.
[elementType]
is deserialized to Array<elementType>
unless elementType is byte
, when the value is deserialized to Buffer
.
A "container" according to the spec is a collection of values where the type of each element may differ.
A container serialization value must be an Object
.
The container serialization type must be an Object
, with a string name
, and a fields
value of `Array<[fieldName, fieldType]>.
See FullSSZType
in src/types.ts
for more information.
Apache 2.0