eth2.0-specs/tests/formats/ssz_static/core.md

2.2 KiB

Test format: SSZ static types

The goal of this type is to provide clients with a solid reference for how the known SSZ objects should be encoded. Each object described in the Phase 0 spec is covered. This is important, as many of the clients aiming to serialize/deserialize objects directly into structs/classes do not support (or have alternatives for) generic SSZ encoding/decoding.

This test-format ensures these direct serializations are covered.

Note that this test suite does not cover the invalid-encoding case: SSZ implementations should be hardened against invalid inputs with the other SSZ tests as guide, along with fuzzing.

Test case format

Each SSZ type is a handler, since the format is semantically different: the type of the data is different.

One can iterate over the handlers, and select the type based on the handler name. Suites are then the same format, but each specialized in one randomization mode. Some randomization modes may only produce a single test case (e.g. the all-zeroes case).

The output parts are: roots.yaml, serialized.ssz, value.yaml

roots.yaml

root: bytes32         -- string, hash-tree-root of the value, hex encoded, with prefix 0x

serialized.ssz

The raw encoded bytes.

value.yaml

The same value as serialized.ssz, represented as YAML.

Condition

A test-runner can implement the following assertions:

  • If YAML decoding of SSZ objects is supported by the implementation:
    • Serialization: After parsing the value, SSZ-serialize it: the output should match serialized
    • Deserialization: SSZ-deserialize the serialized value, and see if it matches the parsed value
  • If YAML decoding of SSZ objects is not supported by the implementation:
    • Serialization in 2 steps: deserialize serialized, then serialize the result, and verify if the bytes match the original serialized.
  • Hash-tree-root: After parsing the value (or deserializing serialized), Hash-tree-root it: the output should match root

References

serializedSSZ serialization roothash_tree_root function