π§ Smart Contracts
Detailed view of smart contracts.
You can find deployed contracts addresses and interfaces in Deployed Addresses.
Protocol-wide contracts
These contracts are deployed only once per chain.
ARBERAβ ERC20 token.ProtocolFeesβ Stores two fee values.yieldAdminβARBERAand rewards fee % for Future LP Yield.yieldProtocolβbrTOKENfee % for the protocol.
ProtocolFeeRouterβ Stores mutable address ofProtocolFees.IndexManagerβ Stores all Den addresses and boolean if they are verified or not.RewardsWhitelisterβ Stores list of whitelisted reward tokens.UniswapDexAdapterβ Helper contract for adding liquidity and swapping on Uniswap/forks.V3TwapUtilitiesβ Helper functions to compute Uniswap V3 X96 price, it's square root and derive V3 pool address deterministically.
Den-related smart contracts
These three contracts implementations are deployed once.
WeightedIndexβ Main Den contract (inherits fromDecentralizedIndex).StakingPoolTokenβ Allows staking Den LP tokens.TokenRewardsβ Accumulates and distributes rewards for staked Den LP tokens.
New Dens are created by calling WheightedIndexFactory .
Variables
address PAIRED_LP_TOKENβ paired Den LP token, eg.HONEY;Config configβ Configuration:address partnerβ Address of Den creator.
Fees feesβ Struct with Den fees:uint16 burnβ Burn fee (see ).uint16 bondβ Fee on wrappingTOKENintobrTOKEN.uint16 debondβ Fee on unwrappingbrTOKENintoTOKEN.uint16 buyβ Fee on buyingbrTOKENwithTOKEN.βuint16 sellβ Fee on sellingbrTOKENforTOKEN.uint16 partnerβ Den creator fee.For all the fees:
1000 = 10%, 100 = 1%, etc.
uint256 createdβ Timestamp of Den creation.address lpRewardsTokenβ Address of LP rewards token.address lpStakingPoolβ Address of Staked Den LP token.
Functions
/**
* Wraps TOKEN into brTOKEN at current ratio (always >= 1) minus fees.
* @param _token TOKEN address to wrap into brTOKEN.
* @param _amount Amount of TOKEN to wrap.
* @param _amountMintMin Minimal brTOKEN amount to receive.
*/
function bond(address _token, uint256 _amount, uint256 _amountMintMin)
/**
* Unwraps brTOKEN into TOKEN at current ratio (always >= 1) minus fees.
* @dev Set unnamed params as empty arrays.
* @param _token Amount of brTOKEN to unwrap into TOKEN.
*/
function debond(uint256 _amount, address[] memory, uint8[] memory)
/**
* Adds liquidity to the Den LP while disabling fees.
* @param idxTokens Amount of brTOKEN.
* @param daiTokens Amount of PAIRED_LP_TOKEN.
* @param slippage Amount of slippage (10 == 1%).
* @param deadline Max timestamp to execute the tx.
*/
function addLiquidityV2(uint256 idxTokens, uint256 daiTokens, uint256 slippage, uint256 deadline) returns (uint256);
/**
* Removes liquidity from the Den LP while disabling fees.
* @param _lpTokens Amount of Den LP tokens.
* @param _minTokens Minimal amount of brTOKEN to receive.
* @param _minDAI Minimal amount of PAIRED_LP_TOKEN to receive.
* @param _deadline Max timestamp to execute the tx.
*/
function removeLiquidityV2(uint256 _lpTokens, uint256 _minTokens, uint256 _minDAI, uint256 _deadline)
/**
* Take flashloan of TOKEN backing the brTOKEN, paying 10 HONEY fee.
* @dev HONEY needs to be approved for spending by Den contract.
* @param _recipient Address of flashloan receipient.
* @param _token Address of the TOKEN to flashloan.
* @param _amount Amount of the TOKEN to flashloan.
* @param _data Data to send to the receipient in the callback.
*/
function flash(address _recipient, address _token, uint256 _amount, bytes calldata _data)Variables
address indexFundβ Address of the brTOKEN.address poolRewardsβ Address of TokenRewards contract.address stakeUserRestrictionβ Boolean if there are staking restrictions.address stakingTokenβ Address of the Den LP token.
Functions
/**
* Stakes Den LP tokens for given _user.
* @param _user Address that will receive Staked Den LP tokens.
* @param _amount Amount of Den LP tokens to stake.
*/
function stake(address _user, uint256 _amount)
/**
* Unstakes Den LP tokens.
* @param _amount Amount of Staked Den LP tokens to unstake.
*/
function unstake(uint256 _amount)Functions
/**
* Claims rewards accumualted with Staked Den LP tokens.
* @param _wallet Address for which to distribute rewards.
*/
function claimReward(address _wallet)
/**
* Returns unpaid rewards for the user.
* @param _token Address of the rewards token to check.
* @param _wallet Address of the user to check.
* @return Amount of reward tokens to claim.
*/
function getUnpaid(address _token, address _wallet) view returns (uint256)Last updated