Base Strategy Module (Legacy)

Overview

The satay::base_strategy module acts as the entry point for strategies to interact with vaults. The base_strategy module is a friend module of satay::vault, and thus can access its mutating functions. base_strategy is stateless, acting as a proxy for strategies to operate on vaults.

Initialize

initialize calls the approve_strategy function on the vault referenced by the (manager, vault_id) with debt_ratio and type_of(StrategyCoin) and registers CoinStore<StrategyCoin> on vault. witness is required to ensure calling module defines StrategyType.

public fun initialize<StrategyType: drop, StrategyCoin>(
    manager: &signer,
    vault_id: u64, 
    debt_ratio: u64, 
    witness: StrategyType
)

Withdraw Strategy Coin

Withdraw amount of StrategyCoin from the Vault accessed by vault_cap. Assert that type_of<StrategyCoin> == strategy.strategy_coin_type of VaultStrategy<StrategyType>. Use StrategyType witness to authenticate the caller.

public fun withdraw_strategy_coin<StrategyType: drop, StrategyCoin>(
    vault_cap: &VaultCapability,
    amount: u64,
    _witness: StrategyType
): Coin<StrategyCoin>

Harvest

Opens the Vault for harvest. Must be followed by a closing call to close_vault_for_harvest.

Calculates and reports the profit, loss, and required debt_payment forStrategyType given its debt_ratio and strategy_balance. Calls assess_fees on any profits generated by the strategy. Returns Coin<BaseCoin> to deploy to StrategyType if it has not utilized its entire credit line and amount_needed if the strategy has more debt than is allowed.

Deposit Coin<StrategyCoin> into the Vault referenced by vault_cap. Called between calls to open_vault_for_harvest and close_vault_for_harvest.

Closes the Vault after harvest, depositing base_coins and strategy_coins back to the Vault.

Harvest Trigger

Called by vault manager to check if harvest should be called. Returns true if strategy.force_harvest_trigger, (timestamp::now_seconds() - strategy.last_report) >= strategy.max_report_delay, or credit_available >= credit_threshold. false otherwise.

Closes vault without passing any coins.

Tend

Tend operations claim rewards from a strategy and reinvest them to accrue more Coin<StrategyCoin> in the vault.

Open the Vault for a tend operation. Returns VaultCapability, VaultCapLock, and the debt_out standing for StrategyType.

Close the Vault for a tend operation. Deposits strategy_coins into the vault.

User Withdraw

Opens vault for user to reclaim BaseCoin from StrategyType to the Vault. Asserts that user holds share_amount of VaultCoin<BaseCoin> and that the Vault does not hold enough BaseCoin to satisfy the withdrawl amount. Returns amount_neededof BaseCoi, and VaultCapability, and VaultCap lock for a subsequent call to close_vault_for_user_withdraw.

Closes the Vault after liquidation of Coin<StrategyCoin> back into Coin<BaseCoin>.

Admin Functions

Updates strategy.debt_ratio on VaultStrategy<StrategyType> for Vault referenced by (manager, vault_id).

Updates strategy.max_report_delay on VaultStrategy<StrategyType> for Vault referenced by (manager, vault_id).

Updates strategy.max_report_delay on VaultStrategy<StrategyType> for Vault referenced by (manager, vault_id).

Set strategy.force_harvest_trigger_once to true on VaultStrategy<StrategyType> for Vault referenced by (manager, vault_id).

Sets strategy.debt_ratio to 0 on VaultStrategy<StrategyType> for Vault referenced by (manager, vault_id).

Sets strategy.debt_ratio to 0 on VaultStrategy<OldStrategy> and calls initialize<NewStrategy, NewStrategyCoin> with old_strategy_debt_ratio for Vault referenced by (manager, vault_id).

Last updated