mirror of
https://github.com/autistic-symposium/mev-toolkit.git
synced 2025-08-01 02:36:20 -04:00
add the crypto anarchist manifest by timothy c. may
This commit is contained in:
parent
2e05fb2bc6
commit
b6b2db512f
275 changed files with 4733 additions and 2552 deletions
24
MEV_and_trading/protocols/0x_protocol/README.md
Normal file
24
MEV_and_trading/protocols/0x_protocol/README.md
Normal file
|
@ -0,0 +1,24 @@
|
|||
# 0x protocol
|
||||
|
||||
<br>
|
||||
|
||||
### tl; dr
|
||||
|
||||
<br>
|
||||
|
||||
* DEX aggregator integrating both on- and off-chain liquidity:
|
||||
- on-chain liquidity is sourced by sampling smart contract liquidity pools, such as uniswap and curve.
|
||||
- off-chain liquidity is sourced from professional market makers via the [0x Request-for-Quote (“RFQ”) system](RFQ.md)
|
||||
|
||||
|
||||
<br>
|
||||
|
||||
----
|
||||
|
||||
### resources
|
||||
|
||||
<br>
|
||||
|
||||
* [matcha.xyz](https://matcha.xyz/)
|
||||
* [RFQ orders official guide](https://protocol.0x.org/en/latest/basics/orders.html#rfq-orders)
|
||||
* [0x at mev.wtf](https://docs.google.com/presentation/d/1kde_3RPgHJP0vOP8GG92mlA7VtdGdHiGdrEGhFhx-5U/edit#slide=id.g465c39fec5_0_1309)
|
21
MEV_and_trading/protocols/0x_protocol/RFQ.md
Normal file
21
MEV_and_trading/protocols/0x_protocol/RFQ.md
Normal file
|
@ -0,0 +1,21 @@
|
|||
## request-for-quote (RFQ)
|
||||
|
||||
<br>
|
||||
|
||||
### tl; dr
|
||||
|
||||
<br>
|
||||
|
||||
* rfq-based exchanges work similar to central limit order books (clobs), as users submit orders using signed messages and market makers execute them on-chain (assuming the role of both lps and searchers).
|
||||
|
||||
|
||||
|
||||
<br>
|
||||
|
||||
---
|
||||
|
||||
### links
|
||||
|
||||
<br>
|
||||
|
||||
* [hashflow](https://www.hashflow.com/)
|
70
MEV_and_trading/protocols/README.md
Normal file
70
MEV_and_trading/protocols/README.md
Normal file
|
@ -0,0 +1,70 @@
|
|||
## trading protocols in-depth
|
||||
|
||||
<br>
|
||||
|
||||
### in this dir
|
||||
|
||||
<br>
|
||||
|
||||
* [gns](gns.md)
|
||||
* [gmx](https://github.com/go-outside-labs/mev-toolkit/tree/main/MEV_by_chains/MEV_on_Arbitrum/gmx)
|
||||
* [dydx](dydx.md)
|
||||
* [yearn](yearn.md)
|
||||
* [inverse](inverse.md)
|
||||
* [uniswap](uniswap)
|
||||
* [0x protocol](0x_protocol)
|
||||
* [primitive](primitive.md)
|
||||
|
||||
<br>
|
||||
|
||||
----
|
||||
|
||||
### basic definitions
|
||||
|
||||
<br>
|
||||
|
||||
* **protocol fees**: fees generated by users using a dapp as a form of income for the protocol
|
||||
* **supply-side fees**: the cost for the protocol (amount used for expenses)
|
||||
* **revenue**: protocol fees minus supply side fees
|
||||
* **token emissions**: value/cost of native tokens being inflated by the protocol (for instance, to attract users)
|
||||
* **earnings**: revenue minus token emissions (how much money the protocol has earned)
|
||||
|
||||
<br>
|
||||
|
||||
|
||||
----
|
||||
|
||||
### resources
|
||||
|
||||
<br>
|
||||
|
||||
* [buffer.finances](https://buffer.finance/)
|
||||
* [drift.trade](https://www.drift.trade/)
|
||||
* [stader labs](https://staderlabs.com/)
|
||||
* [hop](https://app.hop.exchange/#/send?token=ETH)
|
||||
* [popsicle finance](https://popsicle.finance/)
|
||||
* [matcha](https://matcha.xyz/)
|
||||
* [maple](https://www.maple.finance/)
|
||||
* [oasis.app](https://oasis.app/)
|
||||
* [euler](https://www.euler.finance/)
|
||||
* [elementifi](https://app.element.fi/fixedrates)
|
||||
* [fodl](https://app.fodl.finance/nft)
|
||||
* [traderJoe](https://traderjoexyz.com/farm#/)
|
||||
* [vesta](https://vestafinance.xyz/)
|
||||
* [tracerDAO](https://github.com/tracer-protocol)
|
||||
* [step.finance](https://app.step.finance/#/dashboard)
|
||||
* [orca staking](https://www.orca.so/staking)
|
||||
* [solidly](https://solidly.exchange/liquidity)
|
||||
* [rose](https://app.rose.fi/#/)
|
||||
* [bancor](https://app.bancor.network/pools)
|
||||
* [augur](https://augur.net/)
|
||||
* [CREAM](https://app.cream.finance/)
|
||||
* [paraswap](https://www.paraswap.io/)
|
||||
* [arch finance](https://beta.archfinance.io/)
|
||||
* [tokensets](https://www.tokensets.com/)
|
||||
* [fracium](https://francium.io/)
|
||||
* [rotki](https://rotki.com/)
|
||||
* [crystal](https://defi.krystal.app/)
|
||||
* [hotbit](https://www.hotbit.io)
|
||||
* [slingshot](https://app.slingshot.finance/trade/m/MATIC)
|
||||
* [zapper](https://zapper.fi/invest)
|
22
MEV_and_trading/protocols/dydx.md
Normal file
22
MEV_and_trading/protocols/dydx.md
Normal file
|
@ -0,0 +1,22 @@
|
|||
## dydx
|
||||
|
||||
<br>
|
||||
|
||||
### tl; dr
|
||||
|
||||
|
||||
<br>
|
||||
|
||||
|
||||
* founded in 2017, dydx is the most popular dex for trading perps and utilizes a central limit orderbook model (rather amm).
|
||||
* the oracle price is an aggregate price calculated using on-chain price oracles. collateralization and liquidations on dydx are determined using the oracle prices of each asset.
|
||||
* the index price is an aggregate price based on price data from multiple exchanges and is used to trigger stop orders.
|
||||
* the mid-market price is determined by the orderbook as tge midpoint or average between the lowest ask (sell price) and the highest bid (buy price).
|
||||
* funding rate is the fee paid between longs and shorts for each perpetual market. longs pay shorts if the funding rate is positive and vice versa.
|
||||
* it on starkware's L2 (migrated from ethereum in 2021) and soon moving to their own standalone cosmos chain (dydx v4).
|
||||
|
||||
<br>
|
||||
|
||||
---
|
||||
|
||||
### resources
|
20
MEV_and_trading/protocols/gns.md
Normal file
20
MEV_and_trading/protocols/gns.md
Normal file
|
@ -0,0 +1,20 @@
|
|||
## [gains network](https://gainsnetwork.io/)
|
||||
|
||||
<br>
|
||||
|
||||
### tl; dr
|
||||
|
||||
<br>
|
||||
|
||||
* gtrade exchange gives users the ability to take up to 30-150x leverage on alts, blueships, stocks, and 1000x leverage on forex pairs, on polygon and arbitrum
|
||||
|
||||
|
||||
<br>
|
||||
|
||||
---
|
||||
|
||||
### resources
|
||||
|
||||
<br>
|
||||
|
||||
* [arbitrum trading context](https://gains.trade/contest)
|
27
MEV_and_trading/protocols/inverse.md
Normal file
27
MEV_and_trading/protocols/inverse.md
Normal file
|
@ -0,0 +1,27 @@
|
|||
## inverse finance
|
||||
|
||||
<br>
|
||||
|
||||
|
||||
### tl; dr
|
||||
|
||||
|
||||
<br>
|
||||
|
||||
* [inverse finance](https://www.inverse.finance/) is building a suite of DeFi tools that are governed by the inverse finance dao.
|
||||
* the first product was DCA (dollar cost average) vaults, but the DAO decided to put all resources toward anchor and their synthetic stablecoin DOLA. xDOLA has liquidity pools on curve, balancer, velodrome (optimism), and Sushi. curve and balancer amms are the most significant “stability mechanisms”, as there is almost no exogenous collateral backing the stablecoin.
|
||||
* anchor (later renamed to Frontier) is a lending market (mostly a fork of Compound).
|
||||
* now, fixed-rate money market (FiRM) is an improved version of frontier with additional features, increased security, and a new primitive to facilitate fixed-rate borrowing of DOLA.
|
||||
* inverse suffered from two exploits in 2022 (~$15.6M and ~$5.8M) 2022, due to oracle price manipulation.
|
||||
|
||||
|
||||
<br>
|
||||
|
||||
---
|
||||
|
||||
### resources
|
||||
|
||||
<br>
|
||||
|
||||
* [inverse finance, by cryptorisks](https://cryptorisks.substack.com/p/asset-risk-assessment-dola)
|
||||
* [inverse finance oracle hack](https://twitter.com/peckshield/status/1510234162183041024)
|
5
MEV_and_trading/protocols/primitive.md
Normal file
5
MEV_and_trading/protocols/primitive.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
## primitive finance
|
||||
|
||||
<br>
|
||||
|
||||
* [financial virtual machine paper](https://www.primitive.xyz/papers/yellow.pdf)
|
48
MEV_and_trading/protocols/uniswap/README.md
Normal file
48
MEV_and_trading/protocols/uniswap/README.md
Normal file
|
@ -0,0 +1,48 @@
|
|||
## [uniswap](https://uniswap.org/)
|
||||
|
||||
<br>
|
||||
|
||||
### tl,dr
|
||||
|
||||
|
||||
<br>
|
||||
|
||||
* **AMMs** replace the buy and sell orders in an order book market with a liquidity pool of two assets, both valued relative to each other. as one asset is trader for the other, the relative prices of the two assets shift, and the new market rate for both is determined.
|
||||
* uniswwap is a peer-to-peer system designed for exchanging ERC20 tokens on the ethereum blockchain.
|
||||
* the protocol is implemented as a set of persistent, non-upgradable smart contracts; designed to prioritize censorship, resistance, security, self-custody.
|
||||
|
||||
|
||||
<br>
|
||||
|
||||
---
|
||||
|
||||
### in this dir
|
||||
|
||||
<br>
|
||||
|
||||
* [uniswap v2](uniswap-v2)
|
||||
* [uniswap v3](uniswap-v3)
|
||||
|
||||
|
||||
<br>
|
||||
|
||||
---
|
||||
|
||||
### resources
|
||||
|
||||
<br>
|
||||
|
||||
|
||||
* [what's an amm, by coindesk](https://www.coindesk.com/learn/what-is-an-automated-market-maker/)
|
||||
* [uniswap docs](https://docs.uniswap.org/protocol)
|
||||
* [uniswap arb analysis](https://github.com/ccyanxyz/uniswap-arbitrage-analysis)
|
||||
* [uniswap extractooor](https://www.uniswap.shippooor.xyz/)
|
||||
* [dune for total uniswap users over time](https://dune.com/queries/2740)
|
||||
* [understanding amms by hasu](https://www.paradigm.xyz/2021/04/understanding-automated-market-makers-part-1-price-impact)
|
||||
* [mev's impact on uniswap](https://eigenphi.io/report/mev-impact-on-uniswap)
|
||||
* [quantifying the cost of providing liquidity to amms, by a16z](https://a16zcrypto.com/lvr-quantifying-the-cost-of-providing-liquidity-to-automated-market-makers/)
|
||||
* [automated market making and loss-versus-balancing, by j. milionis et al](https://arxiv.org/abs/2208.06046)
|
||||
* [sushiguardrouterv01 with manifold](https://snapshot.org/#/sushigov.eth/proposal/bafkreigjjhjx2j2b526d3poeg23w2xan4rcgnzvcxinsssv7n37lu5p7s4)
|
||||
* [the value of nontoxic orderflow to the uniswap protocol, by m. holloway](https://xenophonlabs.com/papers/uniswap_valuing_orderflow.pdf)
|
||||
* [dune board on mev on uniswap](https://dune.com/jhackworth/mevmevmev)
|
||||
|
74
MEV_and_trading/protocols/uniswap/uniswap-v2/README.md
Normal file
74
MEV_and_trading/protocols/uniswap/uniswap-v2/README.md
Normal file
|
@ -0,0 +1,74 @@
|
|||
## uniswap v2
|
||||
|
||||
<br>
|
||||
|
||||
### tl; dr
|
||||
|
||||
* uniswap v2 introduced new features and optimizations in may 2020
|
||||
* each Uniswap liquidity pool is a trading venue for a pair of ERC20 tokens
|
||||
|
||||
<br>
|
||||
|
||||
<img width="500" alt="Screen Shot 2022-10-10 at 1 45 22 PM" src="https://user-images.githubusercontent.com/1130416/194949749-99a525c8-32f9-48bc-8ca3-e757120e35a1.png">
|
||||
|
||||
|
||||
* whenever liquidity is deposited into a pool, unique tokens known as liquidity tokens are minted and sent to the provider's address
|
||||
* if the provider is minting a new pool, the number of liquidity tokens they will receive will equal sqrt(x * y), where x and y represent the amount of each token provided.
|
||||
* to retrieve the underlying liquidity, plus any fees accrued, liquidity providers must "burn" their liquidity tokens, effectively exchanging them for their portion of the liquidity pool, plus the proportional fee allocation.
|
||||
|
||||
<br>
|
||||
|
||||
----
|
||||
|
||||
### arbitrage opportunities
|
||||
|
||||
#### 💡 check my [amm arbitrage toolkit](https://github.com/MEV-WAIFU-LABS/amm_arbitrage_toolkit) for a clean nice code on uniswap v2 protocol
|
||||
|
||||
* let's chat about a bot looking for uniswap-like arbitrages which it could perform after the opportunity tx take advantages of liquidity disparities accross pools
|
||||
* a pool with X WETH and Y USDC allows users to swap WETH and USDC, the governing principle of the pool is that the product of X * Y is always constant (the uniswap invariant)
|
||||
* for a pool with reserves of (X, Y) we can work out how much USDC out we expect for selling delta X WETH
|
||||
* the pool also takes a fee of ~30bps (~0.3%)
|
||||
|
||||
<br><img width="503" alt="Screen Shot 2022-10-16 at 12 29 14 PM" src="https://user-images.githubusercontent.com/1130416/196054290-ce741355-a9c8-470d-84e3-2f56ce2e3873.png">
|
||||
<img width="500" alt="Screen Shot 2022-10-16 at 12 29 22 PM" src="https://user-images.githubusercontent.com/1130416/196054291-0054d2f1-d4fe-46ed-8a4d-abb977c780cc.png">
|
||||
<img width="429" alt="Screen Shot 2022-10-16 at 12 29 43 PM" src="https://user-images.githubusercontent.com/1130416/196054294-a7699e6f-ad2c-41fc-93c2-705d2d4746fd.png">
|
||||
<img width="453" alt="Screen Shot 2022-10-16 at 12 29 50 PM" src="https://user-images.githubusercontent.com/1130416/196054295-7c5a6026-bfda-4468-ac42-d9f2519654e4.png">
|
||||
|
||||
<br>
|
||||
|
||||
##### bots step
|
||||
|
||||
1. once we figured out how to perform swaps to max profit, the bot needs to acquire delta X of the initial token to perform these swaps (e.g. using a flash loan from aave)
|
||||
2. then the bot needs to bundler the flash loan plus both swaps and transfer of flash loan back to aave into a single tx (this can be done using a custom smart contract that is pre-deployed on chain)
|
||||
3. once the tx is created and signed, it's submitted to the mempool to be mined. there are many other bots searching for the same opportunities
|
||||
4. we want to ensure that our tx gets mined first, this means our arb tx should follow the original tx in the same block and be mined immediatially aftward. this is what's known as "back run".
|
||||
5. in order to achieve a back run, the bot needs to first understand the gas price that the original tx offered, and then needs to copy these exact parameters in the arb tx
|
||||
6. finally, the tx is signed and submitted to the mempool directly by the bot for validation and free money
|
||||
|
||||
|
||||
<br>
|
||||
|
||||
----
|
||||
|
||||
### lp burn
|
||||
|
||||
<br>
|
||||
|
||||
- liquidity providers (LP) provide the pool with the two tokens that can be exchanged (token0 and token1).
|
||||
- in return they receive a third token that represents partial ownership of the pool called a liquidity (pool) token.
|
||||
- the function burn() is called when liquidity is withdrawn, and the liquidity tokens need to be burned, it sends the destination address the underlying tokens in proportion to the burned tokens.
|
||||
- for example if there are 1000 token0, 500 token1, and 90 liquidity tokens in the pool. If someone gives 9 tokens to burn, this is burning 10% of the liquidity tokens, the user receives 100 token0 and 50 token1.
|
||||
balanceOf() function returns the token balance of the given address: balance0 = IERC20(_token0).balanceOf(address(this)) .
|
||||
address(this) refers to the address of the instance of the contract where the call is being made.
|
||||
- the amount of liquidity tokens to remove: liquidity = IERC20(lpToken).balanceOf(address(this));.
|
||||
- the totalSupply() function returns the total supply of the tokens. This means that the sum total of token balances of all of the token holders must match the total supply: uint256 _totalSupply = IERC20(lpToken).totalSupply().
|
||||
- for completeness, this is how LP tokens got minted:
|
||||
https://github.com/Uniswap/v2-core/blob/master/contracts/UniswapV2Pair.sol#L110
|
||||
```
|
||||
if (_totalSupply == 0) {
|
||||
liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY);
|
||||
_mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens
|
||||
} else {
|
||||
liquidity = Math.min(amount0.mul(_totalSupply) / _reserve0, amount1.mul(_totalSupply) / _reserve1);
|
||||
}
|
||||
```
|
51
MEV_and_trading/protocols/uniswap/uniswap-v3/README.md
Normal file
51
MEV_and_trading/protocols/uniswap/uniswap-v3/README.md
Normal file
|
@ -0,0 +1,51 @@
|
|||
## uniswap v3
|
||||
|
||||
<br>
|
||||
|
||||
### tl; dr
|
||||
|
||||
<br>
|
||||
|
||||
- uniswap v3 introduced:
|
||||
|
||||
* **concentrated liquidity** and **non-fungible liquidity**:
|
||||
* replacing fungible ERC20 liquidity positions with non-fungible ERC-721 liquidity positions.
|
||||
* individual LPs get granular control over what price ranges their capital is allocated to.
|
||||
* individual positions are aggregated together into a single pool, forming one combined curve for users to trade against.
|
||||
* **multiple fee tiers**: allowing LPs to be appropriately compensated for taking on varying degrees of risk.
|
||||
* **range orders**: lps can deposit a single token in a custom price range, above or below the current price.
|
||||
* **improvements to the TWAP oracle**: possible to calculate any recent TWAP within ~9 days in a single on-call chain.
|
||||
|
||||
- new strategies:
|
||||
* creating and closing LP positions can be a form of trading. range orders can be used as either buy-limit or take-profit orders.
|
||||
|
||||
|
||||
<br>
|
||||
|
||||
---
|
||||
|
||||
### in this dir
|
||||
|
||||
<br>
|
||||
|
||||
* [just in time liquidity mev](just-in-time.md)
|
||||
|
||||
<br>
|
||||
|
||||
---
|
||||
|
||||
### resources
|
||||
|
||||
<br>
|
||||
|
||||
|
||||
* [uniswap v3 whitepaper](https://uniswap.org/whitepaper-v3.pdf)
|
||||
* [jit liquidity, by chainsight](https://twitter.com/ChainsightLabs/status/1457958811243778052)
|
||||
* [uniswap v3 book, by jeiwan](https://github.com/Jeiwan/uniswapv3-book)
|
||||
* [liquidity mining on uniswap v3, by paradigm](https://www.paradigm.xyz/2021/05/liquidity-mining-on-uniswap-v3)
|
||||
* [uniswap v3 twap oracle simulator, by euler](https://oracle.euler.finance/)
|
||||
* [conceptualizing uniswap v3 lp profit and loss](https://atise.medium.com/conceptualizing-uniswap-v3-lp-profit-and-loss-ecbae6e09644)
|
||||
* [on why lp-ing on uniswap is a losing game](https://twitter.com/thiccythot_/status/1589022227437039616)
|
||||
* [usage of markout to calculate LP profitability in uniswap v3, by crocswap](https://crocswap.medium.com/usage-of-markout-to-calculate-lp-profitability-in-uniswap-v3-e32773b1a88e)
|
||||
* [ETH USDC retroactive data Aaalysis, by flipside](https://science.flipsidecrypto.xyz/ethusdc_results/eth_usdc_analysis.html)
|
||||
* [markouts and stat analysis in uniswap v3](https://github.com/go-outside-labs/mev-toolkit/blob/main/MEV_strategies/stat_arbs/README.md)
|
42
MEV_and_trading/protocols/uniswap/uniswap-v3/just-in-time.md
Normal file
42
MEV_and_trading/protocols/uniswap/uniswap-v3/just-in-time.md
Normal file
|
@ -0,0 +1,42 @@
|
|||
## just-in-time (jit) liquidity
|
||||
|
||||
<br>
|
||||
|
||||
### tl; dr
|
||||
|
||||
<br>
|
||||
|
||||
* **uniswap v3** comes with just-in-time (jit) liquidity, allowing LPs to provide concentrated liquidity within smaller price ranges, i.e., to specify a range of prices their liquidity is active for. this allows capital efficiency for correlated tokens.
|
||||
|
||||
* the **liquidity range** determines the share of fees. however, the tighter the tick range, the greater the risk of impermanence loss (the greater the likelihood that the price of the asset pair will move out of the tick range to volatility), which would generate no fees).
|
||||
|
||||
* a **strategy** is to scan the mempool for substantial pending trades, provide liquidity where a LP mints and burns a concentrated position immediately before and after a swap. no impermanent loss happens because everything happens within the same block.
|
||||
|
||||
* because provision has **high costs**, it's usually only used against very large swaps (i.e., it's a non-atomic strategy).
|
||||
|
||||
* [*"their strategies mainly allocate liquidity in a narrow range and adjust the tick intervals to track market price based on quantitative indicators such as bollinger bands"*](https://mirror.xyz/0xc19565163aFdEe3783FC970E4Bd0275B11848d34/wr9JWZ_MIroWnXeze_tXG1R7nSsoTkp7IvqK5BsWYhA)
|
||||
|
||||
|
||||
<br>
|
||||
|
||||
---
|
||||
|
||||
### in this dir
|
||||
|
||||
<br>
|
||||
|
||||
* [tricks](tricks.md)
|
||||
|
||||
<br>
|
||||
|
||||
----
|
||||
|
||||
<br>
|
||||
|
||||
### links
|
||||
|
||||
<br>
|
||||
|
||||
* [uniswap on jit liquidity](https://uniswap.org/blog/jit-liquidity)
|
||||
* [just-in-time mev dune board](https://dune.com/ChainsightAnalytics/Uniswap-v3-Just-in-Time-(JIT)-Liquidity-MEV)
|
||||
* [uniswap v3 lp by rekt](https://rekt.news/uniswap-v3-lp-rekt/)
|
16
MEV_and_trading/protocols/uniswap/uniswap-v3/tricks.md
Normal file
16
MEV_and_trading/protocols/uniswap/uniswap-v3/tricks.md
Normal file
|
@ -0,0 +1,16 @@
|
|||
## tricks
|
||||
|
||||
<br>
|
||||
|
||||
### example cex + dex
|
||||
|
||||
<br>
|
||||
|
||||
1. consider a JIT LP that has ETH and USDC both in a wallet and in a CEX.
|
||||
2. when the LP observes a large ETH -> USDC swap in the mempool, they deploy a LP position on Uniswap, and at the same time submit an ETH buy order on the CEX.
|
||||
3. after both trades, the LP has the same total amount of ETH and USDC as before.
|
||||
4. assuming that the following holds, the LP are also profitable:
|
||||
|
||||
```
|
||||
fees_DEX + price_impact_DEX > fees_CEX + price_impact_CEX
|
||||
```
|
7
MEV_and_trading/protocols/yearn.md
Normal file
7
MEV_and_trading/protocols/yearn.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
## yearn finance
|
||||
|
||||
<br>
|
||||
|
||||
|
||||
* [yearn finance](https://yearn.finance/#/portfolio)
|
||||
* [permissionless yearn vaults](https://medium.com/iearn/permissionless-yearn-vaults-dd4880116022)
|
Loading…
Add table
Add a link
Reference in a new issue