# 合约总览

## 合约架构

( 更新于 2021/ 3 / 1 )

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

![](https://514717676-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOxO99tvJZcLvtFRg5uQH%2Fuploads%2Fgit-blob-8cec4ad7e91288409afec4a64e2a1cda5382b26f%2Fimage%20\(19\).png?alt=media)

![](https://514717676-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOxO99tvJZcLvtFRg5uQH%2Fuploads%2Fgit-blob-be91550e5b1f9553cf6ab4007f9d9d8baf27d98c%2Fimage%20\(10\).png?alt=media)

## 合约列表

* 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
