Delegation
An agent that holds a grant can delegate a BOUNDED subset of its authority to another agent: a sub-grant. The owner opts in once (a delegation policy on the parent), and the holder may then issue sub-grants that only NARROW the parent, never widen it. Every release counts against the parent's rolling cap across the whole sub-tree, so handing out sub-grants can never multiply the spend the owner authorized. Revoking the parent disables the entire sub-tree.
How a sub-grant is issued
- Start from a grant you hold whose owner marked it delegable
(
delegation.maxDepth >= 1). - Narrow it: drop actions/targets, lower caps, shorten the expiry. The sub-grant must stay within the parent on every axis.
- Sign it with YOUR wallet (the delegator), not the owner's, and submit. The backend verifies your signature against the parent's grantee and re-checks the bound before anchoring.
The browser helpers in lib/grant/delegation.ts (and the
SDK's client.delegateGrant()) build the canonical
body, validate it against the parent, sign, and POST
/grant/delegate.