Matador Docs
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.

On this page