DAO Treasury Ops
Recipe - Optimistic Grants
Auto-approve grants unless challenged.
Recipe: Optimistic Grants
This policy allows a Grant Committee to approve a grant instantly, but enforces a Challenge Window (e.g., 3 days) before funds can move. During this window, the DAO can veto.
The Strategy
Initiate: Committee "queues" a grant.
Wait: Funds are locked for 3 days.
Finalize: If no veto occurs, anyone can trigger the payout.
Challenge windows keep you safe
A short veto period preserves oversight without slowing routine grants.
The Policy
import "abis/Grants.json" as Grants;
permission OptimisticGrantGuard -> 1.0.0 {
parameters: {
committee: address,
vetoRole: address,
grantId: uint256
}
fn main() -> bool {
if (context.selector == Grants.queue) {
if (context.caller != parameters.committee) {
return false;
}
return Grants.queue.grantId == parameters.grantId;
} else if (context.selector == Grants.veto) {
if (context.caller != parameters.vetoRole) {
return false;
}
return Grants.veto.grantId == parameters.grantId;
} else if (context.selector == Grants.claim) {
if (context.caller != parameters.committee) {
return false;
}
return Grants.claim.grantId == parameters.grantId;
}
return false;
}
}Integration
This pattern reduces governance fatigue. The DAO only needs to pay attention if something looks wrong. Otherwise, execution happens automatically.