This is the design document for the updated rewards process, to that end it includes the design for the original rewards process. It covers only the design of the sifnoded components and does not cover unlocking liquidity.
The rewards process mints native tokens and allocates them to pool liquidity providers. This is done every n’th block over a series of (admin) user specified periods.
A policy defines the precise behaviour of the rewards process, it consists of a list of periods and each period defines the rewards parameters for a specified set of blocks:
policy: [period]
period:
reward_period_id string
reward_period_start_block uint64
reward_period_end_block uint64
reward_period_allocation uint256
reward_period_pool_multipliers [pool_multiplier]
reward_period_default_multiplier 0 ≤ multiplier ≤ 10 max 18 decimals
reward_period_distribute bool
reward_period_mod u64
pool_multiplier:
pool_multiplier_asset string
multiplier 0 ≤ multiplier ≤ 1 max 18 decimals
reward_period_id
Not used
reward_period_start_block
Start block
reward_period_end_block
End block
reward_period_allocation
The amount of native asset to distribute over the period. The total amount of native asset allocated per block (over all pools) is calculated as:
reward_block_allocation = reward_period_allocation / (reward_period_end_block - reward_period_start_block)
Where the division represents integer division
reward_period_pool_multipliers, pool_multiplier_asset, multiplier, reward_period_default_multiplier
The amount of reward allocated for all the liquidity providers of a pool is:
pool_allocation = reward_block_allocation * (multiplier * native_asset_pool_depth) / sigma_pools ( multiplier * native_asset_pool_depth)
The multiplier is given by the assets corresponding entry in the reward_period_pool_multipliers list. If the asset does not have an entry in this list then the reward_period_default_multiplier is used. Here sigma_pools is a sum over all pools.
reward_period_distribute