Note: In April 2022, Clipper's architecture was upgraded to a novel Formula Market Maker (FMM) model, which allows for lower gas costs, broader price optimization, and smoother liquidity deposits/withdrawals. As a result, Clipper's liquidity pools are no longer explicitly capped. This article will remain in place for the sake of transparency, but note that the most accurate and up-to-date explanation of how Clipper works can now be found here.
Yesterday Clipper opened liquidity to the community for the first time, with $3 million available across five assets (wBTC, ETH, USDC, USDT, DAI) subject to a USD$10,000 cap per address.
Now, the results are in! The entire $3 million filled up with a total of 389 successful deposits and an average deposit size of $7,700 per address. Additionally, users who weren't able to participate could log their presence by minting an exclusive POAP (essentially, an NFT that proves they participated in the event).
Prior to the event, there was overwhelming interest in contributing over $150+ million in liquidity. While it was thrilling to see so much community interest in Clipper’s inaugural CLP, Clipper maintains capped liquidity pools in order to keep fees low and LP returns high, so Clipper cannot arbitrarily make room for all of the stated interest.
Clipper also ran into some problems. We make decisions, learn from our mistakes, and get better. When we don’t meet expectations, it’s crucial that we figure out a way to make things right.
We believe in transparency and sharing lessons with future developers, so here are some of the key problems we identified, and how we plan to fix them going forward:
Incorrectly summed contributions in user interface
Clipper’s smart contracts are rigorously tested with 100% test coverage and audited by third parties. However, we don't apply the same rigor to front-end code when it can't result in loss of funds. This is a deliberate tradeoff, because it allows us to publish code faster and respond to real user feedback (agile development). However, it is clear that during an event like the CLP, which relied on new code and filled up faster than we expected, there is no time to respond to user feedback and correct front-end issues that may arise.
Unfortunately, the CLP interface included a bug that incorrectly summed contributions. As a result, users had limited guidance as to which assets were or were not still open for deposits. When certain assets were blocked, users had no way of understanding why. As a result, participants either assumed the entire CLP was closed or had to guess which assets were still available and get lucky (the last to fill up was wBTC). This frustrated many users, who assumed that they had been preempted by insiders or gas wars. However, that was not the case; in fact, wBTC didn't close for a full 30 minutes and the bug even confused members of the Shipyard team who missed the CLP along with some of Clipper’s community members.
We've corrected this bug for future CLPs and are introducing a new testing process for non-critical code used in other similar events.
A POAP was offered to all users who attempted to participate in the CLP as a sign of appreciation, even if they weren’t able to make a deposit. However, the site prompted the POAP before the deposit page, and during the race to deposit liquidity many participants skipped this page. To address this, we decided to publish the POAP link in the Discord. Over 6,000 POAPs were minted (the link was distributed externally, and perhaps individuals minted multiple). When considering Clipper’s governance, it’s important that users are in charge; to that end, it’s best to consider the whole picture — e.g. the order the POAPs were created may just be a small part of many considerations. Additionally, we'll be sure to offer a POAP after the contribution page in future CLPs.
We hid the code until the last minute to make it hard for developers to write bots to circumvent the $10K per person cap before everyone else had a chance to contribute to the CLP. This was mostly successful. However, at least one clever developer guessed the contract before it was published, and scripted a set of wallets that made $180,000 in deposits. This violated the terms of the CLP, so while their capital is not at risk (the pool is noncustodial), wherever we do have discretion we will only consider their first deposit. That being said, this roguish developer has earned our grudging respect and we’re inviting them to DM us for a whitehat relationship! This experience reinforced for us that “security through obscurity” is often not security at all.
About 80 transactions failed because the pool caps for a given asset were already reached, resulting in about 2.5 ETH of loss to gas (avg of 0.03 ETH per transaction). We plan on reimbursing all of these users for their lost gas.
At the end of the day, Clipper's first Community Liquidity Program was a success. Clipper has the liquidity it needs to provide best prices to retail traders, with the help of several hundred new LPs with deposits in the mainnet Clipper Pool. While not everyone was able to contribute to this CLP, no one had an upper hand — including the Shipyard team. The CLP is just one way to ride with Clipper, and you can expect many more exciting opportunities for the community. If you weren't able to contribute this time, we hope you'll continue to support Clipper and contribute to the next CLP on L2 - it’s only a few weeks away!