Extra labels: security, feature
Tier: L (5-7 days) | Type: feature + security
Context. Only stealth-announcer has a pause guard today. If a live vuln is disclosed against stealth-sender or wraith-names, the only mitigation is a full upgrade (hours, multi-sig). Withdrawals must remain enabled while paused so users can always exit.
Scope.
- Add
Paused storage + pause / unpause / is_paused gated by Admin.
- Guard every state-mutating entrypoint EXCEPT withdrawal / reveal / lookup with
require_not_paused().
- Emit
Paused / Unpaused events matching the topic pattern in stealth-announcer.
- Extend
PAUSE.md + MULTISIG.md.
Acceptance.
Files. stealth-announcer/src/pause.rs (reference), stealth-sender/src/lib.rs, wraith-names/src/lib.rs, PAUSE.md, EVENT_TOPIC_DESIGN.md.
Extra labels:
security,featureTier: L (5-7 days) | Type: feature + security
Context. Only
stealth-announcerhas a pause guard today. If a live vuln is disclosed againststealth-senderorwraith-names, the only mitigation is a full upgrade (hours, multi-sig). Withdrawals must remain enabled while paused so users can always exit.Scope.
Pausedstorage +pause/unpause/is_pausedgated byAdmin.require_not_paused().Paused/Unpausedevents matching the topic pattern instealth-announcer.PAUSE.md+MULTISIG.md.Acceptance.
cargo test --workspacecovers pause / unpause / paused-call rejection for both contractsstealth-senderand reveal / lookup onwraith-namesremain callable while paused (dedicated tests)PAUSE.mdupdated with the guarded surface per contractFiles.
stealth-announcer/src/pause.rs(reference),stealth-sender/src/lib.rs,wraith-names/src/lib.rs,PAUSE.md,EVENT_TOPIC_DESIGN.md.