Anchor Protocol
  • Home
  • Security
  • Protocol
    • Overview
    • Bonded Assets (bAssets)
      • Bonded Luna (bLuna)
      • Bonded ETH (bETH)
    • Money Market
      • Deposit Rate Subsidization
    • Loan Liquidation
    • Anchor Token (ANC)
    • Anchor Governance
      • Modify Collateral Attributes
      • Modify Market Parameters
      • Modify Liquidation Parameters
      • Modify ANC Parameters
      • Modify Governance Parameters
      • Modify Borrow Interest
      • Modify ANC Distribution
      • Community Grants
      • Text Proposal
  • User Guide
    • Interchain Transfers
    • WebApp
      • EARN
      • BORROW
      • bASSET [bLUNA]
      • bASSET [bETH]
      • GOVERN
        • ANC - UST LP Staking
        • Anchor Governance Staking
        • Claiming ANC Rewards
        • Creating and voting on proposals
  • EthAnchor
    • EthAnchor
    • EthAnchor Contracts
      • Deployed Contracts
      • Router
      • ConversionPool
      • ExchangeRateFeeder
    • Fees
  • Developers - Earn
    • Anchor Earn SDK
    • Example Usage
    • Appendix
  • xAnchor
    • xAnchor
    • xAnchor Contracts
    • xAnchor Bridge (EVM Chains)
    • xAnchor Terra-side Contracts
      • xAnchor Core
      • xAnchor Wormhole Bridge
      • Address Proxy
  • Developers - Terra
    • Anchor.js
    • AnchorCLI
  • Smart Contracts
    • Deployed Contracts
    • bLuna
      • Hub
      • Reward
      • Rewards Dispatcher
      • Validators Registry
      • Airdrop Registry
      • Tokens: bLuna and stLuna
    • bETH
      • Reward
      • Token
      • Converter
    • Money Market
      • Overseer
      • Market
      • Custody [bLUNA]
      • Custody [bETH]
      • Interest Model
      • Distribution Model
      • Oracle
    • Liquidation
      • Liquidation Contract
      • Liquidation Queue Contract
    • Anchor Token (ANC)
      • Gov
      • Staking
      • Community
      • Collector
      • Distributor
  • Developers - Ethereum [Legacy]
    • EthAnchor
    • EthAnchor Account Contract
    • EthAnchor API
      • Getting Market Information
      • Depositing Stablecoins
      • Redeeming Stablecoins
    • Fees
  • External Resources
    • Anchor WebApp
    • Anchor Protocol GitHub
    • Terra Blockchain
Powered by GitBook
On this page
  • Config
  • InstantiateMsg
  • ExecuteMsg
  • UpdateConfig
  • QueryMsg
  • Config
  • ConfigResponse
  • ANCEmissionRate
  • ANCEmissionRateResponse

Was this helpful?

  1. Smart Contracts
  2. Money Market

Distribution Model

PreviousInterest ModelNextOracle

Last updated 3 years ago

Was this helpful?

The Distribution Model contract manages the calculation of the ANC emission rate, using fed in deposit rate information. At the time of protocol genesis, the emission rate adjusts to double when the deposit rate is below the targeted rate and decreases by 10% if the deposit rate is above the targeted rate. Further descriptions on the ANC emission rate control mechanism can be found .

Config

Key

Type

Description

owner

CanonicalAddr

Address of contract owner

emission_cap

Decimal256

Maximum per-block ANC emission rate

emission_floor

Decimal256

Minimum per-block ANC emission rate

increment_multiplier

Decimal256

Rate multiplier when increasing emission

decrement_multiplier

Decimal256

Rate multiplier when decreasing emission

InstantiateMsg

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct InstantiateMsg {
    pub owner: String,
    pub emission_cap: Decimal256,
    pub emission_floor: Decimal256, 
    pub increment_multiplier: Decimal256,
    pub decrement_multiplier: Decimal256,
}
{
  "owner": "terra1...", 
  "emission_cap": "10000", 
  "emission_floor": "1000", 
  "increment_multiplier": "2.0", 
  "decrement_multiplier": "0.9" 
}

Key

Type

Description

owner

String

Address of contract owner

emission_cap

Decimal256

Maximum per-block ANC emission rate

emission_floor

Decimal256

Minimum per-block ANC emission rate

increment_multiplier

Decimal256

Rate multiplier when increasing emission

decrement_multiplier

Decimal256

Rate multiplier when decreasing emission

ExecuteMsg

UpdateConfig

Updates the Distribution Model contract configuration.

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
    UpdateConfig {
        owner: Option<String>,
        emission_cap: Option<Decimal256>,
        emission_floor: Option<Decimal256>, 
        increment_multiplier: Option<Decimal256>,
        decrement_multiplier: Option<Decimal256>,
    }
}
{
  "update_config": {
    "owner": "terra1...", 
    "emission_cap": "10000", 
    "emission_floor": "1000", 
    "increment_multiplier": "2.0", 
    "decrement_multiplier": "0.9" 
  }
}

Key

Type

Description

owner*

String

Address of new owner

emission_cap*

Decimal256

New maximum per-block ANC emission rate

emission_floor*

Decimal256

New minimum per-block ANC emission rate

increment_multiplier*

Decimal256

New rate multiplier when increasing emission

decrement_multiplier*

Decimal256

New rate multiplier when decreasing emission

* = optional

QueryMsg

Config

Gets the Distribution Model contract configuration

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

Key

Type

Description

ConfigResponse

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct ConfigResponse {
    pub owner: String,
    pub emission_cap: Decimal256,
    pub emission_floor: Decimal256, 
    pub increment_multiplier: Decimal256,
    pub decrement_multiplier: Decimal256,
}
{
  "owner": "terra1...", 
  "emission_cap": "10000", 
  "emission_floor": "1000", 
  "increment_multiplier": "2.0", 
  "decrement_multiplier": "0.9" 
}

Key

Type

Description

owner

String

Address of contract owner

emission_cap

Decimal256

Maximum per-block ANC emission rate

emission_floor

Decimal256

Minimum per-block ANC emission rate

increment_multiplier

Decimal256

Rate multiplier when increasing emission

decrement_multiplier

Decimal256

Rate multiplier when decreasing emission

ANCEmissionRate

Gets the ANC emission rate, calculated based on deposit rate situations.

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
    ANCEmissionRate {
        deposit_rate: Decimal256, 
        target_deposit_rate: Decimal256, 
        threshold_deposit_rate: Decimal256, 
        current_emission_rate: Decimal256, 
    }
}
{
  "anc_emission_rate": {
    "deposit_rate": "0.0001", 
    "target_deposit_rate": "0.00015", 
    "threshol_deposit_rate": "0.00010", 
    "current_emission_rate": "5000" 
  }
}

Key

Type

Description

deposit_rate

Decimal256

Average per-block deposit rate during the last epoch

target_deposit_rate

Decimal256

Target per-block deposit rate of Anchor

threshold_deposit_rate

Decimal256

Minimum per-block deposit rate supported by Anchor

current_emission_rate

Decimal256

Current per-block ANC emission rate

ANCEmissionRateResponse

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct ANCEmissionRateResponse {
    pub emission_rate: Decimal256,
}
{
  "emission_rate": "10000"
}

Key

Type

Description

emission_rate

Decimal256

Calculated per-block ANC emission rate

here