This post was originally published here
The final phase of DF is live. 150K weekly OCEAN rewards, which will grow to 1M+. Earn by locking OCEAN and by Curating Data
Contents
1. Abstract
2. Introduction
3. veOCEAN Review
4. Data Farming Review
5. Walk-Through Numbers
6. On Implementing DF Main
7. Conclusion
(Plus Appendices)
Data Farming (DF) incentivizes for growth of Data Consume Volume (DCV) [0] in the Ocean ecosystem. Its final phase is DF Main. DF Main emits 503.4M OCEAN worth of rewards and lasts for decades.
DF Main starts Mar 16, 2023 in DF Round 29. DF29 has 150K OCEAN rewards available (a 2x increase from DF28). As DF Main progresses, rewards will increase to 300K (another 2x), then 600K (another 2x), then beyond 1.1M OCEAN/week (near 2x) then decaying over time.
As of DF29, wash consuming will no longer be profitable. So, organically-generated Data Consume Volume will be the main driver of active DF rewards.
Typical APYs are 5–20%.
Full implementation of DF Main will be over many months, after which DF will be decentralized. DF Main lasts for decades.
This article is a self-contained description of Ocean Data Farming (DF), including all the details that matter. It is up-to-date with the latest reward function, weekly OCEAN allocation, and estimates of APYs given the current amount of OCEAN staked.
The rest of this article is organized as follows.
Lock OCEAN → get veOCEAN → earn Data Farming rewards
veOCEAN. You can lock OCEAN to get veOCEAN. The amount of OCEAN you receive when the lock ends will always be equal to the amount you locked; plus there will be rewards in the meantime. To max out rewards, you must max out lock time (4 years) and amount of OCEAN locked.
Data Farming (DF) incentivizes for growth of Data Consume Volume (DCV) in the Ocean ecosystem. DF is like DeFi liquidity mining, but tuned for DCV. DF emits OCEAN for passive rewards and active rewards.
- As a veOCEAN holder, you get passive rewards by default.
- If you actively curate data by allocating veOCEAN towards data assets with high Data Consume Volume (DCV), then you can earn more.
Typical APYs are 5–20%, but may be as high as 45% and as low as 1%. APYs will vary week to week. The value depends on total OCEAN staked, duration of OCEAN lock, DCV, and other factors. The “Example APYs” section has details.
The DF schedule follows four phases:
- DF Alpha — rounds 1–4 (4 wks). 10K OCEAN / wk
- DF/VE Alpha — rounds 5–8 (4 wks). 10K OCEAN / wk
- DF Beta — rounds 9–28 (20 wks)
– DF Beta 1 — rounds 9–18 (10 wks). 50K OCEAN / wk
– DF Beta 2 — rounds 19–28 (10 wks). 75K OCEAN / wk - DF Main — rounds 29+ (decades)
– DF Main 1 — rounds 29–79 (52 wks). 150K OCEAN / wk, a 2x increase
– DF Main 2 — rounds 80–105 (26 wks). 300K OCEAN / wk, a 2x increase
– DF Main 3 — rounds 106–131 (26 wks). 600K OCEAN / wk, a 2x increase
– DF Main 4 — rounds 132–1000+ (decades). >1.1M OCEAN / wk (2x increase) then decaying over time.
DF Main has 503.4M OCEAN allocated, of OCEAN’s 1.41B capped supply. The “OCEAN Emissions Schedule” section plots OCEAN / week versus time, and more details.
DF Main starts today, Mar 16, 2023.
Use the veOCEAN page at the Data Farming webapp: df.oceandao.org/veocean. At it, you can lock OCEAN to get veOCEAN, see your veOCEAN balance, and more.
You could follow the url directly, or go to the main Ocean site (oceanprotocol.com) and click the prominent “Earn Rewards” button in the “veOcean & Data Farming” panel.
ve tokens have been introduced by several projects such as Curve and Balancer. These tokens require users to lock project tokens in return for ve.
In exchange for locking tokens, users can earn rewards. The amount of reward depends on how long the tokens are locked for. Furthermore, veTokens can be used for voting via data asset curation.
We rolled out veOCEAN to give token holders the ability to lock OCEAN to earn yield, and curate data.
People can lock their OCEAN up to 4 years to get veOCEAN. If someone locks 1,000 OCEAN, they get 1,000 OCEAN back at the end, plus rewards along the way.
veOCEAN supports passive locking of OCEAN by default. Users can get higher yield by active curation of data assets in the DF setting.
The core idea is: lock OCEAN for longer for higher rewards and more voting power. A locker can be passive, though they earn more if active.
You receive proportionally more veOCEAN for longer lock times, as follows:
- lock 1 OCEAN for 4 years → get 1.0 veOCEAN
- lock 1 OCEAN for 2 years → get 0.50 veOCEAN
- lock 1 OCEAN for 1 year → get 0.25 veOCEAN
- lock 1 OCEAN for 2 weeks → get 0.0096 veOCEAN = 2/ (4 * 52)
- lock 1 OCEAN for 1 week → get 0.0048 veOCEAN = 1 / (4 * 52) [but you only get rewards if >1 week]
Critically, veOCEAN cannot be unlocked before the pre-set time. If you’ve locked some OCEAN for a year, you can’t unlock it during that time. The amount of OCEAN you’ll receive when the lock ends will always be equal to the amount you locked.
You can always extend your lock time or the lock amount. But, lock time can not decreased.
veOCEAN is non-transferable. You can’t send it to others.
veOCEAN held decays linearly over time. If you lock 1.0 OCEAN for four years, you get 1.0 veOCEAN at the start. After 1 year, you have 0.75 veOCEAN; after 2 years → 0.5 veOCEAN; after 3 years → 0.25 veOCEAN; after 4 years → 0.0 veOCEAN, and your OCEAN is unlocked [1].
You can top up veOCEAN anytime by updating the lock time to > current time left, via the veOCEAN page in the DF app (df.oceandao.org/veocean).
For more details on veOCEAN, see “Introducing veOCEAN”.
The Data Farming webapp is at df.oceandao.org. It allows you to perform all the core DF activities like locking OCEAN for veOCEAN, and allocating veOCEAN to data assets.
DF incentivizes for growth of data consume volume in the Ocean ecosystem. It rewards OCEAN to veOCEAN holders who curate towards data assets with high consume volume. DF’s aim is to achieve a minimum supply of data for network effects to kick in, and once the network flywheel is spinning, to increase growth rate.
The Reward Function (RF) governs how active rewards are allocated to stakers.
Rewards are calculated as follows:
See “Appendix: DF Reward Function Details” for more information.
The Reward Function (RF) has evolved over DF rounds, as chronicled in the Data Farming Series posts.
To drive DCV further, we envision further evolution of DF Rewards. Besides tuning the existing function, we can split the weekly active DF rewards budget into DF sub-streams. New sub-streams could include:
- Dapp Data Farming. If a dapp running Ocean uses x$ of gas, pay the dapp developer 25–100% * x (denominated in OCEAN). This could be an excellent way for dapp developers to monetize [2]
- Competition Data Farming. At some point, some of the Ocean-run competitions (e.g. Predict-ETH) can get streamlined & automated enough to put into weekly DF ops.
- And more.
Note: this section was adapted from “Ocean Protocol Update || 2023“.
How to claim? Go to the DF Webapp at df.oceandao.org/activerewards
Where to claim? All earnings for veOCEAN holders are claimable in Ethereum mainnet. Though, data assets for DF may published in any network where Ocean’s deployed in production: Eth mainnet, Polygon, etc.
When to claim? There’s a new DF round every week; in line with this, there’s a new veOCEAN distribution “epoch” every week. This affects when you can first claim rewards. Specifically, if you lock OCEAN on day x, you’ll be able to claim rewards on the first ve epoch that begins after day x+7. Put another way, from the time you lock OCEAN, you must wait at least a week, and up to two weeks, to be able to claim rewards. (This behavior is inherited from veCRV. Here’s the code. )
Data assets that have veOCEAN allocated towards them get DF rewards.
The data asset may be of any type — dataset (for static URIs) or algorithm for Compute-to-Data. The data asset may be fixed price or free price. If fixed price, any token of exchange is alright (OCEAN, H2O, USDC, ..).
To qualify for DF, a data asset must also:
Data Farming is not a wholly passive activity. The name of the game is to drive data consume volume (DCV). High APYs happen only when there is sufficiently high DCV. High DCV means publishing and consuming truly useful datasets (or algorithms).
Thus, if you really want to max out your APY:
- create & publish datasets (and make $ in selling them) — or work with people who can
- consume the datasets (to make $) — or work with people who can
- go stake on them, and finally claim the rewards.
Driving DCV for publishing & consuming is your challenge. It will take real work. And then the reward is APY. It’s incentives all the way down:)
This section walks through example numbers: OCEAN emissions schedule, and estimated APYs.
The baseline emissions schedule determines the weekly OCEAN budget for this phase. The schedule is like Bitcoin, including a half-life of 4 years. Unlike Bitcoin, there is a burn-in period to ratchet up value-at-risk versus time:
- The curve initially gets a multiplier of 10% for 12 months (DF Main 1)
- Then, it transitions to multiplier of 25% for 6 months (DF Main 2)
- Then, a multiplier of 50% for 6 months (DF Main 3)
- Finally, a multiplier of 100%. (DF Main 4)
Because they are short, we implement the first three phases as constants. We implement the fourth phase as a Bitcoin-style exponential: constant, with the constant dividing by two (“halvening”) every four years.
Let’s visualize!
Emissions — first 5 years. The image below shows the first 5 years. The y-axis is OCEAN released each week. It’s log-scaled to easily see the differences. The x-axis is time, measured in weeks. In weeks 0–29, we can see the distinct phases for DF Alpha (DF1 // week 0), DF/VE Alpha (DF5 // week 4), DF Beta (DF9 // week 8), DF Main 1 (DF29 // week 28), DF Main 2 (DF80 // week 79), DF Main 3 (DF106 // week 105), and DF Main 4 (DF132 // week 131).
Emissions — First 20 years. The image below is like the previous one: OCEAN released per week, but now for the first 20 years. Week 131 onwards is DF Main 4. We can see that the y-value divides by two (“halvens”) every four years.
Compare halvening smooth exponential. The image below shows the blue curve identical to the previous image: OCEAN released per week for the first 20 years. As discussed, the first three DF main phases are constants, and the final DF main phase is exponential in Bitcoin-style “halvening” approach. For comparison, the black curve shows if all four DF Main phases were implemented with a smooth exponential. It’s interesting to see how the black curve slices through the blue curve. Blue is far simpler to explain (e.g. constant phases), and lower risk to implement.
Total OCEAN released. The image below shows the total OCEAN released by DF for the first 20 years. The y-axis is log-scaled to capture both the small initial rewards and exponentially larger values later on. The x-axis is also log-scaled so that we can more readily see how the curve converges over time.
The plot below shows estimated APY over time. Green includes both passive and active rewards; black is just passive rewards. As of DF29, wash consume is no longer profitable, so we should expect a large drop in DCV and therefore in active rewards. So passive rewards (black) provides a great baseline with upside in active rewards (green).
APYs are an estimate because APY depends on OCEAN locked. OCEAN locked for future weeks is not known precisely; it must be estimated. The plot shows the model for OCEAN locked in yellow. We model OCEAN locked by observing linear growth from week 5 (when OCEAN locking was introduced) to week 28 (now): OCEAN locked grew from 7.89M OCEAN to 34.98M OCEAN respectively, or 1.177M more OCEAN locked per week.
The plots are calculated from this Google Sheet.
OCEAN lock time affects APY. The numbers above assume that all locked OCEAN is locked for 4 years, so that 1 OCEAN → 1 veOCEAN. But APY could be much worse or more if you lock for shorter durations. Here are approximate bounds.
- If you lock for 4 years, and everyone else locks for 2, then multiply expected APY by 2. If you lock for 4 years and others for 1, then multiply by 4.
- Conversely, if you lock for 2 years and everyone else for 4, then divide your expected APY by 2. If you lock for 1 year and others for 4, then divide by 4.
- The numbers assume that you’re actively allocating veOCEAN allocation towards high-DCV data assets. For passive locking or low-DCV data assets, divide APY by 2 (approximate).
Ratchet Principle. As DF main involves a huge amount of OCEAN, we take extra precautions and follow the principle “ratchet up value-at-risk over time”. What this means: rather than sending all this OCEAN directly to the vesting contracts, we “buy time” to more thoroughly verify the system
Changes for DF29. For DF29, the implementation changes can be surprisingly small: (a) increased OCEAN rewards to 150,000 (b) multiplier for DCV bounds auto-sets to 0.1%, which makes wash consume unprofitable. As usual, we deploy DF rewards with a combination of manual dispensing and Github Actions (Web2 automation).
Implementation over time. Then we can ratchet up value at risk as we deploy more components, and put OCEAN into them. Here’s the order of operations.
- Deploy canary, wire it up. First we will deploy a “canary” vesting contract for DF Main 1. Wire it together with the rest of DF stack, including Gelato for Web3 automation. Send the contract a small amount (1000 OCEAN). It will dispense through components to DF passive & active rewards addresses. (Weekly payouts will draw from this plus the main DF payment multisig; the latter being far larger.)
- Verification. This allows us to test the system live, in production yet with a small amount of funds at risk. At the same time, we will initiate a bug bounty program and security audit for all these components.
- Weekly rewards keep rolling. OCEAN payouts for DF29, DF30, etc will be as scheduled for DF main. A tiny amount will come from the “canary” vesting contract, and the rest will be topped up manually by the Ocean core team.
- Deploy the rest. Once the verification is complete, then we will deploy the remaining contracts and move the remaining OCEAN accordingly.
This Github issue has details of the plan.
Final outcome. In completing the implementation work above, OCEAN vesting will be fully automated and on-chain. Then we will tackle decentralizing DF-main reward calculations, leveraging advances in decentralized compute infrastructure. This will serve the Ocean ecosystem well in the decades that follow, with more transparency, stability, and composability.
Data Farming (DF) incentivizes for growth of Data Consume Volume (DCV) in the Ocean ecosystem. Its final phase is DF Main. DF Main emits 503.4M OCEAN worth of rewards and lasts for decades.
DF Main starts Mar 16, 2023 in DF Round 29. DF29 has 150K OCEAN rewards available (a 2x increase from DF28). As DF Main progresses, rewards will increase to 300K (another 2x), then 600K (another 2x), then beyond 1.1M OCEAN/week (near 2x) then decaying over time.
As of DF29, wash consuming will no longer be profitable. So, organically-generated Data Consume Volume will be the main driver of active DF rewards.
Typical APYs are 5–20%.
Full implementation of DF Main will be over many months, after which DF will be decentralized. DF Main lasts for decades.
Final caveat: we reserve the right to make reasonable changes to these plans, if unforeseen circumstances emerge.
Q: I staked for just one day. What rewards might I expect?
At least 50 snapshots are randomly taken throughout the week. If you’ve staked just one day, and all else being equal, you should expect 1/7 the rewards compared to the full 7 days.
Q: The datatoken price may change throughout the week. What price is taken in the DCV calculation?
The price is taken at the same time as each consume. E.g. if a data asset has three consumes, where price was 1 OCEAN when the first consume happened, and the price was 10 OCEAN when the other consumes happened, then the total DCV for the asset is 1 + 10 + 10 = 21.
Q: Can the reward function change during a given week?
No. At the beginning of a new DF round (DF1, DF2, etc), rules are laid out, either implicitly if no change from previous round, or explicitly in a blog post if there are new rules. This is: reward function, bounds, etc. Then teams stake, buy data, consume, etc. And LPs are given DF rewards based on staking, DCV, etc at the end of the week. Overall cycle time is one week.
Caveat: it’s no at least in theory! Sometimes there may be tweaks if there is community consensus, or a bug.
The table below cross-references DF round number (DF i), start date, phase & week, sub-phase & week, and OCEAN rewards / week.
Community Fees to veOCEAN holders. Earlier, we established how veOCEAN holders earn passive and active rewards through Data Farming.
veOCEAN holders actually have a second source of revenue: community fees. Specifically: Every transaction in Ocean Market and Ocean backend generates transaction fees, some of which go to the community. 95% of the community fees will go to veOCEAN holders; the rest is used to buy back & burn OCEAN. All earnings here are passive.
Flow of Value. The image below illustrates the flow of value. On the left, at time 0, the user locks their OCEAN into the veOCEAN contract, and receives veOCEAN. In the middle, the veOCEAN holder receives OCEAN rewards every time there’s revenue to the Ocean Protocol Community (top), and also as part of DF rewards (bottom). On the right, when the lock expires (e.g. 4 years) then the user is able to move all their OCEAN around again.
Earlier, we described the Reward Function (RF) in text. For thoroughness, here is the RF code. With the tunings, code is cleaner than math. It’s from calcrewards.py in the Ocean Protocol df-py repo.
def _calcRewardsUsd(
S: np.ndarray,
V_USD: np.ndarray,
C: np.ndarray,
DCV_multiplier: float,
OCEAN_avail: float,
do_pubrewards: bool,
do_rank: bool,
) -> np.ndarray:
"""
@arguments
S -- 2d array of [LP i, chain_nft j] -- stake for each {i,j}, in veOCEAN
V_USD -- 1d array of [chain_nft j] -- nftvol for each {j}, in USD
C -- 1d array of [chain_nft j] -- the LP i that created j. -1 if not LP
DCV_multiplier -- via calcDcvMultiplier(DF_week). Is an arg to help test.
OCEAN_avail -- amount of rewards available, in OCEAN
do_pubrewards -- 2x effective stake to publishers?
do_rank -- allocate OCEAN to assets by DCV rank, vs pro-rata
@return
R -- 2d array of [LP i, chain_nft j] -- rewards denominated in OCEAN
"""
N_i, N_j = S.shape# corner case
if np.sum(V_USD) == 0.0:
return np.zeros((N_i, N_j), dtype=float)
# modify S's: owners get rewarded as if 2x stake on their asset
if do_pubrewards:
for j in range(N_j):
if C[j] != -1: # -1 = owner didn't stake
S[C[j], j] *= 2.0
# perc_per_j
if do_rank:
perc_per_j = _rankBasedAllocate(V_USD)
else:
perc_per_j = V_USD / np.sum(V_USD)
# compute rewards
R = np.zeros((N_i, N_j), dtype=float)
for j in range(N_j):
stake_j = sum(S[:, j])
DCV_j = V_USD[j]
if stake_j == 0.0 or DCV_j == 0.0:
continue
for i in range(N_i):
perc_at_j = perc_per_j[j]
stake_ij = S[i, j]
perc_at_ij = stake_ij / stake_j
# main formula!
R[i, j] = min(
perc_at_j * perc_at_ij * OCEAN_avail,
stake_ij * TARGET_WPY, # bound rewards by max APY
DCV_j * DCV_multiplier, # bound rewards by DCV
)
...
return R
The veOCEAN & DF contracts are deployed to Ethereum mainnet, alongside other Ocean contract deployments. Full list.
{
“veOCEAN”: “0xE86Bf3B0D3a20444DE7c78932ACe6e5EfFE92379”,
“veAllocate”: “0x55567E038b0a50283084ae773FA433a5029822d3”,
“veDelegation”: “0xc768eDF2d21fe00ef5804A7Caa775E877e65A70E”,
“veFeeDistributor”: “0x256c54219816603BB8327F9019533B020a76e936”,
“veDelegationProxy”: “0x45E3BEc7D139Cd8Ed7FeB161F3B094688ddB0c20”,
“veFeeEstimate”: “0xe97a787420eD263583689Bd35B7Db1952A94710d”,
“SmartWalletChecker”: “0xd7ddf62257A41cc6cdAd7A3d36e4f1d925fD142a”,
“DFRewards”: “0xFe27534EA0c016634b2DaA97Ae3eF43fEe71EEB0”,
“DFStrategyV1”: “0x545138e8D76C304C916B1261B3f6c446fe4f63e3”,
}
veFeeDistributor has a start_time of 1663804800 (Thu Sep 22 2022 00:00:00)
[0] Data Consume Volume (DCV) is the USD$-denominated amount spent to purchase data assets and consume them, for a given time period (e.g. one week)
[1] veOCEAN held decays linearly over time. You can calculate the balance as follows: veOcean_balance = OCEAN_amount_locked * (your_unlock_timestamp — current_unix_timestamp ) / 60 * 60 * 24 * 7 * 52 (that is 4 years)
[2] It’s a bit like how NEAR and Canto L1s pay a % of tx fees to dapp developers.