PAYLOAD-FORMATTING

FieldValue
NamePayload Formatting
Slug97
Statusraw
CategoryStandards Track
EditorMarcin Pawlowski [email protected]
ContributorsYoungjoon Lee [email protected], Alexander Mozeika [email protected], Álvaro Castro-Castilla [email protected], Filip Dimitrijevic [email protected]

Timeline

  • 2026-05-28d45eed2 — Chore: mirror blochain specs into github/mdbook (#347)

Revision History

VersionChangesDate
1.0.0Initial revision.2026-04-09

Introduction

This document defines an implementation-friendly specification of the Payload Formatting, which is introduced in the Formatting section.

Overview

The payload contains a header and a body. The header informs the protocol about the way the body must be handled. The body contains a raw message (data/proposal or cover message). The payload must be of a fixed length to prevent adversaries from distinguishing types of messages based on their length. Therefore, shorter messages must be padded with random data.

Construction

Payload

The Payload is a structure that contains a header and a body.

class Payload:
      header: Header,
      body: bytes

The header is a structure that contains a body_type and a body_length.

class Header:
      body_type: byte,
      body_length: uint16

Type

We define the following values of the body_type:

  • body_type=0x00, informs that the body contains a cover message.
  • body_type=0x01, informs that the body contains a data message.

Any other value of type means that the message was not decapsulated correctly and must be discarded.

Length

We define the body_length as uint16 (encoded as little-endian). Therefore, the theoretical limit of the length of the body is 65535 bytes. The body_length must be set to the length of the body of the payload message (body_length=len(raw_message)).

Body

The Max_Body_Length parameter defines the maximum length of the body. Currently, we assume that the maximal length of a raw data message is 33129 (Block Proposal), so the Max_Body_Length=33129.

The body length is fixed to Max_Body_Length bytes. Therefore, if the length of the raw message is shorter than the Max_Body_Length, then it must be padded with random data.

If the body length is less than the Max_Body_Length, then the last Max_Body_Length - len(Raw_Message) bytes must be filled with random data.