Custody [bLUNA]
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.
Key | Type | Description |
owner | CanonicalAddr | Address of contract owner |
collateral_token | CanonicalAddr | Contract address of bLuna Token |
overseer_contract | CanonicalAddr | Contract address of Overseer |
market_contract | CanonicalAddr | Contract address of Market |
reward_contract | CanonicalAddr | Contract address of bLuna Reward |
liquidation_contract | CanonicalAddr | Contract address of Liquidation Contract |
stable_denom | String | Native token denomination for stablecoin |
basset_info | BAssetInfo | bAsset token information |
Rust
JSON
#[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,
}
{
"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
}
}
Key | Type | Description |
owner | String | Address of contract owner |
collateral_token | String | Contract address of bLuna Token |
overseer_contract | String | Contract address of Overseer |
market_contract | String | Contract address of Market |
reward_contract | String | Contract address of bLuna Reward |
liquidation_contract | String | Contract address of Liquidation Contract |
stable_denom | String | Native token denomination for stablecoin |
basset_info | BAssetInfo | bAsset token information |
Key | Type | Description |
name | String | Name of bAsset |
symbol | String | Symbol of bAsset |
decimals | u8 | Number of decimals of bAsset token |
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
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
Receive {
sender: String,
amount: Uint128,
msg: Binary,
}
}
{
"receive": {
"sender": "terra1...",
"amount": "10000000",
"msg": "eyAiZXhlY3V0ZV9tc2ciOiAiYmluYXJ5IiB9"
}
}
Key | Type | Description |
sender | String | Sender of the token transfer |
amount | Uint128 | Amount of tokens received |
msg | Binary |
Updates the configuration of the Custody contract.
Rust
JSON
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
UpdateConfig {
owner: Option<String>,
liquidation_contract: Option<String>,
}
}
{
"update_config": {
"owner": "terra1...",
"liquidation_contract": "terra1..."
}
}
Key | Type | Description |
owner * | String | New address of contract owner |
liquidation_contract * | String | New contract address of Liquidation Contract |
* = optional
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
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
LockCollateral {
borrower: String,
amount: Uint256,
}
}
{
"lock_collateral": {
"borrower": "terra1...",
"amount": "10000000"
}
}
Key | Type | Description |
borrower | String | Address of borrower locking collateral |
amount | Uint256 | Amount of collateral to lock |
Unlocks borrower's collateral from their loan position, increasing the amount of spendable collateral. Can only be issued by
Overseer
.Rust
JSON
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
UnlockCollateral {
borrower: String,
amount: Uint256,
}
}
{
"unlock_collateral": {
"borrower": "terra1...",
"amount": "10000000"
}
}
Key | Type | Description |
borrower | String | Address of borrower unlocking collateral |
amount | Uint256 | Amount of collateral to unlock |
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
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
DistributeRewards {}
}
{
"distribute_rewards": {}
}
Key | Type | Description |
| | |
Liquidates specified amount of locked collateral. Can only be issued by
Overseer
.Rust
JSON
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
LiquidateCollateral {
liquidator: String,
borrower: String,
amount: Uint256,
}
}
{
"liquidate_collateral": {
"liquidator": "terra1...",
"borrower": "terra1...",
"amount": "100000000"
}
}
Key | Type | Description |
liquidator | String | Address of user that triggered liquidations |
borrower | String | Address of borrower being liquidated |
amount | Uint256 | Amount of collateral to liquidate |
Withdraws specified amount of spendable collateral. Withdraws all spendable collateral if the
amount
field is not filled.Rust
JSON
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
WithdrawCollateral {
amount: Option<Uint256>,
}
}
{
"withdraw_collateral": {
"amount": "10000000"
}
}
Key | Type | Description |
amount * | Uint256 | Amount of collateral to withdraw |
* = optional
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
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum Cw20HookMsg {
DepositCollateral {}
}
{
"deposit_collateral": {}
}
Key | Type | Description |
| | |
Gets the contract configuration of the Custody contract.
Rust
JSON
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
Config {}
}
{
"config": {}
}
Key | Type | Description |
| | |
Rust
JSON
#[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,
}
{
"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
}
}
Key | Type | Description |
owner | String | Address of contract owner |
collateral_token | String | Contract address of bLuna Token |
overseer_contract | String | Contract address of Overseer |
market_contract | String | Contract address of Market |
reward_contract | String | Contract address bLuna Reward |
liquidation_contract | String | Contract address of Liquidation Contract |
stable_denom | String | Native token denomination for stablecoin |
basset_info | BAssetInfo | bAsset token information |
Key | Type | Description |
name | String | Name of bAsset token |
symbol | String | Symbol of bAsset token |
decimals | u8 | Number of decimals of bAsset Token |
Gets the collateral balance of the specified borrower.
Rust
JSON
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
Borrower {
address: String,
}
}
{
"borrower": {
"address": "terra1..."
}
}
Key | Type | Description |
address | String | Address of borrower that deposited collateral |
Rust
JSON
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct BorrowerResponse {
pub borrower: String,
pub balance: Uint256,
pub spendable: Uint256,
}
{
"borrower": "terra1...",
"balance": "1000000000",
"spendable": "100000000"
}
Key | Type | Description |
borrower | String | Address of borrower that deposited collateral |
balance | Uint256 | Total amount of deposited collateral |
spendable | Uint256 | Amount of spendable collateral |
Get the collateral balance of all borrowers.
Rust
JSON
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
Borrowers {
start_after: Option<String>,
limit: Option<u32>,
}
}
{
"borrowers": {
"start_after": "terra1...",
"limit": 10
}
}
Key | Type | Description |
start_after * | String | Borrower address to start query |
limit * | u32 | Maximum number of query entries |
* = optional
Rust
JSON
#[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,
}
{
"borrowers": [
{
"borrower": "terra1...",
"balance": "2389476982",
"spendable": "2837492"
},
{
"borrower": "terra1...",
"balance": "2389476982",
"spendable": "2837492"
}
]
}
Key | Type | Description |
borrowers | Vec<BorrowerResponse> | Collateral balance information of borrowers |
Key | Type | Description |
borrower | String | Address of borrower that deposited collateral |
balance | Uint256 | Total amount of deposited collateral |
spendable | Uint256 | Amount of spendable collateral |
Last modified 1yr ago