Decentralized Revenue Aggreagators

Maximizing Yield through Decentralized Strategies

Zunami's ecosystem comprises two Omnipools, catering to both USD-pegged and ETH-pegged stablecoins. Each Omnipool represents a collection of strategies, with the flexibility to accommodate an unlimited number of them. These strategies undergo rebalancing and differentiation based on DAO voting. Operating as a Yield Aggregator, Omnipools enhances liquidity by deploying funds across various strategies and distributed generated profits to ZUN stakers.
Ethereum Version. Base Concept
Zunami Omni pool enables deposit stablecoins, Regardless of which strategy the funds were allocated to, each depositor in Zunami will receive a zunStables proportional to their contribution to the protocol. These zunStables are minted atop Omnipools, and each zunStable is intrinsically backed by its corresponding Omni pool.
The community and Zunami's team diligently assess the risk profiles of stablecoin allocations. Through DAO voting, decisions are collectively made regarding strategies and asset rebalancing. This dynamic process ensures users enjoy optimal yields while diversifying their investments across trusted pools. Notably, Zunami operates as a fully decentralized protocol, with all activities within Omni pools governed through on-chain DAO voting.
Profits generated by Omnipools are shared among ZUN token stakers. Moreover, these stakers bear financial responsibility in the event of recapitalization, thereby fostering maximum alignment of interests.


In the dynamic DeFi landscape, achieving peak yields necessitates engagement with multiple protocols. Zunami simplifies this complex process by offering various strategies and automating these actions within a single transaction. Zunami's mechanism places stablecoins into a range of strategies, which which in turn puts them as LP into Curve pools, receives Curve LP, and then stakes them in Convex or StakeDAO reward contracts (Gauges).
zunUSD Omni Pool
zunETH Omni Pool
The addition of new strategies and the determination of their weight within Omni pools solely occur through DAO voting. In instances of reduced collateral for zunStables, a recapitalization (ссылка) process is initiated to restore the necessary backing.


The are two types of pools exist on Convex. Pools with [CRV, CVX] rewards and [CRV, CVX, Additional rewards...].
Let's define some variables that we need fo calculation:
Where i is pid of Convex reward poollpiprice of lp tokentsitotal supplyrireward rateatpiadditional token priceariadditional reward ratecurveAPRibase Curve APRperiodFinishidate (timestamp) when reward for pool will be disabledcvxCliffs=cvxTotalCliffscvxTotalSupplycvxReductionPerCliffcvxRewardPrice=cvxPricecvxCliffscvxTotalCliffs\text {Where } i \text { is pid of Convex reward pool} \\ lp_i - \text {price of lp token} \\ ts_i - \text {total supply} \\ r_i - \text {reward rate} \\ atp_i - \text {additional token price} \\ ar_i - \text {additional reward rate} \\ curveAPR_i - \text {base Curve APR} \\ periodFinish_i - \text {date (timestamp) when reward for pool will be disabled}\\ \allowbreak\\ cvxCliffs = cvxTotalCliffs - \frac{cvxTotalSupply}{cvxReductionPerCliff}\\ \allowbreak\\ cvxRewardPrice = \frac{cvxPrice * cvxCliffs}{cvxTotalCliffs} \\ \allowbreak\\
Also, we need a binary function for make a decision based on the current timestamp:
f(z)={0if z<currentTimestamp1if z>currentTimestampf(z) = \begin{cases} 0 &\text{if } z < currentTimestamp \\ 1 &\text{if } z > currentTimestamp \end{cases}
And some constants:
Seconds in ETH block is 15Blocks per year in ETH is 2102400\text {Seconds in ETH block is } \boldsymbol{15} \\ \text {Blocks per year in ETH is } \mathbf{2102400} \\

Pools APR calculation formula

Based on the following formula, we can calculate annual percentage rate (APR):
APRi=curveAPRi+f(periodFinishi)152102400cvxRewardPriceritsilpi+f(periodFinishi)152102400cvxPriceritsilpi+k=0Nf(periodFinishk)152102400atpkarktsilpi=curveAPRi+f(periodFinishi)31536000ri(cvxRewardPrice+cvxPrice)TVLi+k=0Nf(periodFinishk)31536000atpkarkTVLi,where k is pid of additional reward poolTVLi=Total value locked in pool APR_i = curveAPR_i + f(periodFinish_i)* \frac{15 * 2102400 * cvxRewardPrice * r_i}{ts_i * lp_i} + \\ f(periodFinish_i)* \frac{15 * 2102400 * cvxPrice * r_i}{ts_i * lp_i} +\sum_{k=0}^{N} f(periodFinish_k) * \frac{15 * 2102400 * atp_k * ar_k}{ts_i * lp_i} = \\ \allowbreak \\ curveAPR_i + f(periodFinish_i)* \frac{31536000*r_i*(cvxRewardPrice + cvxPrice)}{TVL_i} + \\ \sum_{k=0}^{N} f(periodFinish_k) * \frac{31536000 * atp_k * ar_k}{TVL_i} , \text {where k is pid of additional reward pool} \\ \allowbreak \\ TVL_i = \text {Total value locked in pool }
In this formula we calculate the APR for CRV, CVX and APR for an additional reward pools. The final APR is the sum of them (If we are not in the time interval when the pool is disabled)

APY for pools

APY (Annual Percentage Yield) can be found from APR:
APYi=(1+APRin)n1, where n compounds period in yearAPY_i = (1 + \frac{APR_i}{n})^n-1 \text {, where } n \text { compounds period in year}
Last modified 2mo ago