Skip to content

QDP-NNNN: Short Title in Title Case

FieldValue
StatusDraft
TrackProtocol / Protocol (hard fork) / Ecosystem / Informational / Meta
AuthorThe Quidnug Authors
CreatedYYYY-MM-DD
Discussionlink to GitHub issue or PR
RequiresQDP-XXXX (or -)
SupersedesQDP-YYYY (or -)
Superseded-by-
Enables-
Activationfork block, version, or N/A

Delete this blockquote before submitting. Copy this file to NNNN-kebab-slug.md using the next unused QDP number. See QDP-0000 for the lifecycle, status values, track taxonomy, and writing conventions. An unset metadata field is a single hyphen, not the word “none”.

Two to four sentences. What problem, what you propose, what an implementer has to change. A reader should know within thirty seconds whether this QDP is relevant to them.

The concrete pain today. A failing scenario, a captured attack transcript, a user story that cannot be served by the current protocol, a missing primitive other QDPs keep tripping over. Not “this would be nice” but “here is what breaks without it.”

Goals: bulleted, each one a verifiable outcome.

  • Goal one.
  • Goal two.

Non-goals: what this QDP explicitly does not try to solve, so reviewers do not argue about the wrong thing.

  • Non-goal one.
  • Non-goal two.

The state of the code today. Quote exact structs, functions, file paths, and line numbers. Reviewers should be able to verify claims about current behavior without leaving this document.

The proposal. Specific enough that two independent implementations produce interoperable wire formats and validation behavior.

Attacks this enables, attacks it closes, residual risk that survives the change. Include the threat model you assumed.

What new data becomes observable. Who can observe it. Retention, decay, and deletion semantics. If nothing changes here, say so explicitly.

  • Breaks for existing nodes: yes or no; list specific behaviors.
  • Breaks for SDKs: yes or no; list specific affected packages.
  • Activation strategy: fork block, opt-in flag, or version gate.

Concrete inputs and expected outputs so implementations can be cross-checked. At minimum three cases: happy path, edge case, adversarial. Inline them; do not link to an external gist that can move.

{
"input": "...",
"expected": "..."
}

Link to PR or branch once code lands. Empty during Draft.

Things the author has not decided yet. This section shrinks as the QDP moves through review. Empty is fine at Last Call.

  • YYYY-MM-DD Draft published
  • YYYY-MM-DD Last Call
  • YYYY-MM-DD Accepted
  • YYYY-MM-DD Phase 1 landed
  • YYYY-MM-DD Landed