🌳
🌳
🌳
🌳
Tapio
User Docs
Search
K

Contract Addresses

Goerli Testnet Address

constant: 0x07e70721C1737a9D410bcd038BA7e82e8BC19e2a
rETHRate: 0xf2dD62922B5f0cb2a72dAeda711018d6F56EEb17
tapETH: 0x0C68f684324551b4B6Ff6DFc6314655f8e7d761a
WTapETH: 0x31CcC35cbed56B6e8f01E8207B1302f009ABC27c
stETHSwap: 0x79106c599A6A320DFB0686513631a92fF8343b44
rETHSwap: 0x9719443a2BBb5AB61744C1B3C71C2E3527101a91
applicationStableAsset: 0x44A54f1cc211cfCFfE8b83C22f44728F3Fa5004C
wETHAddress: '0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6'
stETHAddress: '0x1643E812aE58766192Cf7D2Cf9567dF2C37e9B7F'
rETHAddress: '0x178e141a0e3b34152f73ff610437a7bf9b83267a'

Smart Contracts Overview

The main contracts of Tapio V1.5 are the following:
TapEth : contract of rebase token tapETH
WtapETH: contract of wrapped tapETH
StableAsset: contract of stableswap pool
StableAssetApplication: user contract interface for different stableSwap pools
Tapio Smart contracts UML diagram.

Contract TapETH

The contract TapETH is upgradable and uses the interface IERC20.

Write Methods

  • proposeGovernance(address _governance)
    This function allows the current governance to set a new governance address.
  • acceptGovernance(address _governance)
    This function allows the pending governance to be activated: to update the governance to the pending governance.
  • addPool(address _pool)
    This function can be executed only by the governance to whitelist a stableSwap pool.
  • removePool(address _pool)
    This function can be executed only by the governance to remove a whitelisted stableSwap pool.
  • transferShares(address _recipient, uint256 _sharesAmount)
    This function allows the caller to transfer _sharesAmount shares of tapETH from his address to _recipient.
  • transferSharesFrom(address _sender, address _recipient, uint256 _sharesAmount)
  • This function allows the spender to transfer _sharesAmount shares of tapETH from to _sender to _recipient.
  • mintShares(address _account, uint256 _tokenAmount)
  • This function can be executed by a whitelisted stableSwap pool to mint _tokenAmount of tapETH for _account.
  • burnShares(uint256 _tokenAmount)
  • This function allows the caller to burn _tokenAmount of tapETH.
  • burnSharesFrom(address _account, uint256 _tokenAmount)
  • This function allows the spender to burn _tokenAmount of tapETH from the addresss _account.

View Methods

  • getTotalPooledEther()
    This function returns the total supply of tapETH (uint256).
  • getTotalShares()
    This function returns the total shares of tapETH (uint256).
  • getSharesByPooledEth(uint256_tapETHAmount)
  • This function returns the shares of tapETH (uint256) corresponding to _tapETHAmount of tapETH.
  • getPooledEthByShares(uint256 _sharesAmount)
  • This function returns the amount of tapETH (uint256) corresponding to `sharesAmount' shares of tapETH.
  • setTotalSupply(uint256 _amount)
  • This function can be only called by a whitelist stableSwap pool contract to increase the total supply of tapETH by _amount.

Contract WTapETH

The contract WTapETH is upgradable and inherits from the contract ERC20Permit.

Write Methods

  • wrap(uint256 _tapETHAmount)
  • This function allows the user to wrap _ tapETHAmount of tapETH that consisting in transferring _tapETHAmount of tapETH to the smart contract WTapETH and minting the corresponding shares amount in wtapETH.
  • unwrap(uint256 _wtapETHAmount)
  • This function allows the user to unwrap _wtapETHAmount of wtapETH that consisting in burning wtapETHAmount of wtapETH and sending from the smart contract WTapETH to the caller the corresponding amount of tapETH.

View Methodes

  • getWtapETHByTapETH(uint256 _tapETHAmount)
  • This function returns the amount of wtapETH that corresponds to _tapETHAmount of tapETH.
  • getTapETHByWtapETH(uint256 _wtapETHAmount)
  • This function returns the amount of tapETH that corresponds to _wtapETHAmount of wtapETH.
  • tapETHPerToken()
  • This function returns the amount of tapETH that corresponds to 1 wtapETH.
  • tokensPerTapETH()
  • This function returns the amount of wtapETH that corresponds to 1 tapETH.

Contract StableAsset

The contract StableAsset is upgradable and inherits from the contract ReentrancyGuard.

Write Methodes

  • mint(uint256[] calldata _amounts, uint256 _minMintAmount)
  • This function allows the user to provide liquidity in the different tokens of the pool to mint at least _wtapETHAmount of tapETH. The Logic of the function consists of :
  1. 1.
    update token balances
  2. 2.
    calculate the new D value
  3. 3.
    calculate delta D = new D - old D
  4. 4.
    calculate mintAmount = delta D - feeAmount = delta D * ( 1- mintFee)
  5. 5.
    revert if mintAmount < _minMintAmount
  6. 6.
    mint mintAmount of tapETH for the caller
  7. 7.
    increase the total supply of tapETH by feeAmount
  • swap(uint256 _i, uint256 _j, uint256 _dx, uint256 _minDy)
  • This function allows the user to swap _dx amount of token index i to at least _minDy amount of token index j. The Logic of the function consists of:
  1. 1.
    update balance of token index i .
  2. 2.
    calculate the new balance of token index j: new y
  3. 3.
    calculate delta y = new y - old y
  4. 4.
    calculate outputAmount = delta y - feeAmount = delta y * ( 1- swapFee)
  5. 5.
    revert if outputAmount < _minDy
  6. 6.
    send outputAmount of token index j to the caller
  7. 7.
    increase the total supply of tapETH by feeAmount
  • redeemProportion(uint256 _amount, uint256[] calldata _minRedeemAmounts)
  • This function allows the user to redeem _amount of tapETH in order to receive at least _minRedeemAmounts[i] of each token index i. The Logic of the function consists of:
  1. 1.
    calculate redeemAmount = _amount - feeAmount = amount * ( 1 - redeemFee).
  2. 2.
    for each token i :
    • calculate tokenAmount = balances[i] * redeemAmount / D
    • revert if tokenAmount < minRedeemAmounts[i]
    • send tokenAmount of token index i to the caller
  3. 3.
    update D = D - _amount
  4. 4.
    burn _amount of tapETH from the caller
  5. 5.
    increase the totalSupply of tapETH by feeAmount
  • redeemSingle(uint256 _amount, uint256 _i, uint256 _minRedeemAmount)
  • This function allows the user to redeem _amount of tapETH in order to receive at least _minRedeemAmount of token index i. The Logic of the function consists of:
  1. 1.
    calculate redeemAmount = _amount - feeAmount = amount * ( 1 - redeemFee).
  2. 2.
    calculate the new amount of token i (new y ) for D = D - redeemAmount
  3. 3.
    calculate delta y = new y - old y
  4. 4.
    revert if delta y < _minRedeemAmount
  5. 5.
    send delta y of token index i to the caller
  6. 6.
    increase the total supply of tapETH by feeAmount
  • redeemMulti(uint256[] calldata _amounts, uint256 _maxRedeemAmount)
  • This function allows the user to redeem at most _maxRedeemAmount of tapETH to receive _amouns[i] of each token index i. The Logic of the function consists of:
  1. 1.
    update balance of each token index i .
  2. 2.
    calculate the new D
  3. 3.
    calculate delta D = new D - old D
  4. 4.
    calculate redeemAmount = delta D + feeAmount = delta D * ( 1 + redeemFee)
  5. 5.
    revert if redeemAmount > _maxRedeemAmount
  6. 6.
    for each token index i, send _amounts[i] to the caller
  7. 7.
    increase the total supply of tapETH by feeAmount
Functions to be executed only by the governance:
  • proposeGovernance(address _governance)
    This function allows the current governance to set a new governance address.
  • acceptGovernance(address _governance)
    This function allows the pending governance to be activated: to update the governance to the pending governance.
  • setMintFee(uint256 _mintFee)
  • This function allows the governance to update the mintFee.
  • setSwapFee(uint256 _swapFee)
  • This function allows the governance to update the swapFee.
  • setRedeemFee(uint256 _redeemFee)
  • This function allows the governance to update the redeemFee.
  • pause()
  • This function allows the governance to pause the mint, swap and redeem function.
  • unpause()
  • This function allows the governance to unpause the mint, swap and redeem function.
  • setAdmin(address _account, bool _allowed)
  • This function allows the governance to add an admin if _allowed is true or to remove an admin if _allowed is false.
  • updateA(uint256 _futureA, uint256 _futureABlock)
  • This function allows the governance to update the value of A to _futureA from the block _futureABlock.

Write Methodes

  • getA()
  • This function returns the current value of A.
  • getMintAmount(uint256[] calldata _amounts)
  • This function returns (uint256 mintAmount, uint256 fee) where mintAmount is the amount of tapETH to mint for the user, and fee is the mint fee.
  • getSwapAmount(uint256 _i, uint256 _j, uint256 _dx)
  • This function returns (uint256 amount, uint256 fee) where amount is the output amount in token of index j to send to the user, and fee is the swap fee.
  • getRedeemProportionAmount( uint256 _amount)
  • This function returns (uint256[] amounts, uint256 fee) where amounts[i] is the output amount in token of index i to send to the user, and fee is the redeem fee.
  • getRedeemSingleAmount(uint256 _amount, uint256 _i)
  • This function returns (uint256 amount, uint256 fee) where amount is the output amount in token of index i to send to the user, and fee is the redeem fee.
  • getRedeemMultiAmount(uint256[] calldata _amounts)
  • This function returns (uint256 amount, uint256 fee) where amount is the amount of tapETH to redeem and fee is the redeem fee.