MESSAGE-FORMATTING
| Field | Value |
|---|---|
| Name | Message Formatting |
| Slug | 89 |
| Status | raw |
| Category | Standards Track |
| Editor | Marcin Pawlowski |
| Contributors | Youngjoon Lee [email protected], Alexander Mozeika [email protected], Álvaro Castro-Castilla [email protected], Filip Dimitrijevic [email protected] |
Timeline
- 2026-07-03 —
709cf7f— Bedrock-RFC: Remove Concept of a Session (#365) - 2026-05-28 —
d45eed2— Chore: mirror blochain specs into github/mdbook (#347)
Revision History
| Version | Changes | Date |
|---|---|---|
| 1.0.0 | Initial revision. | 2026-04-09 |
Introduction
This document defines an implementation-friendly specification of the Message Formatting, which is introduced in the Formatting section.
In this document we are reusing notation from Notation.
Overview
The message contains a header and a payload. The header informs the protocol about the version of the protocol and the payload type. The message contains a drop or a non-drop payload. The length of a payload is fixed to prevent adversaries from distinguishing types of messages based on their length.
Construction
Message
The Message is a structure that contains a public_header, private_header and a payload.
class Message:
public_header: PublicHeader,
private_header: Private_Header,
payload: bytes
Public Header
The public_header must be generated as the outcome of the Message Encapsulation Mechanism.
The public_header is defined as follows:
class PublicHeader:
version: byte,
public_key: PublicKey,
proof_of_quota: ProofOfQuota,
signature: Signature
Where:
version=0x01is version of the protocol.public_keyis , a public key from the set as defined in the Message Encapsulation spec.proof_of_quotais , a corresponding proof of quota for the key from the it also contains the key nullifier.signatureis , a signature of the concatenation of the -th encapsulation of the payload and the private header , that can be verified by the public key .
Private Header
The private_header must be generated as the outcome of the Message Encapsulation Mechanism.
The private header contains a set of encrypted blending headers .
private_header: list[BlendingHeader]
The size of the set is limited to BlendingHeader entries, as defined in the Global Parameters.
The BlendingHeader () is defined as follows:
class BlendingHeader:
public_key: PublicKey,
proof_of_quota: ProofOfQuota,
signature: Signature,
proof_of_selection: ProofOfSelection
is_last: byte
Where:
public_keyis , a public key from the set .proof_of_quotais , a corresponding proof of quota for the key from the it also contains the key nullifier.signatureis , a signature of the concatenation of -th encapsulation of the payload and the private header , that can be verified by public key .proof_of_selectionis , a proof of selection of the node index assuming valid proof of quota .is_lastis , a flag that indicates that this is the last encapsulation.
Payload
The payload must be formatted according to the Payload Formatting. The formatted payload must be generated as the outcome of the Message Encapsulation Mechanism.
Maximum Payload Length
The Max_Payload_Length parameter defines the maximum length of the payload, which for version 1 of the Blend Protocol is fixed as Max_Payload_Length=34003. That is, 34kB for the payload body (Max_Body_Length) and 3 bytes for the payload header. More information about payload formatting can be found in Payload Formatting.