Skip to main content

Uploader Reward Calculation

Introduction

To incentivize protocol validators to stay online and continue uploading and validating data nodes receive a reward in $KYVE for every valid bundle proposed. This reward depends on the size of the data uploaded, the specified operating cost of the pool and the share of the inflation the pool receives. Once the total bundle reward is charged from the funders and the inflation share (Inflation Splitting) the reward gets distributed to all stakeholders which are the treasury, the uploader and its delegators.

Bundle Reward

First the funders are charged with the operating cost. This should cover as the name already suggests the base operating costs of the validator nodes. In addition, the inflation share is added which further rewards the uploader and its delegators.

Network Fee

The network fee collects a part of the bundle reward and transfers it to the community pool where the governance can decide how to use those funds. It is usually around 1-2% and can be found in the params of x/bundles. This gets deducted first from the total bundle reward.

Storage Cost

The storage cost is a param in x/bundles and determines how much $KYVE the uploader should receive for uploading a specific size of data. This gets deducted after the network fee and credited directly to the uploader and not its delegators.

Commission

Because the uploader has to share his rewards with delegators and the uploader's stake also counts as a normal delegation the uploader would earn the same rewards as a normal delegator who just delegated the same amount. This is of course unfair, since the node operator is putting way more work and capital in form of server costs and maintenance.

For this reason the commission was introduced, giving the node operator the option of setting a percentage of how much of the remaining bundle reward he directly receives. If the commission is at 0% the node operator does not earn anything extra and has the same rewards as a normal delegator. If the commission is 100% the node operator receives the full remaining bundle reward, leaving nothing for the delegators. Here of course the commission has to be chosen carefully by the node operator, choosing a too low commission could result in a loss for the operator, choosing it too high would result in users not delegating to your node. After the commission is then finally deducted the remaining reward is called the delegation reward. More information on how the delegation reward gets distributed between all delegators can be found on the next page.

info

NOTE: This means that the node operator always has two sources of income, the commission rewards and the delegation rewards from his self delegation.

Reward Parameters

The current reward parameters can be found below. The operating cost is the parameter which is not globally set and defined in each pool itself where the bundle reward is applied.

MainnetKaonKorellia
Network Fee* % % %
Storage Cost* tkyve tkyve tkyve
Operating Costper Poolper Poolper Pool

*Updated at

These parameters can only be updated via the governance.

Calculation

The total bundle reward is calculated as follows:

total_bundle_reward=operating_cost+(pool_account_balanceinflation_payout_rate)\begin{aligned} total\_bundle\_reward = operating\_cost + (pool\_account\_balance \cdot inflation\_payout\_rate) \end{aligned}

From the total bundle reward the network fee gets first deducted and transferred.

treasury_reward=total_bundle_rewardnetwork_fee\begin{aligned} treasury\_reward = total\_bundle\_reward \cdot network\_fee \end{aligned}

After the network fee got deducted we further deduct the storage reward and credit it to the uploader directly to cover his storage costs:

storage_reward=data_sizestorage_cost\begin{aligned} storage\_reward = data\_size \cdot storage\_cost \end{aligned}

This yields our remaining bundle reward which is split between uploader and its delegators:

bundle_reward=total_bundle_rewardtreasury_rewardstorage_reward\begin{aligned} bundle\_reward = total\_bundle\_reward - treasury\_reward - storage\_reward \end{aligned}

The commission reward for the uploader can then be calculated with:

commission_reward=bundle_rewardcommission\begin{aligned} commission\_reward = bundle\_reward \cdot commission \end{aligned}

The remains are distributed to the delegators:

delegation_reward=bundle_rewardcommission_reward\begin{aligned} delegation\_reward = bundle\_reward - commission\_reward \end{aligned}

where

  • total_bundle_rewardtotal\_bundle\_reward = is the total bundle reward paid out from the pool
  • operating_costoperating\_cost = the fixed base reward per pool in ukyve
  • pool_account_balancepool\_account\_balance = the current account balance of the pool from inflation splitting
  • inflation_payout_rateinflation\_payout\_rate = the rate in % at which the pool account should be charged
  • network_feenetwork\_fee = the percentage of how much goes to the community pool as a fee
  • data_sizedata\_size = the amount of bytes in bundle proposal
  • storage_coststorage\_cost = the reward per byte in ukyve
  • bundle_rewardbundle\_reward = the remaining bundle reward for uploader and its delegators
  • commissioncommission = the commission percentage chosen by the node operator
  • commission_rewardcommission\_reward = is the reward the uploader receives through commission
  • delegation_rewarddelegation\_reward = the rewards delegators receive for securing the network