Specialized Strategy Modules

Overview

A strategy must define a set of functions and structs to operate on a vault. It interacts with satay::base_strategy and Structured Prodocts.

Identifier

StrategyType is used to identify a strategy and verify its authenticity in function calls via the witnessing pattern.

struct StrategyType has drop {}

Initialize

Initialize the Vault referenced by vault_id with debt_ratio by calling base_strategy::initialize function with the StrategyType identifier.

public fun initialize(
    manager: &signer, 
    vault_id: u64, 
    debt_ratio: u64
)

Harvest

Calls structured_product::reinvest_returns and deposits StrategyCoin to vault. Rebalances the debt position given the strategy's balance and debt_ratio. Only called if harvest_trigger returns true.

public entry fun harvest(    
    manager: &signer,    
    vault_id: u64
)

Harvest Trigger

Returns a boolean regarding whether or not the vault manager should call harvest for StrategyType.

public entry fun harvest_trigger(    
    manager: &signer,    
    vault_id: u64
): bool

Tend

Calls structured_product::reinvest_returns and deposits farmed StrategyCoin to the Vault

public entry fun harvest(    
    manager: &signer,    
    vault_id: u64
)

Withdraw for User

Called by user when there is not enough BaseCoin in the vault, and the user wants to liquidate the respective amount of StrategyCoin for a given share_amount of VaultCoin<BaseCoin>.

public entry fun withdraw_for_user(    
    user: &signer,    
    manager_addr: address,    
    vault_id: u64,    
    share_amount: u64
)

Admin Functions

Implement all of the Admin Functions of the Base Strategy Module using the specialized strategy Identifier.

Last updated