Recipe - Covered Call Roll
A policy for managing a DOV (DeFi Option Vault).
Recipe: Covered Call Roll
This policy manages the weekly "roll" of a Covered Call strategy. It ensures the manager mints options that match a pre-approved strike, expiry, and size.
The Strategy
Weekly Cycle: Every Friday, mint new OTM (Out-of-the-Money) call options.
Safety: Strike price must match the approved weekly quote.
Safety: Expiry must match the approved weekly quote.
Protect the vault from ITM rolls
Exact strike and expiry checks ensure the manager cannot roll into unapproved option terms.
The Policy
Demo ABI
OptionsVault.json is a local demo ABI for this recipe, not a public
protocol ABI.
import "abis/OptionsVault.json" as Options;
permission CoveredCallRoll -> 1.0.0 {
parameters: {
authorizer: address,
vault: address,
approvedStrike: uint256,
approvedExpiry: uint256,
approvedOptionAmount: uint256
}
pub fn authorize() -> bool {
return authorizedBy(parameters.authorizer);
}
fn main() -> bool {
if (context.target != parameters.vault) {
return false;
}
if (context.selector == Options.roll) {
if (Options.roll.strike != parameters.approvedStrike) {
return false;
}
if (Options.roll.expiry != parameters.approvedExpiry) {
return false;
}
return Options.roll.optionAmount == parameters.approvedOptionAmount;
}
return false;
}
}Integration
This policy protects investors from a manager selling unapproved calls. The approved strike, expiry, and option size should come from an off-chain risk process; use relational calldata-field checks when a strategy needs floors or caps instead of exact approved terms.