Summary
Admin transfer is a single call, so a typo or compromised key hands over the contract irrevocably. Implement a two-step propose/accept transfer with a timelock.
Why this matters
Single-step admin handover is a well-known footgun. Propose/accept + timelock prevents fat-finger and gives a reaction window.
Requirements
propose_admin(new) stores a pending admin + proposal timestamp (admin-only).
accept_admin() succeeds only when called by the pending admin after the timelock.
- The current admin can cancel a pending proposal.
- Emit events for propose/accept/cancel.
Technical guidance
- Enforce the timelock against the ledger timestamp.
- Clear the pending slot on accept/cancel.
Edge cases — each must have a test
Acceptance criteria
Out of scope
- Multi-sig admin
- Role hierarchy
Rewards
Part of the GrantFox OSS / Official Campaign (FWC26) — this task may be rewarded. PR quality is assessed by AI: depth, correctness under edge cases, meaningful tests, and clean design are what earn the reward. Shallow changes (typos, formatting, trivial docs) do not qualify.
Summary
Admin transfer is a single call, so a typo or compromised key hands over the contract irrevocably. Implement a two-step propose/accept transfer with a timelock.
Why this matters
Single-step admin handover is a well-known footgun. Propose/accept + timelock prevents fat-finger and gives a reaction window.
Requirements
propose_admin(new)stores a pending admin + proposal timestamp (admin-only).accept_admin()succeeds only when called by the pending admin after the timelock.Technical guidance
Edge cases — each must have a test
Acceptance criteria
cargo fmt --check,cargo clippy --all-targets -- -D warnings, andcargo testall pass locallyCloses #<issue>Out of scope
Rewards
Part of the GrantFox OSS / Official Campaign (FWC26) — this task may be rewarded. PR quality is assessed by AI: depth, correctness under edge cases, meaningful tests, and clean design are what earn the reward. Shallow changes (typos, formatting, trivial docs) do not qualify.