Committee Validation
The Scalability Challenge
When a block containing messages propagates across the network, every validator must verify it. Without optimization, this means:
1,000 validators × 10,000 messages = 10 million redundant verification operations per block
Obsidian solves this with per-message committee attestation — each message gets its own unique validator committee.
The Two-Stage Validation Model
Obsidian validates messages at two distinct points:
Stage 1: Edge Node Validation (Per-Message, On Arrival)
When a user submits a message via eth_sendMessageBlob:
User → RPC → Edge Node (Geth)
↓
┌─────────────────────────────┐
│ FULL VALIDATION: │
│ • Signature verification │
│ • VDF proof verification │
│ • Size limits │
│ • Balance check (for bids) │
└─────────────────────────────┘
↓
4-Second Aggregation Window
↓
Message with Embedded AttestationEvery message is fully validated before entering any queue. Invalid messages are rejected immediately at the RPC layer.
Stage 2: Per-Message Committee Attestation
Each message gets a unique random committee of ~10% of validators:
Why Per-Message Committees?
Parallelism
Messages can be validated independently, no ordering dependencies
Self-Contained
Each message carries its own proof of validation
Unpredictable
Committee unknown until message exists (prevents targeted attacks)
Deterministic
Any node can verify committee membership
4-Second Aggregation Window
The edge node waits 4 seconds after gossiping a message to collect attestations:
This window balances:
Latency: 4s is short enough for responsive UX
Coverage: Long enough for most committee members to respond
Threshold: Need 67% (2/3) of committee for skip-verification
Committee Selection Algorithm
Each message gets a deterministically selected committee:
Key Properties:
Different committee for every message (message_hash is unique)
Unpredictable until message exists
Same result computed by any node
Uses current epoch's RANDAO mix
Committee Parameters
Target Size
~10% of validators
Scales with network
Minimum
10
Security floor
Maximum
1,000
Efficiency cap
Attestation Threshold
67% (2/3)
Byzantine tolerance
Selection
Per-message
Unique committee per message_hash
Aggregation Timeout
4 seconds
Time to collect attestations
What Gets Signed
Committee members sign a simple hash:
This commits to:
The exact message content (via message_hash)
The Obsidian protocol (via domain separation)
2/3 Threshold Requirement
For the skip-verification optimization to activate, at least 67% (2/3) of the message's committee must sign:
10
7
50
34
100
67
500
334
1000
667
This threshold ensures Byzantine fault tolerance — even if 1/3 of committee members are malicious, they cannot force acceptance of invalid messages.
Fail-Safe Behavior
The system defaults to full verification when:
No embedded attestation
Full verification
Below 2/3 threshold
Full verification
Invalid BLS signature
Full verification
Committee mismatch
Full verification
Non-Silica fork block
Full verification
Any error during check
Full verification
No attestation = Verify everything. The optimization only activates when provably safe.
Performance Impact
Validators re-verifying messages
100%
~10% (committee only)
Sig + VDF checks during block import
All messages × all validators
0 (if attestation valid)
BLS signature checks
0
1 per message
For a network with 1,000 validators and 10,000 messages per block:
Without attestation: 1,000 validators × 10,000 messages = 10,000,000 re-verifications
With attestation: 100 committee × 10,000 messages (at edge) + 1,000 × 10,000 BLS checks ≈ 90% reduction in expensive operations
Security Properties
Byzantine Fault Tolerance: 2/3 threshold means 1/3 of committee can be malicious without affecting safety
Per-Message Isolation: Compromising one message's committee doesn't affect others
Unpredictable Selection: Attackers can't know committee until message exists
Cryptographic Binding: Attestations are cryptographically bound to specific message_hash
Domain Separation: Committee signatures use
OBSIDIAN_MSG_COMMITTEE_ATT_V2preventing cross-protocol attacks
Validator Duties
If you run a validator, you may be selected for committee duty on any message. When selected:
Your validator client subscribes to message gossip
For each message, check if you're in its committee (via deterministic selection)
If in committee: sign
message_hashand publish attestationThe originating edge node collects and aggregates attestations
This happens automatically — no manual intervention required.
Per-message committee attestation allows validators to skip expensive sig/VDF re-verification while maintaining Byzantine fault tolerance. Each message is self-contained with its own embedded attestation.
Last updated