Reward Mechanism

The objective of the protocol is to incentivize accurate estimation of market price (or accurate estimation of what everyone is estimating). To that effect, any rewards will be distributed based on the precision of pricing estimates measured by distance from the mean estimate.

Reward Pools

Bounties posted by Price Seekers are first divided into two reward pools:

  • Base Rewards offers a larger number of participating Price Experts relatively smaller financial rewards.

  • Bonus Rewards offers a smaller number of participating Price Experts a relatively larger financial reward.

Given our Two Way Pricing Estimates model, Base Rewards and Bonus Rewards are further subdivided into reward pools for bid and ask estimates.

Reward Criteria

Price Experts will be allocated Boosters based on precision levels of their price estimates measured by proximity to the respective mean bid and ask price estimates.

Precision levels are grouped in incremental intervals of ±0.1 points in Z-Score, of the pricing estimates submitted by the relevant Price Experts. Highest Booster goes to the group of Price Experts whose bid (or ask) estimates are closest to the mean bid (or ask) estimate. A Price Expert's share in the respective Reward Pool will be the their relative stake as multiplied by their respective Boosters.

In event that no Price Experts submitted any estimate within Z Score of ±1.0, the enquiry will be cancelled and all LITH and rewards staked will be refunded to the respective Price Seekers and Price Experts.

Reward Distribution

A Price Expert will be entitled to Rewards in the relevant Reward Pool (in four pools being Base Reward and Bonus Reward for each of the bid and ask estimates), in accordance with:

Rewardi=BoostedStakeijNBoostedStakej×RewardPoolReward_i = \frac{BoostedStake_i \:} {\sum_{j∈N}{\: BoostedStake_j\:}} \times RewardPool


BoostedStakei=Stakei×Boosterk[k=ZiZizCutOff]BoostedStake_i = Stake_i \times Booster_k\: [k= Zi \land Z_i \leq zCutOff]
BoostedStakejN=StakejN×Boosterk[k=ZjNZjNzCutOff] BoostedStake_{j∈N} = Stake_{j∈N} \times Booster_k\: [k= Z_{j∈N} \land Z_{j∈N} \leq zCutOff]
w.r.t.BaseReward,  BoosterkS=1kw.r.t.BonusReward,  BoosterkS=1k2_{w.r.t. Base Reward,}\; Booster_{k∈S} = \frac{1}{k} \\ \\_{w.r.t. Bonus Reward,}\; Booster_{k∈S} = \frac{1}{k^2}
  • N denotes the set of all Price Experts participating in the Enquiry

  • S denotes {0+step, 0+step×2, … , zCutOff }, where step= zCutOff / 10

  • zCutOff equals 1

  • i denotes Price Expert i

  • j denotes any Price Expert_j∈N

  • k equals Z_j∈N in respect of the pricing estimate submitted by a Price Expert_j∈N

  • RewardPool denotes the reward pool w.r.t. any of the four reward pools (as the case may be)

  • Stake_i denotes the amount of LITH staked by Price Expert i

  • Stake_j∈N equals the amount of LITH staked by Price Expert_x∈N

  • Z_i denotes the absolute value of Z-Score, as rounded up to 1 decimal point, of the pricing estimate submitted by the Price Expert i

  • Z_j∈N denotes the absolute value of Z-Score, as rounded up to 1 decimal point, of the pricing estimate submitted by any Price Expert_x∈N

  • [ ] denotes condition. Bracket value shall be 1 if the condition holds, otherwise 0

Reputation Adjustments

In addition to claims in the Reward Pools, Price Experts participating in a pricing enquiry will also receive adjustments in their reputation or RP. Unlike Reward Distributions in which Price Experts will only receive positive rewards, RP will be adjusted upwards or downwards based on the precision of a Price Expert's pricing estimate.

Adjustment for a Price Expert is in relation to either its bid or ask price estimate, and will be in accordance with:

rpAdjustmenti=rpAdjMultiplier×Round(log(Zi))rpAdjustment_i= rpAdjMultiplier × Round (-log(Z_i))

Provided rpAdjustment i shall be no less than (- rpAdjMultiplier / 2)


  • rpAdjMultiplier denotes a constant rebase factor determined by the protocol in the smart contract.

  • Z_i denotes the absolute value of Z-Score of pricing estimate submitted by the Price Expert as rounded up to 1 decimal point.

  • Round() denotes rounding up function to the nearest integer.

Last updated