Design goal:
Proposed Architecture:
accept arbitrary token -> swap for stablecoin -> tokenize stablecoin 1:1 -> deposit stablecoin into vault -> yToken held by proxy -> bot harvests yield and sends to donation add
For ETH, BTC and stables
Yearn vaults
Convex/curve (by size)
https://www.convexfinance.com/stake
Yearn vault integration flow:
Proxy contract design notes:
Zaps:
Yearn Zap In: https://etherscan.io/address/0x92Be6ADB6a12Da0CA607F9d87DB2F9978cD6ec3E
Yearn Zap Out: https://etherscan.io/address/0xd6b88257e91e4E4D4E990B3A858c849EF2DFdE8c
Deposit Contract Specification:
Deposit: Convert sellToken into stablecoin -> tokenize stablecoin 1:1 -> Zap into Yearn vault -> send 1:1 token back to user -> retain yToken in deposit contract
Withdraw: Transfer 1:1 token from user to deposit contract -> burn 1:1 token -> compute quantity of stablecoin owed -> withdraw stablecoin from vault -> transfer stablecoin to user
Harvest:
Unit Testing
Integration Testing
End to End Testing
Scenario Testing:
Infra setup: forked mainnet
Gotcha: need consistent 0x calldata to pass in, maybe past calldata?
Tests:
Smocks Needed
Contracts Interacted With