Skip to main content
Authorization is delegated, per operation, to a vault’s configured policy. The same validate interface is implemented by eight interchangeable policies, hot-swappable via update_vault_policy (only while transactions are disabled).

The shipped policies

What policies enforce on creation & execution

Rejections surface as typed errors: TransactionAlreadyPending, NotEnoughSigners, AmountTooHigh / AmountTooLow, UnauthorizedSender.

The challenge policy and the oracle

policy_challenges is special: it authorizes the oracle’s NAV reports. Its validate(Report) reads the ChallengeTemplate and requires template.admin == signer — so only the designated oracle (the template admin) may push NAV for a challenge-bound vault. This is what makes the oracle trustworthy.
Each policy constrains only the operations it cares about; the rest pass through. To enforce several constraints at once, a combinator policy (planned) fans out to multiple checks. A vault binds exactly one policy at a time.