# 合约总览

## 合约架构

( 更新于 2021/ 3 / 1 )

* 该图基于实时部署
* Belt.fi有两个合约组（保险库和具有收益率的AMM）

![](/files/SqZbUx7FjMO5Qo2moykz)

![](/files/SpAzjHMbr5defo5Z2SnP)

## 合约列表

* BELT Token
  * 代码
    * <https://github.com/BeltFi/belt-contract/blob/main/contracts/BeltToken.sol>
  * 描述
    * BEP-20 BELT token 合约
  * Interface界面
    * Read
      * initialSupply
      * initialSupplyRemaining
      * startBlockMining
      * BELTPerBlock
      * getCirculatingSupply()
      * **ADDRESS** burnAddress
      * **ADDRESS** initialSupplyClaimer => TEAM EOA wallet
      * **ADDRESS** owner => MasterBelt contract
    * Write
      * **\[ONLY CLAIMER]** claimInitialSupply(uint \_amount)
      * **\[ONLY OWNER]** mint(address \_to, uint256 \_amount)
* MasterBelt
  * Code
    * <https://github.com/BeltFi/belt-contract/blob/main/contracts/earn/MasterBelt.sol>
  * Description
    * Mint and burn BELT token
    * Manage VaultBPool and Distribute BELT token to VaultBPool
    * Calculating pendingBELT for claim
  * Interface
    * Read
      * **ADDRESS** BELT
      * **ADDRESS** burnAddress
      * **ADDRESS** owner => TEAM EOA wallet
      * ownerBELTReward
      * BELTPerBlock
      * startBlock
      * poolInfo\[]
      * userInfo\[]\[]
      * totalAllocPoint
      * stakedWantTokens(uint256 \_pid, address \_user)
      * pendingBELT(uint256 \_pid, address \_user)
    * Write
      * **\[ONLY OWNER]** add(uint256 \_allocPoint,IERC20 \_want,bool \_withUpdate,address \_strat)
      * **\[ONLY OWNER]** set(uint256 \_pid,uint256 \_allocPoint,bool \_withUpdate)
      * **\[ONLY OWNER]** inCaseTokensGetStuck(address \_token, uint256 \_amount)
      * massUpdatePools()
      * updatePool(uint256 \_pid)
      * deposit(uint256 \_pid, uint256 \_wantAmt)
      * withdraw(uint256 \_pid, uint256 \_wantAmt)
      * withdrawAll(uint256 \_pid)
      * emergencyWithdraw(uint256 \_pid)
* BeltStrategy
  * Code
    * <https://github.com/BeltFi/belt-contract/tree/main/contracts/earn/strategies>
  * Description
    * Manage assets with best yield strategy
  * Interface
    * Read
      * **ADDRESS** govAddress => TEAM EOA Wallet
      * **ADDRESS** owner .=> bToken Contract
      * **ADDRESS** BELTAddress
      * **ADDRESS** wantAddress
      * **ADDRESS** vTokenAddress
      * wantLockedTotal()
      * wantLockedInHere()
      *
    * Write
      * **\[ONLY OWNER]\[PAUSABLE]** deposit(address \_userAddress, uint256 \_wantAmt)
      * **\[ONLY OWNER]** withdraw(address \_userAddress, uint256 \_wantAmt)
      * farm(bool \_withLev)
      * deleverageOnce()
      * deleverageUntilNotOverLevered()
      * **\[PAUSABLE]** earn()
      * updateBalance()
      * wrapBNB()
      * **\[ONLY GOV]** rebalance(uint256 \_borrowRate, uint256 \_borrowDepth)
      * **\[DISABLED]** pause()
      * **\[DISABLED]** unpause()
      * **\[DISABLED]** setEntranceFeeFactor(uint256 \_entranceFeeFactor)
      * **\[DISABLED]** setControllerFee(uint256 \_controllerFee)
      * **\[DISABLED]** setbuyBackRate(uint256 \_buyBackRate)
      * **\[DISABLED]** setGov(address \_govAddress)
      * **\[DISABLED]** inCaseTokensGetStuck(address \_token,uint256 \_amount,address \_to)
* StrategyGovernance
  * Code
    * <https://github.com/BeltFi/belt-contract/blob/main/contracts/earn/strategies/StrategyGovernance.sol>
  * Description
    * Manage Strategy contract rebalance method
  * Interface
    * Read
      * owner
      * strategyAddress
    * Write
      * transferOwnership
      * rebalance
* bToken
  * Code
    * <https://github.com/BeltFi/belt-contract/blob/main/contracts/earn/tokens/bBUSD.sol>
  * Description
    * Mint and burn bToken
  * Interface
    * Read
      * pool
      * token
      * venus
      * provider
      * recommend()
      * approveToken()
      * balance()
      * balanceVenus()
      * calcPoolValueInToken()
      * getPricePerFullShare()
      * **ADDRESS** owner => TEAM EOA Wallet
    * Write
      * deposit(uint256 \_amount)
      * withdraw(uint256 \_shares)
      * rebalance()
* BeltLPToken
  * Code
    * <https://github.com/BeltFi/belt-contract/blob/main/contracts/swap/BeltLPToken.vy>
  * Description
    * LP tokens of belt pools
  * Interface
    * Read
      * **ADDRESS** minter => StableSwapB contract
      * totalSupply()
    * Write
      * **\[ONLY MINTER]** set\_minter(\_minter: address)
      * **\[ONLY MINTER]** mint(\_to: address, \_value: uint256)
      * **\[ONLY MINTER]** burn(\_value: uint256)
      * **\[ONLY MINTER]** burnFrom(\_to: address, \_value: uint256)
* StableSwapB
  * Code
    * <https://github.com/BeltFi/belt-contract/blob/main/contracts/swap/StableSwapB.vy>
  * Description
    * Swap between pool member token
  * Interface
    * Read
      * admin\_actions\_delay
      * coins
      * underlying\_coins
      * balances
      * A
      * fee
      * buyback\_fee
      * max\_buyback\_fee
      * **ADDRESS** owner => TEAM EOA Wallet
      * **ADDRESS** buyback\_addr => TEAM EOA Wallet
      * token
      * admin\_actions\_deadline
      * transfer\_ownership\_deadline
      * kill\_deadline
      * kill\_deadline\_dt
      * is\_killed
      * pool\_token()
      * get\_virtual\_price()
      * calc\_token\_amount(amounts: uint256\[N\_COINS], deposit: bool)
      * get\_dy(i: int128, j: int128, dx: uint256)
      * get\_dx(i: int128, j: int128, dy: uint256)
      * get\_dy\_underlying(i: int128, j: int128, dx: uint256)
      * get\_dx\_underlying(i: int128, j: int128, dy: uint256)
    * Write
      * **\[KILLABLE]** add\_liquidity(amounts: uint256\[N\_COINS], min\_mint\_amount: uint256)
      * **\[KILLABLE]** exchange(i: int128, j: int128, dx: uint256, min\_dy: uint256)
      * **\[KILLABLE]** exchange\_underlying(i: int128, j: int128, dx: uint256, min\_dy: uint256)
      * remove\_liquidity(\_amount: uint256, min\_amounts: uint256\[N\_COINS])
      * **\[KILLABLE]** remove\_liquidity\_imbalance(amounts: uint256\[N\_COINS], max\_burn\_amount: uint256)
      * **\[ONLY OWNER]** commit\_new\_parameters(amplification: uint256,new\_fee: uint256,new\_buyback\_fee: uint256,new\_buyback\_addr: address)
      * **\[ONLY OWNER]** apply\_new\_parameters()
      * **\[ONLY OWNER]** revert\_new\_parameters()
      * **\[ONLY OWNER]** commit\_transfer\_ownership(\_owner: address)
      * **\[ONLY OWNER]** apply\_transfer\_ownership()
      * **\[ONLY OWNER]** revert\_transfer\_ownership()
      * **\[ONLY OWNER]** kill\_me()
      * **\[ONLY OWNER]** unkill\_me()
      * withdraw\_buyback\_fees()
* DepositB
  * Code
    * <https://github.com/BeltFi/belt-contract/blob/main/contracts/swap/DepositB.vy>
  * Description
    * Depositor for belt pools
  * Interface
    * Read \*
    * Write
      * add\_liquidity(uamounts: uint256\[N\_COINS], min\_mint\_amount: uint256)
      * remove\_liquidity(\_amount: uint256, min\_uamounts: uint256\[N\_COINS])
      * remove\_liquidity\_imbalance(uamounts: uint256\[N\_COINS], max\_burn\_amount: uint256)
      * calc\_withdraw\_one\_coin(\_token\_amount: uint256, i: int128)
      * remove\_liquidity\_one\_coin(\_token\_amount: uint256, i: int128, min\_uamount: uint256, donate\_dust: bool = False)
      * **\[ONLY LP OWNER]** withdraw\_donated\_dust()
* VaultBPool
  * BeltLPToken vaults
    * Code
      * <https://github.com/BeltFi/belt-contract/blob/main/contracts/earn/strategies/VaultBPool.sol>
    * Description
      * Vaults of BeltLPToken
    * Interface
      * Read
        * wantAddress
        * masterBeltAddress
        * govAddress
        * wantLockedTotal
        * sharesTotal
        * **ADDRESS** owner => MasterBelt Contract
        * **ADDRESS** govAddress .=> TEAM EOA Wallet
      * Write
        * **\[ONLY OWNER]\[PAUSABLE]** deposit(address \_userAddress, uint256 \_wantAmt)
        * **\[ONLY OWNER]** withdraw(address \_userAddress, uint256 \_wantAmt)
        * **\[ONLY GOV]** pause()
        * **\[ONLY GOV]** unpause()
        * **\[ONLY GOV]** setGov(address \_govAddress)
        * **\[ONLY GOV]** setOnlyGov(bool \_onlyGov)
  * CakeLPToken vaults
    * Code
      * <https://github.com/BeltFi/belt-contract/blob/main/contracts/earn/strategies/VaultCakePool.sol>
    * Description
      * Vaults of CakeLPToken
    * Interface
      * Read
        * \-
      * Write
        * \-
* Belt View
  * Code
    * <https://github.com/BeltFi/belt-contract/blob/main/contracts/BeltView.sol>
  * Description
    * View status of Belt.fi contracts
  * Interface
    * Read
      * getSwapStat(address user)
      * getUserBeltStat(address user)
    * Write
      * None


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.belt.fi/belt-finance-zh-cn/contracts/contracts-overview.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
