A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | AA | AB | AC | AD | AE | AF | AG | AH | AI | AJ | AK | AL | AM | AN | AO | AP | AQ | AR | AS | AT | AU | AV | AW | AX | AY | AZ | BA | BB | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | ATTACK | ASSESSMENT | ||||||||||||||||||||||||||||||||||||||||||||||||||||
2 | Name | Description | When | Type | Impact | Likelihood | Assessment | Mitigations implemented | ||||||||||||||||||||||||||||||||||||||||||||||
3 | MEV delta hedge swap | An IG trader could, before trading, calculate the protocol delta and frontrun / sandwitch the delta hedge | Delta Hedge | MEV | LOW | MID | The impact is limited by: 1) implemented mitigations. 2) the impossibility to execute it recursively becase the delta is based on the Oracle Price (thus the attacker would need to manipulate / move the Oracle Price to have the delta of the protocol to change after having sandwitched a transaction - more info in "Delta hedge manipulation leading to fee drain") | Max slippage on swap Price IG using worst(Oracle ; Swap price) Only launch vaults on liquid tokens | ||||||||||||||||||||||||||||||||||||||||||||||
4 | MEV IG buyers / sellers | User may MEV another user buying or selling IG | Delta Hedge | MEV | MID | LOW | Only possible on MEV-exposed chains | Max slippage on IG premium | ||||||||||||||||||||||||||||||||||||||||||||||
5 | MEV roll-epoch | Before roll epoch happens, a bad actor can compute the swap amount and frontrun / sandwitch the swap | Roll Epoch | MEV | HIGH | MID | Only possible on MEV-exposed chains and in any case mitigated by mitigations | Roll-epoch is randomized over a few min time period by the epoch-roller Max slippage on swap | ||||||||||||||||||||||||||||||||||||||||||||||
6 | Delta hedge manipulation leading to fee drain | In certain scenarios, the delta of the protocol may change much from a trade to another due to price movements. This happens in particular for: 1) highly volatile tokens 2) tokens with limited liquidity, whose price is much impacted by Smilee swaps themselves In such scenario, a bad actor can buy and sell tiny position of IG OTM to cause swaps to rebalance delta. This: 1) impacts the vault due to DEX slippage and fees 2) can be used by the bad actor to profit from MEV or JITL on the underlying DEX pool | Delta Hedge | Manipulation | HIGH | LOW | Only possible if the delta hedge swap moves both the DEX and the Oracle Price which is unlikely for liquid enough tokens | Min fee on each swap Only launch vaults on liquid tokens | ||||||||||||||||||||||||||||||||||||||||||||||
7 | DEX & Price Oracle manipulation | IG buyers / sellers or Smilee LPs may have an incentive to manipulate DEX and Oracle prices to: 1) change IG premium computation 2) change expiry price and share price at roll-epoch 3) make certain transactions or roll-epoch revert | Both | Manipulation | HIGH | LOW | Only possible for illiquid tokens | Only launch vaults on liquid tokens | ||||||||||||||||||||||||||||||||||||||||||||||
8 | Divergence between Oracle Price and DEX prices at roll-epoch | Divergence between Oracle Price and DEX prices at roll-epoch may lead to use an Expiry Price better (or, potentially worst) than the swap price at which the vault rebalance. This may generate some small impact on the payoff of the vault | Roll Epoch | Integration | LOW | LOW | Difficult to forsee how this could happen always in a direction that adds up more and more over time | Max slippage on swap | ||||||||||||||||||||||||||||||||||||||||||||||
9 | Divergence between token prices used to compute IG premium during epoch and prices used to determine roll-epoch expiry price | Divergence between token prices used to compute IG premium during epoch and prices used to determine roll-epoch expiry price may allow a bad actor to buy IG just before roll-epoch to try to immediately profit from it at expiry | Both | Integration | MID | NOT POSSIBLE | The IG pricing during epoch is based on "worst(Oracle ; Swap price)", while Expiry Price is based on Oracle. Therefore the exploiter will get at best for him the same price and at worst for him a worse one | Price IG using worst(Oracle ; Swap price) | ||||||||||||||||||||||||||||||||||||||||||||||
10 | Price Oracle frontrun / stale feed | A bad actor may try to frontrun an oracle price update | Both | Integration | LOW | NOT POSSIBLE | During epoch the IG pricing is based on "worst(Oracle ; Swap price)", therefore the exploiter will get at best the same price and at worst a worse one. At roll-epoch users cannot easily frontrun roll-epoch because this is executed randomly over a few min timeframe | Price IG using worst(Oracle ; Swap price) Roll-epoch is randomized over a few min time period by the epoch-roller | ||||||||||||||||||||||||||||||||||||||||||||||
11 | Volatility Oracle issues | Smilee uses on-chain volatility data generated by Smilee AMM itself for all tokens but ETH and BTC. For ETH and BTC Smilee uses Deribit data. This may lead to integration issues, such as: wrong data feed, stale data feed, no data feed, which may lead to IG mispricing or roll-epoch to revert | Roll Epoch | Integration | MID | MID | In case of revert the issue can be overcome fixing the data, in case of mispracing (more rare) the issue can be managed pausing the vault. In addition, Smilee can be moved to use only on-chain volatility data fully solving the issue | RBAC to pheriphery contracts to overcome integration issues On-chain volatility data | ||||||||||||||||||||||||||||||||||||||||||||||
12 | Volatility model does not reflect underlying asset dynamics correctly | Both | Financial / math | LOW | MID | Black&Scholes model relies on assumption that may not be verified in crypto markets. However, this has very little impact on Smilee's pricing model, thanks to the volatility bonding curve: for example if people think crypto returns have heavy tails, they will buy more IG leading to a higher utilization rate and therefore a higher IV that needs to be plugged in the B&S model to get the IG market price. | Convex Bonding curve | |||||||||||||||||||||||||||||||||||||||||||||||
13 | Volatility does not depend on skew | Usually in tradfi the OTM put has a higher IV than the OTM call, resulting in a higher cost. In smilee, Bull IG and Bear IG have the same IV even if they could be replicated with a portfolio of different OTM calls/puts | Both | Financial / math | LOW | MID | In an ideal world, volatility should move along the skew. In practice, the difference is usually tiny and skews are not very steep in crypto. As Impermanent Gain is only minted on 1 strike per week (epoch), it was not worth adding an extra skew parameter to marginally improve pricing | |||||||||||||||||||||||||||||||||||||||||||||||
14 | Smilee implied volatility may not reflect correct Market Volatility | Both | Financial / math | MID | LOW | Bonding curve is defined in order to adjust dynamically volatility based on utilisation rate and time and so shall limit any discrepancies thanks to arbitrageurs' activity. If volatility is set too low, buyers will come in and raise U, if volatility is set too high, the time decay will make it fall relatively quickly | Convex Bonding curve with time decay parameter | |||||||||||||||||||||||||||||||||||||||||||||||
15 | Smilee vault may underperform DEX LPs due to DEX slippage and fees when swapping | Smilee delta hedging math ensures the protocol delta is always realigned to that of the DEX LP. This ensures Smilee vaults never underperform DEX LPs with same range but this math does not take into account DEX fees and slippage, which may translate in underperformance | Both | Financial / math | MID | LOW | We tested the issues with specific financial simulations and backtest and identified that the mitigations more than cover the DEX fees and slippage for liquid tokens in a large majority of the scenarios | Price IG using worst(Oracle ; Swap price) Min fee on each swap Max slippage on swap Bid ask spread on the bonding curve | ||||||||||||||||||||||||||||||||||||||||||||||
16 | Delta is computed using the delta of the payoff of the IG, which is an approximation compared to using the delta in that specific point in time | There is a range of prices in which real delta and payoff delta have different sign | Delta Hedge | Financial / math | LOW | MID | This happens when volatility and time to maturity are very high. It is not an issue since it doesn't cause scenarios where the vault underperforms the LP at expiry in absence of fees and slippage | |||||||||||||||||||||||||||||||||||||||||||||||
17 | Liquidity on the DEX pool decrease significantly | Big price movements or change in liquidity distribution may cause a DEX pool to end up with not enough liquidity in range to allow Smilee to swap at a reasonable price causing delta hedge or roll-epoch to revert due to max slippage | Both | Financial / math | LOW | LOW | Limited impact because the max slippage on swap protects the vault from excessive slippage on the swap. If liquidity does not come back to the DEX, the issue is probably more related to the DEX / token itself. A new DEX venue can be found in case or the vault can be paused and killed | Max slippage on swap RBAC to pheriphery contracts to overcome integration issues | ||||||||||||||||||||||||||||||||||||||||||||||
18 | Smilee vault ranges (Ka and Kb) computation may lead to numerical issues when implied volatility is very high | Each Smilee vault replicates a DEX LP with ranges (Ka and Kb) computed from implied volatility data.For high value this can translate in issue with computing Ka, which may translate in roll-epoch to revert | Roll Epoch | Financial / math | MID | LOW | Issue can be managed by adjusting the volatility value in the oracle | RBAC to pheriphery contracts to overcome integration issues | ||||||||||||||||||||||||||||||||||||||||||||||
19 | Utilisation rate may stay low for a while after a volatility spike | Bonding curve adjusts volatility based on utilisation rate and time. If the initial volatility value is set too high (for example due to a volatility spike in the revious epoch), smilee's time decay parameter may take some time to lower volatility back to market levels | Both | Financial / math | LOW | MID | We expect this to happen after a volatility spike, but the only effect will be a temporary lower utilization rate | |||||||||||||||||||||||||||||||||||||||||||||||
20 | Time-vega weighted average utilisation rate could not be a good proxy for the real average utilisation | The formula chosen gives more weight to the utilization rate in the first part of the epoch. This limits certain potential attacks close to roll-epoch to try to modify volatility for the following epoch. However, it may not fully reflect real market dynamics. | Both | Financial / math | LOW | LOW | The rationale is that trades done in the first part of the epoch (when vega is high) give more indications on what the right level of volatility is, so they should be weighted more. The issue is that volatility may be underestimated if it rose during the previous epoch or overestimated if it fell. In any case the only effect would be a temporary higher/lower utilization rate | |||||||||||||||||||||||||||||||||||||||||||||||
21 | Smilee vault token balances do not match an exact equal weight after roll-epoch | The roll-epoch rebalance targets an EW portfolio but due to DEX slippage and fee actualy results in a slightly different portfolio | Roll Epoch | Financial / math | LOW | HIGH | The issue is limited by the max slippage and in any case the delta is then adjusted at the first IG trade | Max slippage on swap | ||||||||||||||||||||||||||||||||||||||||||||||
22 | Execution premium may be different from the one shown to the user | Premium previewed to users are computed using Oracle Prices, but then the final Premium is computed using the worst between the oracle price and the dex swap price. This minimizes manipulation attacks but lead to a premium previewed slightly different from the final one | Delta Hedge | Financial / math | LOW | MID | Max slippage on IG premium | |||||||||||||||||||||||||||||||||||||||||||||||
23 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
24 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
25 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
26 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
27 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
28 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
29 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
30 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
31 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
32 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
33 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
34 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
35 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
36 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
37 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
38 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
39 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
40 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
41 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
42 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
43 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
44 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
45 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
46 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
47 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
48 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
49 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
50 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
51 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
52 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
53 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
54 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
55 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
56 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
57 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
58 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
59 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
60 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
61 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
62 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
63 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
64 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
65 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
66 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
67 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
68 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
69 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
70 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
71 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
72 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
73 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
74 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
75 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
76 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
77 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
78 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
79 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
80 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
81 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
82 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
83 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
84 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
85 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
86 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
87 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
88 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
89 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
90 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
91 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
92 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
93 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
94 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
95 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
96 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
97 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
98 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
99 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
100 |