So to start with, here’s some recap of Bancor fundamentals and how the implosion happened. Bancor is a Dex. Let’s separate this product from the IL insurance product so we can break this into attackable chunks. The unique thing about their Dex is that when you become an LP you don’t need to deposit asset pairs. Instead you can just deposit the assets you wish to hold. So the natural question then is when someone buys your LPd asset what are they selling you? You have to be paired against something. There’s two ways they could have solved this, both are a hub and spoke model:
Everything is paired against a hard asset like ETH. If there is an imbalance between ETH and pairable liquidity, then the imbalanced liquidity will sit idle in some form of deposit pool. This is potentially less capital-efficient due to the idle liquidity.
Everything is paired against a soft asset you have control over and that you mint for each deposit. That token is BNT and is what they did.
In a world where there wasn’t an ICO there could be a BNT token that no one really has any reason to buy or sell directly or even which can’t be bought or sold at all. It doesn’t even need to be an ERC-20. It’s just an intermediate step between all assets with a market cap = TVL and a price that’s sort of like being an LP of everything on the exchange. It’s just a unifying hub with paired ratios so that there’s something for a bonding curve to work against.
Each time someone trades a token, they leave a little of the asset they are selling behind in the Dex. This is just like Uniswap, the coins left behind by the trade are claimable using the LP token. However, due to this BNT indirection there is an implicit value accrual mechanism to BNT. For illustration imagine there were only 2 pools: ETH and USDC. Both are paired against BNT. So we make up some BNT price per token (it’s arbitrary) and that sets a BNT ratio for ETH and USDC. For simplicity I’m going with $1. So if ETH is $1000 at origination and there’s 1 ETH of liquidity and the assets happened to be balanced then we would have 1 ETH, 1000 USDC, and 2000 BNT in the system at origination. Humble beginnings or something.
Now add some crab market. Each trade leaves a little liquidity behind. After some time and accrued fees we have 2 ETH, 2000 USDC, but still 2000 BNT. BNT is only created when liquidity is deposited, not traded, and no one has a reason yet to buy or sell BNT so no BNT ever needs to be left behind. There isn’t even a BNT LP at this point. Despite there being no explicit mechanism like Sushiswap where there’s a platform fee, the BNT value has increased just because the BNT/ETH and BNT/USDC ratio has increased. BNT is now ‘worth’ $2. This is true even though no one ever bought or sold BNT. Here’s where you can get greedy and where they got in trouble. The DAO can mint BNT and BNT can be sold.
Who is paying the cost if they do? LPs. Again, every depositer of liquidity in their single-sided system is actually paired against BNT. Your profit as an LP is the ETH in the pool. If 1 bnETH has claim power on 2 ETH then you’ve profited. When BNT is sold to the pool is extracts ETH from the pool and your claim power is reduced. At best this is taxation. At worst, it’s straight up theft. Last year, in their brilliance, the DAO decided liquidity mining was the future and they could mint and give away BNT to incentivize deposits. This year, a bunch of that BNT was collected and sold (a lot by 3AC). That wiped out the gains of the LPs entirely and then kept going. Now your 1 bnETH can claim like .6 ETH. Recap over, welcome to modern day. This is actually the source of their problem. They minted more BNT than their ecosystem profit by a large margin and then it got market dumped and wrecked LPs. This is ultimately the DAOs own fault for mismanaging BNT issuance. They serve as the lender of last resort, they mismanaged the system, and they wrecked themselves. I don’t feel bad for BNT holders, I feel really bad for bnToken holders.
Since we’re strictly talking about the Dex at this point, what can be done to improve the situation on the Dex side?
The easiest way to mitigate IL is to not incur it in the first place. Curve v2 pools and Kyber’s DMM both dynamically adjust the depth chart of their AMM in response to volatility. Bancor can and should do something similar. I know this will be a surprise to some of you ‘buy high sell low’ guys but the time to sell an asset is not when it’s violently ripping and the time to be buy an asset is not when it’s violently crashing. If you remove liquidity during times of volatility you simply incur less IL.
Deploy idle liquidity productively. There’s two ways to get capital efficiency on the Dex side. The first is what Uniswap has done with Uniswap v3. You compress the depth chart so more of the liquidity is active near the strike price. The second is to put the idle liquidity to use. Balancer already does this a bit and Bancor has plans to with their “superfluid” liquidity. I believe it’s on Tokemak’s roadmap too. It’s a fairly obvious idea really. If the price is only going to move ±50% in a day and you have a x*y=k bonding curve then half the assets aren’t needed in the Dex on any given day. Put them in Compound or something and get some yield on them. Technically there’s nothing stopping you from combining these options.
Make the system more straightforward and configurable. Rather than giving 50% of the pool profit to the BNT holder who just happens to be the exchange, create an explicit and configurable exchange fee per pool.
This one is going to be more contentious and radical. If 2 is possible then we can actually revisit the initial assumption of the Dex design. BNT was only needed because otherwise the capital would sit idle. If there’s a way of productively employing liquidity that would otherwise be idle then you can just pair everything against ETH like Uniswap v2, rip BNT entirely out of the Dex and use it as a fee capture and governance token like Sushiswap. If you want to address the asset imbalance issue create a market solution where a higher percent of the trading fees go to the lower supply asset. This will restore trust now that people have been burned by BNT.
Onto the topic of IL insurance. I talked about this like last August here. Maximizing IL efficiency is always going to require active liquidity management of some form. This was a core idea to Kyber’s original whitepaper actually. You’d give your liquidity to some active manager and they would collect a share of the revenue for minimizing IL for you. This is the basic idea of more recent approaches like Impermax too where you provide liquidity as a ‘lender’ and a borrower serves as the liquidity manager and maximizes the fees and minimizes the IL. I call these approaches indirect LP. The task of active liquidity management to minimize IL is separable from the task of how the exchange works. Tokemak is a good example of someone just solving the active liquidity management role and delegating the exchange work to an exchange. If IL insurance is a product whomever can minimize IL and maximize fees is going to have a competitive edge as a product. If Bancor would like to continue offering an IL insurance product here are the changes I’d suggest.
Add a parameter for the reflexivity of liquidity depth to volatility in addition to what Kyber and Curve do. Set it too high and you miss out on too few fees. Set it too low and you incur too much IL. Somewhere in between is the goldilocks zone the DAO can find on a per pool basis.
It’s a simple fact that different assets are going to experience different amounts of IL. An intelligent IL insurance product should account for that fact by having an adjustable IL insurance fee per asset.
Build an IL insurance reserve like Maker’s surplus buffer. Make the dashboards clear and create a plan as a DAO for how that should scale with TVL.
They can issue a separate bond token like GRAIN as a backstop for insurance for each asset that is underwater. So you’d have bilETH tokens for people withdrawing ETH. They can have a market for each bil token and direct trading revenues to bilAsset buybacks. I wrote about insurance as bonds backed by future revenue here.
Potentially you can mutate the IL insurance product to be exchange agnostic like Tokemak. All you’re configuring here is your depth chart. It’s better if it’s done without a keeper but maybe the ecosystem would be better off if Bancor was just an IL insurance product running on top of Uniswap for less liquidity fragmentation.
Some unrelated summary thoughts:
Everything Bancor has made is unnecessarily complex and not configurable enough. I speculate this is because of fundraising reasons (ICO) and because they didn’t want BNT to be labeled a security.
The revenue of the exchange is simply small compared to the size of the loss. The implosion situation can be fixed but the system will need an overhaul and it will take years. I’m not taking out my liquidity and eating the loss yet but this was self-inflicted by the DAO.
A faster path to recovery for the exchange and LPs would be to restore trust and improve the tokenomics of BNT itself so that speculative purchasers do the work it would take the trading revenue years to accomplish.
I’m not bullish on the BNT token itself even though I like the Bancor team and platform generally and love the potential of a bnAsset for Defi. Single-sided LP tokens are fundamentally a good idea even if the implementation needs some adjustments.