A risk assessment on Neutrino’s USDN ecosystem for veCRV holders and LPs
A risk assessment on Neutrino’s USDN ecosystem for Curve veCRV holders.
This research was spearheaded by @DefiIgnas.
Useful links
Abstract
Neutrino USD (USDN) is an algorithmic stablecoin pegged to the US dollar and backed by WAVES. The backing mechanism requires USD 1 in WAVES to mint 1 USDN. The Neutrino protocol is a set of smart contracts written in Ride, a smart contract language for the Waves blockchain.
This assessment aims to provide information on USDN’s peg risk.
A TL;DR for people looking for a quick summary:
Neutrino’s USDN is an algorithmic stablecoin minted by depositing WAVES.
In April 2022, a USDN depeg led to Vires Finance accruing USD 500M in bad debt.
Core teams behind Vires and Neutrino have placed several restrictions to restore the Backing Ratio to 100%, including limiting withdrawals.
The Curve DAO passed a vote to raise the A parameter for the USDN/3CRV pool from 100 to 250.
At the time of writing this article, USDN Backing Ratio remains at 10%, well below the target ratio of 100%.
Neutrino Ecosystem Overview
The Neutrino system consists of 4 tokens: WAVES, USDN, NSBT, and SURF. WAVES is the native coin of the Waves blockchain, used for paying transaction fees and as collateral for USDN.
USDN is an algorithmic stablecoin that aims to track the US dollar. Minting USDN requires locking 1$ of WAVES in the Neutrino protocol. WAVES tokens locked in the Neutrino protocol serve as collateral for USDN. The Neutrino protocol stakes the WAVES and partially distributes staking rewards as yield to USDN stakers.
Arbitrageurs use the WAVES collateral to buy USDN when it trades below peg, swap it for $1 of WAVES per USDN through the Neutrino protocol, and sell the WAVES to dollars. The mechanism differs from Luna and UST in that WAVES isn’t minted and burned to support the peg, but rather it is locked and unlocked in the Neutrino protocol: hence, WAVES cannot hyperinflate
USDN serves as collateral for other Neutrino stable assets, mainly on Waves Exchange and Vires Finance lending market.
NSBT (Neutrino System Base Token)
NSBT (Neutrino System Base Token) is a derivative token designed to ensure the stability of the reserves of the Neutrino smart contract through the mechanism of ‘reserve recapitalization’ (which includes USDN and other Neutrino stablecoins). To receive NSBT, users need to lock WAVES. There is a max supply of 2.83M NSBT. The closer the supply comes to the max supply, the more expensive it gets to buy NSBT through the smart contract.
Currently, 96% of the max supply has been minted, and the smart contract reports a price that is twice the NSBT market price. Therefore, it cannot function as a recapitalization tool.
NSBT can be staked for gNSBT. gNSBT holders have the monopoly on WAVES<>USDN swaps through Neutrino protocol, earn fees from other holders’ swaps, and can participate in governance.
SURF (Smart Utility Recapitalization Feature)
SURF (Smart Utility Recapitalization Feature) is a derivative token designed to improve NSBT’s USDN reserve recapitalization mechanism.
Users lock WAVES or USDN when USDN when BR (Backing Ratio) is <100%. SURF holders are locked until BR reaches 115%, which would mean buying USDN at a discount, betting that BR will be restored.
Like NSBT, staking SURF rewards users with gNSBT, allowing them to swap USDN<>WAVES based on the amount staked.
1st major depeg and liquidity crunch on Vires Finance
Vires Finance is a lending protocol on Waves blockchain. Among other tokens, it supports borrowing and lending USDC, USDT, BTC, ETH, and crucially, WAVES and USDN.
At the beginning of April 2022, a liquidity crunch on Vires Finance led to the creation of nearly half a billion dollars of bad debt and a subsequent depeg of USDN. Because Vires always priced USDN at $1, it allowed users to freely deploy a strategy that posed a serious risk to the sustainability of the protocol. As the existence of that strategy, and the associated risks, were publicly disclosed on Twitter, it led lenders to suddenly withdraw their liquidity. The strategy can be summed up as follows:
Issue USDC/USDT debt using USDN as collateral on Vires.
Transfer borrowed USDC/USDT to Binance, buy WAVES and increase its price.
Withdraw WAVES to mint more USDN.
Repeat.
This strategy would allow building a leveraged position on WAVES via USDN as collateral; the corollary risk at that point, however, was that a sudden drop in WAVES price would now threaten both the USDN peg and Vires Finance.
This was all possible due to Vires Finance’s use of a hard-pegged 1$ price for USDN and a collateral factor of 90%. The whale(s) that took part in the scheme could cash out a large part of their newly minted USDN directly with no risk of liquidation, as long as people kept depositing USDC and USDT.
At the end of March, a Twitter user (0xHamz) publicly revealed the existence of this strategy while accusing the WAVES teams of engineering it to manipulate the WAVES price. Note that these allegations of involvement of the WAVES team remain unconfirmed to this day and have been denied by the WAVES team.
Following these allegations, some lenders withdrew all of their liquidity from the USDC and USDT markets. Yet, as the following graphs show, borrowers were still able to take out loans for over 300M in USDC, and USDT before lenders stopped providing capital.
Just a day later, after Vires Finance TVL reached the peak of $1.26 billion, USDN started to lose its dollar peg.
The USDN fell to as low as $0.78 on April 5th at the same time as WAVES price dropped from $54.49 to $34.79 during the same 4-day period.
As USDN and WAVES were heavily used as collateral on Vires Finance, the lenders ended up with more than USD 500 million in bad debt, unable to withdraw their collateral. USDN was hard-coded to 1 USD, which is why no liquidations happened. So users could buy cheap USDN on the market, deposit USDN as collateral at 1 USD and borrow other stablecoins. Then repeat the loop.
It wasn’t the last time USDN lost the peg. USDN dropped to $0.82 on May 12, $0.93 on June 15, and $0.94 on August 26. We can see the different depegs events on Nomics:
Vires Finance plans to restore the peg
Following the liquidity crunch, the core team behind Vires and Neutrino took the following steps:
Limits borrow interest rate on Vires to 40%. This would buy debtors some time to pay back bad debt.
Set daily withdrawal limits for USDC and USDT on Vires to 1000 USDT and 1000 USDC per 24h per address.
Take control over the six accounts that caused bad debt and aggregate their balances into one account managed by Waves CEO Sasha Ivanov. Sasha would also be responsible for liquidation in an orderly manner. This measure, VIP-013, was passed through a community vote.
A campaign was started to ‘Bring USDN Home.’ This campaign encouraged all Neutrino (USDN) holders to return their USDN liquidity to Waves. With no heads up or community vote, transfers of USDN from Waves to Ethereum were disabled. The given reasons were:
to stop the buying USDN on Waves and selling into the Curve pool, and
to keep liquidity on Waves, prevent imbalance on the Curve pool, and make arbitrage on Waves more sustainable.
This temporary measure has now existed for over three months. At the moment of writing, the price of USDN on Waves Exchange is 94 USDT-cents, whereas the price in the Curve pool is ~97 USDT-cents for 1 USDN swap. Supplying 3CRV to the USDN pool and buying USDN on Curve is more expensive than on Waves.
All users with accounts over 250k in value(in USDT and USDC) have two options to self-select:
Exchange their positions for USDN with a 365-day vesting period with an additional 5% liquidation bonus.
Remain on the platform with 0% APY on all funds above $250k in USDT or USDC.
However, less than a month later, on August 26th, Sasha Ivanov announced on Telegram that he would suspend vesting for USDN to prevent its depeg (there was no governance vote or any public announcement):
According to the Vires Finance website data, as of August 29, USD 160M in USDN was deposited as collateral with $102M USDC/USDT borrowed (and unable to withdraw) on Vires Finance.
Due to the liquidity crunch, USDT/USDC depositors still earn about 50% APY. Still, new users depositing assets should consider that they are providing USDC/USDT exit liquidity to users who wish to withdraw and leave Vires immediately.
Vires Finance has disabled borrowing USDN and WAVES for an undetermined time see VIP-032.
Neutrino limits USDN<> WAVES minting and issues a new token to raise funds
After the USDN depeg and WAVES price crash, currently, the USDN Backing Ratio (BR) is only 9.8%. To restore the BR, the Neutrino protocol issued SURF (Smart Utility Recapitalization Feature) token on August 8th.
Backing address: https://wscan.io/3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo
Real-time Backing Ratio: https://neutrino.at/stats
Users can buy (issue) SURF by locking WAVES or USDN, which should drive demand for WAVES and USDN up. SURF is locked until BR returns to 115%: this is when SURF would be automatically converted to USDN at the rate of 1:1.
In essence, SURF serves as a bet that the backing ratio will be restored, and as a reward SURF holders are buying USDN at a 90% discount (at the current 9.8% BR).
Additionally, SURF stakers get one gNSBT for 300 staked SURF, which allows them to swap USDN<>WAVES at $1 worth of WAVES for 1 USDN. At present, only NSBT (staked WAVES) holders and gNSBT tokens can swap USDN<>WAVES.
The latest governance vote #8 passed on August 25 and introduced two significant changes to the swapping mechanics.
The max daily swap amount of USDN>WAVES swaps depends on the current BR value. The lower the BR, the lower the maximum swap amount, following the formula below. This decreases the downward pressure on the BR. The following table shows that big gNSBT holders lose 95% to 99% of their swapping power at the current BR of 10%.
Neutrino added BR protection to limit the draining of the backing if BR is below 10%. If BR is 10%, users who swap USDN>WAVES receive 10% of the swap amount in WAVES and 90% in SURF. At the moment of writing, there is no liquid secondary market for the SURF token. If BR drops below 10%, it is impossible to arbitrage 1 USDN back to 1 USD for a significant size.
Thus far, 33M Surf tokens have been issued, which has brought in an extra 522k Waves (2.5M$) and 2M USDN to strengthen the backing of USDN. However, three-quarters of that were raised in the first two days, and growth has been slow since then. Furthermore, the amount raised increased the BR by less than 1%.
Surf contract: https://wscan.io/At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL
USDN as an asset on curve pools
USDN has deployed one USDN/3CRV pool on Curve and receives 1.086% of CRV emissions.
The USDN/3CRV pool is imbalanced, with 71.10% in USDN and 28.90% in 3CRV at the time of writing.
The liquidity has been decreasing and currently stands at $18.7M.
The USDN/3CRV pool does not earn fee revenue from the volume the pool earns fees from USDN staking (As discussed on the forum). USDN has dropped staking rewards to 5% (not total APY, current APY is a miserable .14% rn, fml). USDN does not earn fee revenue from the volume, it earns it from USDN staking rewards, and with the current market conditions, the fee faucet to veCRV got shut off.
On April 7th of this year, the Curve DAO passed a vote to raise the A parameter for the USDN/3CRV pool from 100 to 250. It was argued by the proposer that ‘Raising A will decrease “spurious” arbitrage in USDN pool since USDN is always redeemable through the Neutrino protocol smart contract at 1:1 ratio’.
There seems to be a common misconception that a higher A will enforce the PEG better. This is not correct, as a higher A increases tail risks significantly. A higher A also takes much longer to re-PEG.
Discussion regarding A parameter of the USDN/3CRV pool
On January ’30, a proposal to raise the A parameter of the USDN/3CRV pool from 50 to 500 was posted on Curve governance forums. In the discussion, the user ‘Sasha’ argued that USDN is always 1:1 redeemable through the USDN smart contract and that a higher A parameter would bring the USDN price on Curve in line with the smart contract price.
Nagaking (a member of cryptorisk and a contributor to the DAO) countered this with: ‘If anyone could easily redeem USDN at 1:1 for some other stablecoin, they could make a free 2-3% by balancing the pool right now ... this probably hasn’t happened due to an inefficient arb route.’ Later, ‘Sasha’ proposed to raise A in steps instead.
Let’s analyze the two arguments;
A higher A will bring the USDN price on Curve in line with the smart contract price (1$). We have seen that, even though A was raised to 250, USDN suffered from multiple depegs: $0.82 on May 12, $0.93 on June 15, and $0.94 on August 26.
USDN is depegged due to inefficient arbitrage routes on the smart contract level. Arbitraging USDN through the Neutrino protocol is hard and has become increasingly harder after recent changes to the Neutrino protocol.
One needs to buy NSBT, stake it for gNSBT and incur high fees if it’s unstated.
A 100k gNSBT position (worth almost 1M$ currently) is needed to swap about 50k USDN to 50k$ worth of Waves every 24 hours (using BR=10%).
When BR is sub 10%, arbitrage is virtually impossible as the smart contract will return only 10% in Waves and 90% in Surf tokens. There is no liquid secondary market for Surf.
Besides this route, users can also use Waves Exchange, irrespective of BR. However, there is not a lot of volume/liquidity or arbitrage to be made at this point.
Security audits
Neutrino received a smart contract audit by Beosin in April 2020. The result is a Pass (Distinction) “The smart contract can function correctly.” It is rarely the case that during an audit, zero vulnerabilities are found, and it is not standard to have such results. It would be good if the Neutrino team contacted another audit firm besides Beosin to give a review of the Neutrino codebase. Beosin only spent +- 10 days on the audit in which they say they include Formal Verification. This would be unusual in such a small time frame.
Besides this, it seems the design of the Neutrino system has completely changed; the current audit doesn’t include changes made since then: NSBT, SURF tokens, and limits on USDN<>SWAP function. The Neutrino team informed us that they are planning new audits when all upcoming protocol changes are completed.
Neutrino USDN Protocol Conclusion
Neutrino’s USDN should be 100% collateralized by WAVES. Still, its backing ratio has dropped to 10% following multiple depegs, the liquidity crunch on Vires Finance, and a struggling WAVES price (from over 60$ in April to below 5$ now).
The Neutrino team is struggling to prevent USDN depeg and further liquidations by introducing various limits and penalties on withdrawals and swaps. At the same time, Neutrino is trying to raise more funds with the SURF token, but so far, it has failed to increase the Backing Ratio significantly.
USDN/3CRV pool is imbalanced and has relatively no trading volume. Yet it still received 1% of CRV emissions. The A parameter was raised to 250 in April, one of the reasons being that USDN is always redeemable at a 1:1 ratio through the Neutrino protocol. However, the latest changes to the swapping mechanics severely limit swaps, with gNSBT holders losing up to 99% of their swapping power.
The ‘Bring Neutrino Home’ campaign was a reason for the Waves team to disable USDN transfers from the Waves blockchain to Ethereum. This has caused price differences between the Curve pool and the Waves Exchange market. This has unfavorable effects on Curve LPs, traders, and ultimately veCRV holders.
There is still $160M in USDN deposited as collateral with $102M USDC/USDT borrowed (and unable to withdraw) on Vires Finance, so anyone shorting USDN risks getting stuck.
Does the asset meet minimum requirements?
Is it possible for a single entity to rug the user base?
Yes. From our analysis, the governance of the Waves blockchain is relatively centralized. This has allowed the core team to change key protocol parameters at will.
If the team vanishes, can the project continue?
No, since there is a dependence on a small group of key figures, it is unlikely that the protocol can continue without its core team.
Do audits reveal any concerning signs?
Yes, It is concerning that there are almost no recommendations from the audit. Also, it seems that the Neutrino has almost entirely changed after the last audit since the audit does not include NSBT and SURF tokens.
Recommendation: We recommend not increasing CRV rewards and lowering the pool amplification parameter, at least until
USDN backing ratio is restored.
minting and redeeming USDN <> WAVES limits are removed.
Vires Finance solves its liquidity crunch issues and prevents future failure by implementing oracles for USDN.
Suppose USDN arbitrage becomes impossible (as will be the case if BR drops below 10%), it is recommended to remove the USDN gauge.