LogoLogo
  • About Bancor Network
    • Bancor V3
    • Bancor Basics
      • About Bancor
      • What Can I Do With Bancor?
      • Liquidity Pools
      • Single-Side Liquidity
      • Why Use Bancor?
      • Resources
    • Resources for DAOs
      • Token Whitelisting Requirements
      • Liquidity Mining
        • Auto Compounding Rewards
          • How Auto Compounding Rewards work
          • How to Create an Auto Compounding Rewards Program
          • Custom Rewards Programs
        • Dual Liquidity Mining
        • Standard (External) Rewards
    • Security & Audits
      • Multisig Rights
      • Oracles
      • DAO MSIG Intervention Policy
  • Contracts & Functions
    • Contracts
    • Write Functions
      • Transaction Prerequisites
        • approve() / allowance()
      • Trading
        • tradeBySourceAmount()
        • tradeByTargetAmount()
        • Trading Troubleshooting
      • Adding Liquidity
        • deposit()
        • depositFor()
        • Deposit Troubleshooting
        • depositAndJoin()
      • Removing Liquidity
        • Initiating Cooldown
          • initWithdrawal()
        • withdraw()
        • cancelWithdrawal()
        • Withdraw Troubleshooting
      • Flashloan
        • flashLoan()
        • Flashloan Troubleshooting
      • Migrating Liquidity to v3
        • Migrating Bancor positions to v3
          • migratePositions()
          • migratePoolTokens()
          • Errors and Troubleshooting
        • Migrating from Uniswap v2
          • migrateUniswapV2Position()
        • Migrating from Sushiswap
          • migrateSushiSwapV1Position()
      • Rewards
        • join()
        • stakeRewards()
        • autoProcessRewards()
        • claimRewards()
        • leave()
      • Surplus migration
        • withdrawPOL()
      • Network Fees
        • burnNetworkFees()
    • Read Functions
      • Rewards
        • Standard rewards
          • Identify if a program exists
            • Auto Compounding
            • Standard Rewards
          • programIds()
          • programs()
          • providerProgramIds()
          • pendingRewards()
          • latestProgramId()
          • isProgramActive()
          • isProgramEnabled()
          • providerStake()
          • programStake()
          • providerRewards()
        • Auto compounding rewards
          • bnToken balance
          • isProgramActive()
          • isProgramPaused()
          • pools()
          • program()
          • programs()
      • Liquidity Pool Details
        • liquidityPools()
        • isPoolValid()
        • isPoolStable()
        • tradingLiquidity()
        • depositingEnabled()
        • poolFundingLimit()
      • Trades
        • tradeOutputBySourceAmount()
        • tradeInputByTargetAmount()
        • tradingEnabled()
        • tradingFeePMM()
      • Withdrawals
        • isReadyForWithdrawal()
        • withdrawalRequest()
        • withdrawalAmounts()
        • withdrawalRequestIds()
        • withdrawalRequestCount()
        • lockDuration()
      • Pool Token Information
        • poolToken()
        • collectionByPool()
        • poolTokenToUnderlying()
        • underlyingToPoolToken()
      • Vortex
        • pendingNetworkFeeAmount()
        • minNetworkFeeBurn()
      • Surplus whitelist
        • protectedTokenWhitelist()
    • Data & Events
      • General Data
        • contextId
      • Trading Data
        • event TokensTraded()
      • Liquidity Data
        • TotalLiquidityUpdated()
        • TradingLiquidityUpdated()
        • TokensDeposited()
        • TokensWithdrawn()
        • WithdrawalInitiated()
        • WithdrawalCancelled()
        • WithdrawalCompleted()
        • LockDurationUpdated()
        • Cross AMM Migration Data
          • UniswapV2PositionMigrated()
          • SushiswapV1PositionMigrated()
      • Flashloan Data
        • FlashLoanCompleted()
        • FlashLoanFeePPMUpdated()
      • Rewards
        • Staking and Unstaking
          • Event ProviderJoined()
          • Event ProviderLeft()
        • Claiming and Restaking Rewards
          • Event RewardsClaimed()
          • Event RewardsStaked()
  • Developer Guides
    • Bancor Vortex Burner
    • Bancor Etherscan Guide
      • Etherscan Basics
      • Deposit
      • Deposit and Join
      • Rewards: Joining Standard Rewards
      • Rewards: Stake & Claim
      • Rewards: Leaving the Rewards Contract
      • Withdrawing Tokens
        • Initiating the Withdrawal
        • Completing the Withdrawal
      • Migrating V2.1 Positions
      • Rewards: Auto Compounding Rewards Distribution
    • REST API
      • API Reference
      • DLT Identifier
Powered by GitBook
On this page
  • VortexBurner Contract Details
  • burnReward | Determine the Value of Initiating a Burn
  • burn | Trigger the vBNT Burning Mechanism
  • A suggested procedure is:
  • totalBurnedAmount | Determine the Total vBNT Burned To-Date
  1. Developer Guides

Bancor Vortex Burner

How to trigger a vBNT burn via the VortexBurner contract

PreviousEvent RewardsStaked()NextBancor Etherscan Guide

Last updated 1 year ago

TLDR;

  • A portion of swap fees from across the network is accumulated in a dedicated wallet. For simplicity, we will call this wallet the "Network Fee Wallet".

  • The Network Fee Wallet () grants permission to withdraw its tokens to a second contract, the VortexBurner.

  • The VortexBurner contract () is triggered externally via its burn function, which withdraws the specified tokens from the Network Fee Wallet.

  • When activated, the contract performs two actions:

    • 10% (100,000 ppm) of the available fees or 100 BNT (whichever is lower), is distributed to the address that initiates the relevant transaction, as a reward for their service.

    • The remaining funds are swapped via the network’s liquidity pools for vBNT, and the vBNT is burned.

  • The rewards to incentivise burning are adjustable by the DAO.

VortexBurner Contract Details

The BancorDAO has previously approved , and its , which introduce a value capture mechanism of the protocol, and which is put to use in management of the BNT token supply. The VortexBurner contract is the realization of this policy. The following notes detail the discrete contract functions and their purpose.

View the VortexBurner contract on .

burnReward | Determine the Value of Initiating a Burn

The burnReward property returns the amount of BNT that the user will receive for calling the burn function (see below). The reward is offered to motivate regular token burns by sophisticated market algorithms. The burnReward property returns the current incentives as two different numbers:

  • Fractional amount. For example, 10% (or 100,000 ppm). This is the proportion of the total value being burned that is returned to the address initiating the burn function, which is paid in BNT.

  • Absolute amount. For example, 100 BNT. This number is the highest amount payable; if the fractional amount exceeds the absolute amount, the payment defaults to the absolute amount.

The entity initiating a vBNT burn can query the contract prior to committing to a burn. It is important to realize that the BNT disbursement is funded from the held tokens, via a swap on its cognate liquidity pool. Therefore, slippage will impact the specific profits; however, this is likely to be a minor consideration.

burn | Trigger the vBNT Burning Mechanism

The burn function is called for specific tokens; it is the responsibility of the entity calling the burn function to determine its profitability. Following its call, the tokens will be swapped in two hops for vBNT, and the vBNT will be burned. Importantly, part of the BNT obtained during the first hop is diverted to the address that initiated the burn function (see above). The burn function requires the token corresponding addresses to be passed, either as a single string, or a list. Since ETH has no address, one has been created for it on our system (0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE).

  • Single token case (ETH): 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE

  • Multi token case (ETH and LINK): 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE, 0x514910771af9ca656af840dff83e8264ecf986ca

A suggested procedure is:

  1. balanceOf: Read the available token balances and determine their value.

  2. burnReward: Query the current reward settings.

  3. Calculate the expected return: Use the information above to determine the profitability of the transaction.

  4. burn: If the total value of the disbursements is higher than the gas cost of execution, perform it.

Consider the following example. Alice calls balanceOf, which returns a value of 10,000 DAI. The value of the DAI holdings is $10,000 according to Etherscan (or getReturn function on Bancor). Then she calls burnReward, which returns 10% (100,000 ppm) and a 100 BNT cap. The price of BNT is $7.00. To calculate the returns, Alice performs the following calculation:

  • $10,000 / 1,000,000 × 100,000 ppm = $1000

  • $1000 / $7.00 = 140.28 BNT

Since 140.28 BNT is higher than the 100 BNT cap, the reward amount is reduced to 100 BNT ($700). This is the amount Alice will receive for calling the burn method.

If the gas cost is < $700, then Alice makes an immediate profit from triggering the burn. The held DAI is swapped on the pool for 1428.2 BNT, of which 100 BNT is returned to Alice. The remaining 1328.2 BNT is then swapped for 2368.4 vBNT, and the vBNT is burned.

totalBurnedAmount | Determine the Total vBNT Burned To-Date

The totalBurnedAmount function returns the total amount of vBNT burned, ever. This data will help the BancorDAO to evaluate the effects of the Bancor Vortex over time. The effect is slow, but persistent. The BIP9 addendum introduced a schedule, whereby the vBNT burn rate starts at a modest 5%, and is slowly ramped to 15% over 18 months, commensurate with target APYs for liquidity providers on the network. The totalBurnedAmount function provides a readily available source of data that can be used in future token supply assessments, and should inform changes to the burn rate, as required to maintain a sustainable monetary policy.

view on Etherscan
view on Etherscan
BIP9
addendum
Etherscan