Skip to content

guardian: integrate rate limiting into withdrawal flow#423

Draft
0xsiddharthks wants to merge 4 commits intomainfrom
siddharth/guardian-integration
Draft

guardian: integrate rate limiting into withdrawal flow#423
0xsiddharthks wants to merge 4 commits intomainfrom
siddharth/guardian-integration

Conversation

@0xsiddharthks
Copy link
Copy Markdown
Contributor

@0xsiddharthks 0xsiddharthks commented Apr 9, 2026

Summary

Wire up the guardian as a rate limiter in the withdrawal flow. When configured, the leader calls the guardian before MPC signing — if rate-limited, retry with backoff; if approved, proceed as normal. Guardian is fully optional (no guardian_endpoint = no change in behavior).

Changes:

  • New GuardianClient gRPC wrapper + guardian_endpoint config field
  • New SignGuardianWithdrawalRequest proto endpoint for committee BLS signing
  • Guardian gate in process_unsigned_pending_withdrawal (Step 3, before MPC signing)
  • Seq counter synced from guardian's LimiterState.next_seq at startup
  • Ed25519 signature verification on guardian responses
  • Added LimiterState to GetGuardianInfoResponse proto

Guardian BTC signatures are received but not used in the witness yet — that needs 2-of-2 taproot deposit addresses (follow-up).

Wire up the guardian gRPC client in hashi and call it during
withdrawal processing to enforce rate limits before committing
withdrawal transactions on-chain.
@0xsiddharthks 0xsiddharthks requested a review from bmwill as a code owner April 9, 2026 16:55
Add SignGuardianWithdrawalRequest proto endpoint so each validator
independently reconstructs and BLS-signs the StandardWithdrawalRequest.
The leader fans out to the committee and aggregates signatures before
forwarding to the guardian, matching the pattern used by all other
withdrawal signing steps.

Move the guardian gate from Step 2 to Step 3 so the PendingWithdrawal
exists on-chain and validators can reconstruct the request from it.
Add LimiterState to GetGuardianInfoResponse so hashi can read the
guardian's current next_seq at startup. This ensures the seq counter
survives node restarts and leader rotations without drifting.
Fetch the guardian's signing pubkey at startup alongside the seq
counter. After each standard_withdrawal call, deserialize the
response into GuardianSigned<StandardWithdrawalResponse> and verify
the Ed25519 signature against the cached pubkey.
@0xsiddharthks 0xsiddharthks marked this pull request as draft April 9, 2026 18:14
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