Architecture
V1 Vaults
Unagii Vaults V1 is an Ethereum-based protocol that enables users to passively earn from automated yield farming by depositing single crypto assets into the Vaults executing a specific Strategy in a gas-efficient environment. Unagii integrates with third-party DeFi protocols (i.e. AMMs and lending platforms), enabling support for a wide selection of strategies that are deemed safe and valuable to users.
Name | Description |
admin | Admin refers to the Unagii team, managed by a 2 out of 3 team member Gnosis multisig. Admin members are able to set and approve strategies, and execute the |
bots | These are Externally Owned Accounts (EOA) that are set to automate transactions at specific time periods to the Controller contract. |
controller | The main Unagii governance contract. Only the Admin and Bots are authorized to trigger transactions on the Controller. |
defi | DeFi is the acronym for Decentralized Finance, a term describing a variety of blockchain-based financial protocols and applications. |
deposit | The function to transfer user funds into Strategy. |
exit | The function to claim and sell down rewards, then return all funds in the associated Strategy back into the Vault. |
gas token | This is the contract that allows Unagii to tokenize gas on Ethereum. Unagii will store gas when it is cheap to do so, and spend the Gas Token when deployment and transaction costs are high. |
gas relayer | This enables the Bots to spend the Gas Token on a transaction that cuts transaction fees. |
harvest | The function to claim and sell down rewards into the most premium deposit token, then re-investing the token back into the vault, thereby compounding rewards. |
invest | Calls the Deposit function to transfer tokens from the Vault into the Strategy. |
skim | The function to update user balances according to the asset balance in the Strategy. It can only be called when the asset balance is more than the debt balance within the Strategy. |
strategy | Strategy determines how yield is generated and accrued. Each DeFi protocol has different sets of strategies. Unagii has curated a bank of whitelisted strategies handpicked by the team that will give users the best performing yields on their tokens. |
time lock | All new strategy contracts to be launched will be deployed behind a 24 hour time lock. It is currently managed by admin. The time lock will need to be called in order for new strategies to be approved. Users will be able to verify all of such events on-chain. |
withdraw | The function to withdraw tokens from the Strategy back into the Vault. |
V2 Vaults
Unagii Vaults V2 is the next iteration of the protocol with a slightly different architecture:
Vaults are upgradable by default as the Unagii Token contracts and the Vault contracts are separated, making it similar in design with Curve token and Curve pool contract
Smart contracts can interact (deposit/withdraw) from the vaults, which allows any developer to integrate with Unagii Vaults V2 (there is a block delay)
Vaults are protected from flash loan attacks as Unagii token tracks the lastest block number of the caller
Protected from sandwich attack on harvest as profit is vested over a period of time (6 hours for now)
Vaults are able to invest in multiple strategies, allowing the protocol to maximize returns by optimizing the allocation of funds to each strategy
Unagii Token
Name | Description |
mint | mint Unagii shares when user deposits. |
burn | burn Unagii shares when user withdraws. |
setMinter | set minter to Vault. this makes Unagii V2 upgradable. (only called by TimeLock). |
Vault
Name | Description |
deposit | user deposit token (DAI, USDC, USDT, ETH, WBTC), receives Unagii token in return. |
withdraw | user withdraws token (DAI, USDC, USDT, ETH, WBTC), Unagii token is burnt. |
setFundManager | set FundManager used to upgrade FundManager contract (only called by TimeLock). |
borrow | borrow user funds from Vault (only FundManager can call). |
repay | repay borrowed funds (only FundManager can call). |
report | report profit back to Vault. |
Fund Manager
Name | Description |
setVault | set Vault used to upgrade Vault contract (only TimeLock can call). |
approveStrategy | approve new strategy (only TimeLock can call). |
addStrategyToQueue | activate strategy (only approved strategy can be activated). |
removeStrategyFromQueue | deactivate strategy. |
setQueue | reorder activate strategies (order determines which strategy to withdraw from first). |
borrowFromVault | borrow user funds from Vault. |
repayVault | repay user funds to Vault. |
reportToVault | call report on Vault. |
withdraw | withdraw user funds from FundManager and activate strategies, back into Vault. |
Strategy
Name | Description |
borrow | borrow user funds from FundManager. |
repay | repay user funds to FundManager. |
report | report profit back to FundManager. |
withdraw | withdraw user funds back into FundManager. |
deposit | borrow from FundManager and invest into external DeFi. |
claimRewards / skim / harvest | claim profit. |
V3 Vaults
Unagii Vaults V3 further iterate upon the protocol with the following changes:
Implements the ERC-4626 standard for compatibility with other DeFi protocols
Gas cost optimizations for users and operators
Upgradable Swap contract allows us to choose the best AMM exchange rates for yield -> vault tokens in response to changing market conditions
Vault
Name | Description |
---|---|
deposit / mint | deposit asset token (USDC, ETH, etc) in exchange for Unagii vault tokens |
withdraw / redeem | exchange Unagii vault tokens for asset token (USDC, ETH, etc) |
addStrategy | adds a new strategy to strategy queue |
removeStrategy | withdraws all assets from strategy to Vault and removes it from strategy queue |
harvest / harvestAll | claim profit from strategies |
report / reportAll | re-balance assets within strategies |
collectFromStrategy | manually withdraws assets from strategy |
Strategy
Name | Description |
---|---|
harvest | claim profit from DeFi |
invest | deposit assets into DeFi |
withdraw | sends assets back to vault |
setSwap | set swap contract used (if necessary) |
Swap
Name | Description |
---|---|
setRoute | choose AMM to swap token pair with (e.g. Uniswap, Sushiswap) |
swapTokens | swap tokens along the assigned best route |
Last updated