Matador Docs
Asset Management

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.

On this page