Skip to content

Comments

docs: clarify fee payer placeholder wire format vs signing payload encoding#111

Closed
brendanjryan wants to merge 1 commit intomainfrom
fix/clarify-fee-payer-placeholder-encoding
Closed

docs: clarify fee payer placeholder wire format vs signing payload encoding#111
brendanjryan wants to merge 1 commit intomainfrom
fix/clarify-fee-payer-placeholder-encoding

Conversation

@brendanjryan
Copy link
Contributor

Problem

The spec for the fee payer signature placeholder was ambiguous, describing two different encodings without clarifying which applies where:

Section Says Encoding
Sender Signature (field 12) 0x00 placeholder Single byte
Transaction Flow (step 1) Some(Signature::default()) RLP list [0, 0x00…, 0x00…]
RLP Encoding RLP list [v, r, s] if Some RLP list

This caused an interop bug: ox/viem deserialized Rust/alloy's wire format placeholder (RLP list of zeros) as a real signature object instead of the null sentinel, breaking sender recovery and fee payer co-signing.

Fix

Clarifies that these are two different contexts:

  • Wire format (serialized envelope on the wire): Some(Signature::default()) → RLP list [0, 0x00…, 0x00…] (c3 80 80 80)
  • Signing payload (encode_for_signing): single byte 0x00

Adds an explicit implementor note: deserializers MUST treat a zero-valued signature (v=0, r=0, s=0) as the unsigned placeholder and encode it as 0x00 when recomputing the sender's signing payload.

Related

…coding

The spec was ambiguous about how the fee_payer_signature placeholder is
encoded. The Sender Signature section described the 0x00 byte without
clarifying it applies only to the signing payload, while the Transaction
Flow section referenced Some(Signature::default()) (the wire format)
without explaining the mapping.

This caused an interop issue where ox/viem deserialized the Rust/alloy
wire format placeholder (RLP list [0, 0x00…, 0x00…]) as a real signature
object instead of the null sentinel, breaking sender recovery.

Clarifies:
- Wire format: Some(Signature::default()) → RLP list [v, r, s] zeros
- Signing payload: always 0x00 (single byte)
- Implementations MUST map zero-valued sigs → 0x00 in encode_for_signing
@vercel
Copy link

vercel bot commented Feb 18, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
tempo-docs Error Error Feb 18, 2026 7:24pm

Request Review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant