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

import "abis/OptionsVault.json" as Options;

permission CoveredCallRoll -> 1.0.0 {
    parameters: {
        vault: address,
        approvedStrike: uint256,
        approvedExpiry: uint256,
        approvedOptionAmount: uint256
    }

    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 and expiry should come from an off-chain risk process until relational ABI field predicates are supported.

On this page