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
  • Receive
  • Unbond
  • Withdraw
  • MigrateStaking
  • Receive Hooks
  • Bond
  • QueryMsg
  • Config
  • ConfigResponse
  • State
  • StateResponse
  • StakerInfo
  • StakerInfoResponse

Was this helpful?

  1. Smart Contracts
  2. Anchor Token (ANC)

Staking

The Staking Contract contains the logic for LP Token staking and reward distribution. ANC tokens allocated for as liquidity incentives are distributed pro-rata to stakers of the ANC-UST Terraswap pair LP token.

Config

Name

Type

Description

anchor_token

CanonicalAddr

Contract address of Anchor Token (ANC)

staking_token

CanonicalAddr

Contract address of ANC-UST Terraswap pair LP token

distribution_schedule

Vec<(u64, u64, Uint128)>

ANC distribution schedule for LP token stakers (start block [block], end block [block], distribution amount)

InstantiateMsg

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct InstantiateMsg {
    pub anchor_token: String,
    pub staking_token: String,
    pub distribution_schedule: Vec<(u64, u64, Uint128)>, 
}
{
  "anchor_token": "terra1...", 
  "staking_token": "terra1...", 
  "distribution_schedule": [
    [123456, 234567, "100000000"], 
    [234567, 345678, "200000000"]
  ]
}

Name

Type

Description

anchor_token

String

Contract address of Anchor Token (ANC)

staking_token

String

Contract address of ANC-UST Terraswap pair LP token

distribution_schedule

Vec<(u64, u64, Uint128)>

ANC distribution schedule for LP token stakers (start block [block], end block [block], distribution amount)

ExecuteMsg

Receive

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

Name

Type

Description

sender

String

Sender of the token transfer

amount

Uint128

Amount of tokens received

msg

Binary

Unbond

Unbonds specified amount of ANC-UST Terraswap LP tokens and transfers them to the message sender.

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
    Unbond {
        amount: Uint128, 
    }
}
{
  "unbond": {
    "amount": "100000000"
  }
}

Name

Type

Description

amount

Uint128

Amount of LP tokens to unbond

Withdraw

Withdraws user's accrued LP token staking rewards.

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

Name

Type

Description

MigrateStaking

Migrates ANC LP incentives to a new LP token staking contract.

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
    MigrateStaking {
        new_staking_contract: String, 
    }
}
{
  "migrate_staking": {
    "new_staking_contract": "terra1...", 
  }
}

Key

Type

Description

new_staking_contract

String

Contract address of new LP staking contract

Receive Hooks

Bond

WARNING

Sending LP tokens to the Staking contract without issuing this hook will lead to PERMANENT LOSS OF FUNDS.

Bonds LP tokens of the ANC-UST Terraswap pair.

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

Name

Type

Description

QueryMsg

Config

Gets the Staking contract configuration.

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

Name

Type

Description

ConfigResponse

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct ConfigResponse {
    pub anchor_token: String,
    pub staking_token: String,
    pub distribution_schedule: Vec<(u64, u64, Uin128)>, 
}
{
  "anchor_token": "terra1...", 
  "staking_token": "terra1...", 
  "distribution_schedule": [
    [123456, 234567, "100000000"], 
    [234567, 345678, "200000000"]
  ]
}

Name

Type

Description

anchor_token

String

Contract address of Anchor Token (ANC)

staking_token

String

Contract address of ANC-UST Terraswap pair LP token

distribution_schedule

Vec<(u64, u64, Uint128)>

ANC distribution schedule for LP token stakers (start block [block], end block [block], amount)

State

Gets state information for the specified block number.

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

Name

Type

Description

block_height*

u64

Current block number [block]

* = optional

StateResponse

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct StateResponse {
    pub last_distributed: u64, 
    pub total_bond_amount: Uint128, 
    pub global_reward_index: Decimal,
}
{
  "last_distributed": 123456, 
  "total_bond_amount": "100000000", 
  "global_reward_index": "123.456" 
}

Name

Type

Description

last_distributed

u64

Block number when rewards where last distributed [block]

total_bond_amount

Uint128

Total amount of bonded LP tokens by all stakers

global_reward_index

Decimal

Global reward index for LP staking rewards

StakerInfo

Gets reward information for the specified LP token staker.

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
    StakerInfo {
        staker: String, 
        block_height: Option<u64>, 
    }
}
{
  "staker_info": {
    "staker": "terra1...", 
    "block_height": 123456 
  }
}

Name

Type

Description

staker

String

Address of LP token staker

block_height*

u64

Current block number [block]

* = optional

StakerInfoResponse

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct StakerInfoResponse {
    pub staker: String,
    pub reward_index: Decimal,
    pub bond_amount: Uint128,
    pub pending_reward: Uint128,
}
{
  "staker": "terra1...", 
  "reward_index": "123.456", 
  "bond_amount": "100000000", 
  "pending_rewards": "100000000" 
}

Name

Type

Description

staker

String

Address of LP token staker

reward_index

Decimal

Reward index of staker

bond_amount

Uint128

Amount of LP tokens bonded by staker

pending_rewards

Uint128

Amount of pending rewards of staker

PreviousGovNextCommunity

Last updated 3 years ago

Was this helpful?

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

Base64-encoded string of JSON of

Receive Hook
Receive Hook