The Custody contract is where supplied bAsset collaterals are managed. Users can make collateral deposits and withdrawals to and from this contract. The Custody contract is also responsible for claiming bAsset rewards and converting them to Terra stablecoins, which is then sent to the Overseer contract for eventual distribution.
Config
InstantiateMsg
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub struct InstantiateMsg {
pub owner : String ,
pub collateral_token : String ,
pub overseer_contract : String ,
pub market_contract : String ,
pub reward_contract : String ,
pub liquidation_contract : String ,
pub stable_denom : String ,
pub basset_info : BAssetInfo ,
}
#[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
pub struct BAssetInfo {
pub name : String ,
pub symbol : String ,
pub decimals : u8 ,
}
Copy {
"owner" : "terra1..." ,
"collateral_token" : "terra1..." ,
"overseer_contract" : "terra1..." ,
"market_contract" : "terra1..." ,
"reward_contract" : "terra1..." ,
"liquidation_contract" : "terra1..." ,
"stable_denom" : "uusd" ,
"basset_info" : {
"name" : "bonded luna" ,
"symbol" : "ubluna" ,
"decimals" : 6
}
}
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" : "eyAiZXhlY3V0ZV9tc2ciOiAiYmluYXJ5IiB9"
}
}
UpdateConfig
Updates the configuration of the Custody contract.
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub enum ExecuteMsg {
UpdateConfig {
owner : Option < String >,
liquidation_contract : Option < String >,
}
}
Copy {
"update_config" : {
"owner" : "terra1..." ,
"liquidation_contract" : "terra1..."
}
}
* = optional
[Internal] LockCollateral
Locks borrower's collateral to be used in their loan position, decreasing the amount of spendable collateral. Can only be issued by Overseer
.
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub enum ExecuteMsg {
LockCollateral {
borrower : String ,
amount : Uint256 ,
}
}
Copy {
"lock_collateral" : {
"borrower" : "terra1..." ,
"amount" : "10000000"
}
}
[Internal] UnlockCollateral
Unlocks borrower's collateral from their loan position, increasing the amount of spendable collateral. Can only be issued by Overseer
.
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub enum ExecuteMsg {
UnlockCollateral {
borrower : String ,
amount : Uint256 ,
}
}
Copy {
"unlock_collateral" : {
"borrower" : "terra1..." ,
"amount" : "10000000"
}
}
[Internal] DistributeRewards
Withdraws accrued rewards from the bLuna Contract, swaps rewards to the appropriate stablecoin denomination. Can only be issued by Overseer
.
Afterwards, distributes swapped rewards to depositors by sending swapped rewards to Market
. If the deposit rate during the last epoch is above the target deposit rate, then a portion of the rewards are set aside as a yield reserve, which are sent to Overseer
.
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub enum ExecuteMsg {
DistributeRewards {}
}
Copy {
"distribute_rewards" : {}
}
[Internal] LiquidateCollateral
Liquidates specified amount of locked collateral. Can only be issued by Overseer
.
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub enum ExecuteMsg {
LiquidateCollateral {
liquidator : String ,
borrower : String ,
amount : Uint256 ,
}
}
Copy {
"liquidate_collateral" : {
"liquidator" : "terra1..." ,
"borrower" : "terra1..." ,
"amount" : "100000000"
}
}
WithdrawCollateral
Collaterals have to be first unlocked in the Overseer before they can be withdrawn by the user.
Withdraws specified amount of spendable collateral. Withdraws all spendable collateral if the amount
field is not filled.
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub enum ExecuteMsg {
WithdrawCollateral {
amount : Option < Uint256 >,
}
}
Copy {
"withdraw_collateral" : {
"amount" : "10000000"
}
}
* = optional
Receive Hooks
DepositCollateral
Deposited collaterals have to be locked in the Overseer before they can be utilized in a loan position.
Deposits collateral. Issued when a user sends bAsset tokens to the Custody contract.
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub enum Cw20HookMsg {
DepositCollateral {}
}
Copy {
"deposit_collateral" : {}
}
QueryMsg
Config
Gets the contract configuration of the Custody contract.
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 : String ,
pub collateral_token : String ,
pub overseer_contract : String ,
pub market_contract : String ,
pub reward_contract : String ,
pub liquidation_contract : String ,
pub stable_denom : String ,
pub basset_info : BAssetInfo ,
}
#[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
pub struct BAssetInfo {
pub name : String ,
pub symbol : String ,
pub decimals : u8 ,
}
Copy {
"owner" : "terra1..." ,
"collateral_token" : "terra1..." ,
"overseer_contract" : "terra1..." ,
"market_contract" : "terra1..." ,
"reward_contract" : "terra1..." ,
"liquidation_contract" : "terra1..." ,
"stable_denom" : "uusd" ,
"basset_info" : {
"name" : "bonded luna" ,
"symbol" : "ubluna" ,
"decimals" : 6
}
}
Borrower
Gets the collateral balance of the specified borrower.
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub enum QueryMsg {
Borrower {
address : String ,
}
}
Copy {
"borrower" : {
"address" : "terra1..."
}
}
BorrowerResponse
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
pub struct BorrowerResponse {
pub borrower : String ,
pub balance : Uint256 ,
pub spendable : Uint256 ,
}
Copy {
"borrower" : "terra1..." ,
"balance" : "1000000000" ,
"spendable" : "100000000"
}
Borrowers
Get the collateral balance of all borrowers.
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
#[serde(rename_all = "snake_case" )]
pub enum QueryMsg {
Borrowers {
start_after : Option < String >,
limit : Option < u32 >,
}
}
Copy {
"borrowers" : {
"start_after" : "terra1..." ,
"limit" : 10
}
}
* = optional
BorrowersResponse
Rust JSON
Copy #[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
pub struct BorrowersResponse {
pub borrowers : Vec < BorrowerResponse >,
}
#[derive( Serialize , Deserialize , Clone , Debug , PartialEq , JsonSchema )]
pub struct BorrowerResponse {
pub borrower : String ,
pub balance : Uint256 ,
pub spendable : Uint256 ,
}
Copy {
"borrowers" : [
{
"borrower" : "terra1..." ,
"balance" : "2389476982" ,
"spendable" : "2837492"
} ,
{
"borrower" : "terra1..." ,
"balance" : "2389476982" ,
"spendable" : "2837492"
}
]
}