Skip to content

Allow AuthorizeActor while locked when expiry outlives unlock - #90

Open
chunter-cb wants to merge 3 commits into
mainfrom
feat/authorize-while-locked
Open

Allow AuthorizeActor while locked when expiry outlives unlock#90
chunter-cb wants to merge 3 commits into
mainfrom
feat/authorize-while-locked

Conversation

@chunter-cb

@chunter-cb chunter-cb commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • While locked, AuthorizeActor is now permitted if the granted expiry outlives the unlock floor: now + delay when hard-locked, unlocksAt when a pending unlock is in flight. expiry == 0 (no expiry) always passes.
  • A live actor may only have its expiry rewritten. Authenticator, scope, and policy (manager + commitment) stay frozen; changing them reverts AccountIsLocked. A new or already-expired actorId is a fresh add.
  • Revoke, re-lock, and other authority changes stay frozen. A grant that would be dead by the soonest unlock is revoke-shaped and reverts ExpiryDoesNotOutliveUnlock.
  • Lets high-rate payer accounts stay locked (mempool tier) while adding new keys or re-leasing existing 24h leases; rotation is add-new and let the old expiry elapse.

This is a spec change relative to the current EIP-8130 Account Lock section (authorize is listed as rejected while locked). Follow-up needed on the EIP text.

Test plan

  • Hard-locked: expiry == now + delay reverts; == now + delay + 1 lands; expiry == 0 lands
  • Pending unlock: expiry == unlocksAt reverts; == unlocksAt + 1 lands
  • Re-lease / shorten of an existing actor is allowed if the new expiry is still above the floor
  • Live-actor scope, authenticator, or policy rewrite while locked reverts AccountIsLocked
  • Revoke while locked still reverts AccountIsLocked; epoch bump still succeeds
  • Expired JIT authorize under lock is still a skip, not an ExpiryDoesNotOutliveUnlock revert
  • Confirm EIP-8130 Account Lock wording is updated to match

High-rate accounts stay locked for mempool tiering but still need to add or re-lease keys. A grant that dies before the soonest unlock is revoke-shaped and stays rejected.
A re-lease may only move expiry; swapping authenticator, scope, or policy is a revoke-shaped rewrite and stays rejected while locked.
A live slot is expiry-only above the unlock floor; an expired actor reads empty so that id is a new add while the account stays locked.
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