Update to POL Migration and Conversion to ETH

Update to POL Migration and Conversion to ETH

Expected on Snapshot September 3, 2023


  • This is proposed as an amendment/replacement to this previous passed proposal
  • The challenge with the previous implementation is the complexity involved and risks when using a decentralized oracle (especially with long tail tokens). While possible, it seems a much simpler/cleaner/safer implementation is possible that will reduce:
    • Value leakage
    • Attack surface area
    • Complexity
  • The new method will, in brief, start with a price from CoinGecko, multiply it by 2 (starting price) and then reduce the price based on an exponential decay formula until a taker buys TKN with ETH.

Summary of Flow

This essentially creates a reverse auction where prices start above market price and gradually fall until TKN is purchased.

  • Create Carbon POL contract
  • Expose a public function to withdraw surplus tokens
    • If the pool has trading liquidity of 0 & vault balance is greater than staking balance, anyone can call a function to move surplus TKN from B3 to the Carbon POL contract
    • Callers get an incentive of 0.2% of the TKN to call the function
    • 99.8% of the TKN goes to Carbon POL contract
  • Determine the prices in ETH for each token
    • Get price from Coingecko
    • Multiply price by 2 to get initial sell price
    • Contract offers to sell token at initial sell price for ETH
      • For example, there are 100 TKN and oracle/CoinGecko price per TKN is 0.1 ETH.
      • Initial price set at 0.2 ETH per TKN
      • Any user can send 20 ETH to acquire the 100 TKN
      • The price of TKN drops as defined by an exponential decay formula with a 10 day half life.
      • Anyone can buy the TKN with ETH at any time.
      • These parameters can be adjusted by the DAO


  • There is no more min return as this is no longer traded on a DEX
    • This solves many of the risks noted above regarding oracle manipulation, slippage and some MEV attacks.
  • These TKN are for sale only onchain, there is no UI for this (as there is no mechanism to slowly and programmatically decrease prices in Carbon).
  • The contract will have a function to see the expected return price.
  • The takers are expected to be arb bots or traders interested in buying tokens at a discount.
  • As an additional layer of protection, this proposal sets a prerequisite that no tokens have their initial price set until the public open source arb bot supports this process and can be a taker.
    • Of course the bot can only be a taker if there is liquidity on integrated exchanges on Ethereum.


Update to POL migration and conversion to ETH method as detailed above with arb bot support as a prerequisite.


Take no action


I support this, the simpler the better


These portions of the proposal trouble me somewhat–we’ve already seen that one of Carbon’s greatest weaknesses is the lack of aggregator integration which makes it difficult for traders to find and fill open Carbon strategies. Now, the proposal for converting crucial POL thinks that the best course of action is to expose the possibility of buying those tokens to an audience that is deliberately reduced compared to the previous options?

Also, identifying “traders interested in buying tokens at a discount” seems counterintuitive with this method, and compared with regular sales via a DEX that include protections like, for example the MEV Blocker mempool on Metamask. If you’re starting at double the price and decaying towards 1x the price, that’s not a discount, so we can rule those people out. If TKN increases from the initial Coingecko price grab, it could potentially sell for more I guess, but still requires serendipitous timing (e.g. if TKN price has increased 25% in a day, but sell price has only decayed to 1.5x Coingecko price, there’s no “discount” to be had). And by the sounds of things, if TKN price goes down from the initial Coingecko price grab, the orders will go entirely unfilled because it just decays back towards 1x price.

So instead of just selling everything at 1x price via DEXes, with protections like MEV Blockers to prevent sandwich attacks, it seems like this proposal relies on selling to a reduced subset of the market, and needs TKN prices to increase in a 10 day window from price grab at a rate which eventually intersects with price decay, while being entirely unable to sell any TKN which drops below price grab figure during said 10 day window? It doesn’t really sound like a great reduction in value leakage or complexity versus selling on a DEX, and the attack surface area could also, as others have pointed out in Telegram, be reduced with features like MEV Blocker pool.

If it’s all unavailable via the UI, does this at least have the minor optics benefit of increasing Carbon TVL, or is the separate POL contract outside of those realms?

Just to make the reasoning here a bit more clear - the problem with the previous approach was that it relied on oracles which as everyone knows isn’t as safe/reliable.
There are some reliable oracles but for very few tokens and in terms of implementation we were looking at “one solution fits all” in order to reduce code complexity/potential security issues. So this option isn’t viable.

As to on-chain oracles that support other tokens such as uni v3, these unfortunately can be abused - the mechanism relies on have enough activity/slots/liquidity for a given token pair on a uni v3 pool which not tokens have and also the attack surface is much much wider.
Another option was to add another layer that includes a time based protection (trade slower) but the complexity is already at a point it’s worth the overhead/security risk.
Other on-chain oracle solutions suffer from similar issues.

The proposed solution reduces the attack surface significantly while ensuring a price close to the market price, so from a product and technical perspective, I believe the solution is sufficiently good.


Just to further clarify; does the price decay continue below the initial Coingecko price grab figure (i.e. 1x initial price), or does it halt there after 10 days (i.e. cannot be sold below initial Coingecko price)?

Because if it doesn’t have the capacity to go below, whilst TKNs certainly do, then that seems like a significantly greater value leakage (i.e. not capturing any value at all, because sales price is constantly above market price) than some slippage on DEXes. If this relies on people to constantly “refresh” the price after 10 days on any TKN that hasn’t trended upwards to intersect with price decay, then it seems unnecessarily complex. I hope that’s not the case, but tokens being effectively unsellable to the market unless the order is refreshed every 10 days would be no bueno.

The price decay means that it stats at X and decreases over time by the same ratio (infinitely).
Imagine a price that drops by 1% every day for example - it will never reach 0 but will eventually gets very close to it.
So the idea is that (on a stable market) it will reach the real market price roughly after 10 days and if there’s a spike before that happens, it might actually trade higher than the initial market price.
And if the market price drops, it means it will take longer to trade as it offers the trade above market price.


Okay, that’s certainly preferable to halting at the initial price grab and requiring refreshes, but still feel somewhat concerned that it opens us up to value loss (versus selling now on a DEX) if TKNs trend downwards. If we lived in more bullish times, that might be less of an issue, but we don’t currently, and imo it feels like value preservation/guaranteeing value should be the number one priority re: turning that POL into ETH, versus gambling on it increasing within a 10 day period, but creating the potential for loss if TKNs numba go down.

Is there a dashboard highlighting all the tokens and amounts to be converted into ETH?


I just put this together, it updates daily so its reasonably accurate.
A few usd prices arent available on Dune so they have empty USD values.


my understanding is that this can actually result in less value loss.

  1. remove the caller incentive. since anyone can interact with this function once they find the price attractive, there is no longer need to provide additional incentive.
  2. no slippage. trading on a dex is subject to slippage. otc style can support a zero slippage for the entire amount if a caller is interested.
  3. reduce/no abuse. asking caller to provide the oracle price and trading path is very abusing and allow multiple attack vectors. the approach of setting a “high” price and slowly dropping it allows the indicated price and market to find equilibrium with significant less attack vectors.
1 Like

foxsteven where can the DAO see the token quantities and the amount of ETH that has been received as the tokens are sold? Has the token sale already started?


You can see the TKN here.

The selling for ETH has not begun - final phases of testing are underway.