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
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.
Rust JSON
Copy #[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 ,
}
Copy {
"owner_addr" : "terra1..." ,
"stable_denom" : "uusd" , // Terra USD
"aterra_code_id" : 5 ,
"anc_emission_rate" : "0.05" ,
"max_borrow_factor" : "0.95"
}
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.
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub enum ExecuteMsg {
Receive {
sender : String ,
amount : Uint128 ,
msg : Binary ,
}
}
Copy {
"receive" : {
"sender" : "terra1..." ,
"amount" : "10000000" ,
"msg" : "eyAiZXhlY3V0ZV9tc2ciOiAiYmxhaCBibGFoIiB9"
}
}
RegisterContracts
Registers the addresses of other Money Market contracts. Can only be issued by the owner.
Rust JSON
Copy #[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 ,
}
}
Copy {
"register_contracts" : {
"overseer_contract" : "terra1..." ,
"interest_model" : "terra1..." ,
"distribution_model" : "terra1..." ,
"collector_contract" : "terra1..." ,
"distributor_contract" : "terra1..."
}
}
[Internal] RegisterATerra
Registers the contract address of aTerra
Cw20 Token contract. Issued by aTerra
after initialization.
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub enum ExecuteMsg {
RegisterATerra {}
}
Copy {
"register_a_terra" : {}
}
UpdateConfig
Updates the configuration of the contract. Can be only issued by the owner.
Rust JSON
Copy #[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 >,
}
}
Copy {
"update_config" : {
"owner_addr" : "terra1..." ,
"max_borrow_factor" : "0.95" ,
"interest_model" : "terra1..." ,
"distribution_model" : "terra1..."
}
}
* = optional
[Internal] RepayStableFromLiquidation
Repays a liquidated loan using stablecoins gained from liquidated collaterals. Can only be issued by Overseer
.
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub enum ExecuteMsg {
RepayStableFromLiquidation {
borrower : String ,
prev_balance : Uint256 ,
}
}
Copy {
"repay_stable_from_liquidation" : {
"borrower" : "terra1..." ,
"prev_balance" : "1000000000"
}
}
[Internal] ExecuteEpochOperations
Adjusts the borrower ANC emission rate and sends accumulated ANC excess yield reserves to Overseer. Can only be issued by Overseer.
Rust JSON
Copy #[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 ,
}
}
Copy {
"execute_epoch_operations" : {
"deposit_rate" : "0.000000002" ,
"target_deposit_rate" : "0.000000002" ,
"threshold_deposit_rate" : "0.000000001" ,
"distributed_interest" : "100000000"
}
}
DepositStable
Deposits stablecoins to Anchor. Requires stablecoins to be sent with the message.
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub enum ExecuteMsg {
DepositStable {}
}
Copy {
"deposit_stable" : {}
}
BorrowStable
Borrows stablecoins from Anchor.
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub enum ExecuteMsg {
BorrowStable {
borrow_amount : Uint256 ,
to : Option < String >,
}
}
Copy {
"borrow_stable" : {
"borrow_amount" : "1000000000" ,
"to" : "terra1..."
}
}
* = optional
RepayStable
Repays previous stablecoin liability. Requires stablecoins to be sent with the message.
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub enum ExecuteMsg {
RepayStable {}
}
Copy {
"repay_stable" : {}
}
ClaimRewards
Claims accrued ANC rewards. Can designate an optional recipient. Sends rewards to message sender if to
is not specified.
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub enum ExecuteMsg {
ClaimRewards {
to : Option < String >,
}
}
Copy {
"claim_rewards" : {
"to" : "terra1..."
}
}
* = optional
Receive Hooks
RedeemStable
Redeems aTerra to their underlying stablecoins.
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub enum Cw20HookMsg {
RedeemStable {}
}
Copy {
"redeem_stable" : {}
}
QueryMsg
Config
Gets the Market contract configuration.
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub enum QueryMsg {
Config {}
}
ConfigResponse
Rust JSON
Copy #[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 ,
}
Copy {
"owner_addr" : "terra1..." ,
"aterra_contract" : "terra1..." ,
"interest_model" : "terra1..." ,
"distribution_model" : "terra1..." ,
"overseer_contract" : "terra1..." ,
"collector_contract" : "terra1..." ,
"distributor_contract" : "terra1..." ,
"stable_denom" : "uusd" ,
"max_borrow_factor" : "1.0"
}
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.
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub enum QueryMsg {
State {
block_height : Option < u64 >,
}
}
Copy {
"state" : {
"block_height" : 123456 ,
}
}
* = optional
StateResponse
Rust JSON
Copy #[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 ,
}
Copy {
"total_liabilities" : "123.456789" ,
"total_reserves" : "12.3456789" ,
"last_interest_updated" : 123456789 ,
"last_reward_updated" : 123456789 ,
"global_interest_index" : "1.23456789" ,
"global_reward_index" : "123456.789" ,
"anc_emission_rate" : "0.05" ,
"prev_aterra_supply" : "100000000" ,
"prev_exchange_rate" : "1.23456789"
}
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.
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub enum QueryMsg {
EpochState {
block_height : Option < u64 >,
distributed_interest : Option < Uint256 >,
}
}
Copy {
"epoch_state" : {
"block_height" : 123456 ,
"distributed_interest" : "100000000"
}
}
* = optional
EpochStateResponse
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
pub struct EpochStateResponse {
pub exchange_rate : Decimal256 ,
pub aterra_supply : Uint256 ,
}
Copy {
"exchange_rate" : "1.23" ,
"aterra_supply" : "100000000"
}
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.
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub enum QueryMsg {
BorrowerInfo {
borrower : String ,
block_height : Option < u64 >,
}
}
Copy {
"borrower_info" : {
"borrower" : "terra1..." ,
"block_height" : 123456
}
}
* = optional
BorrowerInfoResponse
Rust JSON
Copy #[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 ,
}
Copy {
"borrower" : "terra1..." ,
"interest_index" : "1.23456789" ,
"reward_index" : "123.456789" ,
"loan_amount" : "123456789" ,
"pending_rewards" : "123456.789"
}
BorrowInfos
Gets information for all borrowers.
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub enum QueryMsg {
BorrowInfos {
start_after : Option < String >,
limit : Option < u32 >,
}
}
Copy {
"borrower_infos" : {
"start_after" : "terra1..." ,
"limit" : 10
}
}
* = optional
BorrowerInfosResponse
Rust JSON
Copy #[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 ,
}
Copy {
"borrower_infos" : [
{
"borrower" : "terra1..." ,
"interest_index" : "1.23456789" ,
"reward_index" : "123.456789" ,
"loan_amount" : "123456789" ,
"pending_rewards" : "123456.789"
} ,
{
"borrower" : "terra1..." ,
"interest_index" : "1.23456789" ,
"reward_index" : "123.456789" ,
"loan_amount" : "123456789" ,
"pending_rewards" : "123456.789"
}
]
}