Market

The Market contract acts as the point of interaction for all lending and borrowing related activities. New stablecoin deposits are added to this contract's balance, while borrows are subtracted from the contract balance.

Config

Key

Type

Description

contract_addr

CanonicalAddr

Address of itself (Market contract)

owner_addr

CanonicalAddr

Address of contract owner that can update config

aterra_contract

CanonicalAddr

Contract address of aTerra

interest_model

CanonicalAddr

Contract address of Interest Model

distribution_model

CanonicalAddr

Contract address of Distribution Model

overseer_contract

CanonicalAddr

Contract address of Overseer

collector_contract

CanonicalAddr

Contract address of Collector

distributor_contract

CanonicalAddr

Contract address of Distributor

stable_denom

String

Native token denomination for stablecoin

max_borrow_factor

Decimal256

Maximum portion of stablecoin liquidity available for borrows

InstantiateMsg

Instantiates the money market Market contract. Requires the owner to make an initial deposit of 1 Terra stablecoin and mints 1 aTerra to the Market contract (inaccessible). The creator's initial stablecoin deposit ensures the aTerra supply to always be a high enough value to prevent rounding errors in the aTerra exchange rate calculation.

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct InstantiateMsg {
    pub owner_addr: String, 
    pub stable_denom: String, 
    pub aterra_code_id: u64, 
    pub anc_emission_rate: Decimal256, 
    pub max_borrow_factor: Decimal256, 
}

Key

Type

Description

owner_addr

String

Address of contract owner

stable_denom

String

Native token denomination for stablecoin

aterra_code_id

u64

Code ID for aTerra contract

anc_emission_rate

Decimal256

Initial per-block ANC emission rate to borrowers

max_borrow_factor

Decimal256

Maximum portion of stablecoin liquidity available for borrows

ExecuteMsg

Receive

Can be called during a CW20 token transfer when the Mint contract is the recipient. Allows the token transfer to execute a Receive Hook as a subsequent action within the same transaction.

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
    Receive {
        sender: String,
        amount: Uint128,
        msg: Binary,
    }
}

Key

Type

Description

sender

String

Sender of token transfer

amount

Uint128

Amount of tokens received

msg

Binary

Base64-encoded string of JSON of Receive Hook

RegisterContracts

Registers the addresses of other Money Market contracts. Can only be issued by the owner.

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
    RegisterContracts {
        overseer_contract: String, 
        interest_model: String, 
        distribution_model: String, 
        collector_contract: String, 
        distributor_contract: String, 
    }
}

Key

Type

Description

overseer_contract

String

Contract address of Overseer

interest_model

String

Contract address of Interest Model

distribution_model

String

Contract address of Distribution Model

collector_contract

String

Contract address of Collector

distributor_contract

String

Contract address of Distributor

[Internal] RegisterATerra

Registers the contract address of aTerra Cw20 Token contract. Issued by aTerra after initialization.

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
    RegisterATerra {}
}

Key

Type

Description

UpdateConfig

Updates the configuration of the contract. Can be only issued by the owner.

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
    UpdateConfig {
        owner_addr: Option<String>, 
        max_borrow_factor: Option<Decimal256>, 
        interest_model: Option<String>, 
        distribution_model: Option<String>, 
    }
}

Key

Type

Description

owner_addr*

String

Address of new owner

max_borrow_factor*

Decimal256

New maximum portion of stablecoin liquidity available for borrows

interest_model*

String

New interest model contract address

distribution_model*

String

New contract address of Distribution Model

* = optional

[Internal] RepayStableFromLiquidation

Repays a liquidated loan using stablecoins gained from liquidated collaterals. Can only be issued by Overseer.

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
    RepayStableFromLiquidation {
        borrower: String, 
        prev_balance: Uint256, 
    }
}

Key

Type

Description

borrower

String

Address of loan borrower

prev_balance

Uint256

Balance of Market contract prior to collateral liquidation

[Internal] ExecuteEpochOperations

Adjusts the borrower ANC emission rate and sends accumulated ANC excess yield reserves to Overseer. Can only be issued by Overseer.

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
    ExecuteEpochOperations {
        deposit_rate: Decimal256, 
        target_deposit_rate: Decimal256, 
        threshold_deposit_rate: Decimal256, 
        distributed_interest: Uint256, 
    }
}

Key

Type

Description

deposit_rate

Decimal256

Calculated per-block deposit of the last epoch

target_deposit_rate

Decimal256

Target per-block deposit rate of Anchor

threshold_deposit_rate

Decimal256

Threshold per-block deposit rate of Anchor

distributed_interest

Uint256

Amount of depositor subsidies distributed in this epoch

DepositStable

Deposits stablecoins to Anchor. Requires stablecoins to be sent with the message.

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
    DepositStable {}
}

Key

Type

Description

BorrowStable

Borrows stablecoins from Anchor.

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
    BorrowStable {
        borrow_amount: Uint256, 
        to: Option<String>, 
    }
}

Key

Type

Description

borrow_amount

Uint256

Amount of stablecoins to borrow

to*

String

Withdrawal address for borrowed stablecoins

* = optional

RepayStable

Repays previous stablecoin liability. Requires stablecoins to be sent with the message.

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
    RepayStable {}
}

Key

Type

Description

ClaimRewards

Claims accrued ANC rewards. Can designate an optional recipient. Sends rewards to message sender if to is not specified.

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
    ClaimRewards {
        to: Option<String>, 
    }
}

Key

Type

Description

to*

String

Optional recipient of accrued ANC rewards

* = optional

Receive Hooks

RedeemStable

Redeems aTerra to their underlying stablecoins.

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum Cw20HookMsg {
    RedeemStable {}
}

Key

Type

Description

QueryMsg

Config

Gets the Market contract configuration.

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
    Config {}
}

Key

Type

Description

ConfigResponse

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct ConfigResponse {
    pub owner_addr: String, 
    pub aterra_contract: String, 
    pub interest_model: String, 
    pub distribution_model: String, 
    pub overseer_contract: String, 
    pub collector_contract: String, 
    pub distributor_contract: String, 
    pub stable_denom: String, 
    pub max_borrow_factor: Decimal256, 
}

Key

Type

Description

owner_addr

String

Address of contract owner

aterra_contract

String

Contract address of aTerra

interest_model

String

Contract address of Interest Model

distribution_model

String

Contract address of Distribution Model

overseer_contract

String

Contract address of Overseer

collector_contract

String

Contract address of Collector

distributor_contract

String

Contract address of Distributor

stable_denom

String

Native token denomination for stablecoin

max_borrow_factor

Decimal256

Maximum portion of stablecoin liquidity available for borrows

State

Gets state information of Market. Returns an interest-accrued value if block_height field is filled. Returns the stored (no interest accrued) state if not filled.

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
    State {
        block_height: Option<u64>, 
    }
}

Key

Type

Description

block_height

u64

Block number to use in query

* = optional

StateResponse

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct State {
    pub total_liabilites: Decimal256, 
    pub total_reserves: Decimal256, 
    pub last_interest_updated: u64, 
    pub last_reward_updated: u64, 
    pub global_interest_index: Decimal256, 
    pub global_reward_index: Decimal256, 
    pub anc_emission_rate: Decimal256, 
    pub prev_aterra_supply: Uint256, 
    pub prev_exchange_rate: Decimal256, 
}

Key

Type

Description

total_liabilities

Decimal256

Total amount of liabilities of all borrowers

total_reserves

Decimal256

Total amount of ANC purchase reserves

last_interest_updated

u64

Block number when interest was last accrued

last_reward_updated

u64

Block number when rewards were last accrued

global_interest_index

Decimal256

Current global interest index

global_reward_index

Decimal256

Current ANC global reward index

anc_emission_rate

Decimal256

Current per-block ANC emission rate to borrowers

prev_aterra_supply

Uint256

aTerra supply when interest was last accrued

prev_exchange_rate

Decimal256

aTerra exchange rate when interest was last accrued

EpochState

Gets state information related to epoch operations. Returns an interest-accrued value if block_height field is filled. Returns the stored (no interest accrued) state if not filled.

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
    EpochState {
        block_height: Option<u64>, 
        distributed_interest: Option<Uint256>, 
    }
}

Key

Type

Description

block_height*

u64

Block number to use in query

distributed_interest*

Uint256

Amount of depositor subsidies distributed in this epoch

* = optional

EpochStateResponse

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct EpochStateResponse {
    pub exchange_rate: Decimal256, 
    pub aterra_supply: Uint256, 
}

Key

Type

Description

exchange_rate

Decimal256

Current aTerra exchange rate

aterra_supply

Uint256

Current aTerra supply

BorrowerInfo

Gets information for the specified borrower. Returns an interest-and-reward-accrued value if block_height field is filled. Returns the stored (no interest / reward accrued) state if not filled.

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
    BorrowerInfo {
        borrower: String, 
        block_height: Option<u64>, 
    }
}

Key

Type

Description

borrower

String

Address of borrower

block_height*

u64

Current block number

* = optional

BorrowerInfoResponse

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct BorrowInfoResponse {
    pub borrower: String, 
    pub interest_index: Decimal256, 
    pub reward_index: Decimal256, 
    pub loan_amount: Uint256, 
    pub pending_rewards: Decimal256, 
}

Key

Type

Description

borrower

String

Address of borrower

interest_index

Decimal256

Interest index of borrower

reward_index

Decimal256

ANC reward index of borrower

loan_amount

Uint256

Amount of borrower's liability

pending_rewards

Decimal256

Amount of ANC rewards accrued to borrower

BorrowInfos

Gets information for all borrowers.

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
    BorrowInfos {
        start_after: Option<String>, 
        limit: Option<u32>, 
    }
}

Key

Type

Description

start_after*

String

Borrower address to start query

limit*

u32

Maximum number of entries to query

* = optional

BorrowerInfosResponse

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct BorrowerInfosResponse {
    pub borrower_infos: Vec<BorrowerInfoResponse>, 
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct BorrowInfoResponse {
    pub borrower: String, 
    pub interest_index: Decimal256, 
    pub reward_index: Decimal256, 
    pub loan_amount: Uint256, 
    pub pending_rewards: Decimal256, 
}

Key

Type

Description

borrower_infos

Vec<BorrowerInfoResponse>

List of borrower information

Key

Type

Description

borrower

String

Address of borrower

interest_index

Decimal256

Interest index of borrower

reward_index

Decimal256

ANC reward index of borrower

loan_amount

Uint256

Amount of borrower's liability

pending_rewards

Decimal256

Amount of ANC rewards accrued to borrower

Last updated