@fod and Ariel thank you for your help in writing this spec.
Summary
This is the 3rd iteration of the incentivized testnet proposal, the original proposal can be found here.
The suggested reward allocation is set to 64K SSV tokens with the expectation that at around 2M SSV tokens staked + 15K validators the incentivization component will reach some equilibrium.
A rewards simulator can be found here.
In respect to the original proposal the following updated mechanics are suggested:
Mechanics
- 64K SSV tokens are to be minted as rewards for this proposal.
- The incentivization program will start at epoch 66,340 on the prater test net (roughly January 12, 2022 noon UTC).
- The program will run for ~4 months, 8 rewards distribution, each 2 weeks apart (3,150 epochs).
- The distributions durations (by which the individual rewards are calculated for):
- Distribution 1: epochs 66,340-69,490
- Distribution 2: epochs 69,490-72,640
- Distribution 3: epochs 72,640-75,790
- Distribution 4: epochs 75,790-78,940
- Distribution 5: epochs 78,940-82,090
- Distribution 6: epochs 82,090-85,240
- Distribution 7: epochs 85,240-88,390
- Distribution 8: epochs 88,390-91,540
- Each distribution is 8K SSV tokens
- Each distribution will have the following allocation table:
- Allocation A: 4K SSV tokens (50%) for validators which registered with an address holding SSV
- Allocation B: 1,200 SSV tokens (15%) for all validators (registered with addresses holding/ not holding SSV
- Allocation C: 1,400 SSV tokens (17.5%) for verified operators (including dAppnodes)
- Allocation D: 1,400 SSV tokens (17.5%) for all operators (verified and not verified)
- Bloxās operator will be excluded from rewards distribution
Validator Eligibility
- Anyone can register a 32 ETH validator.
- Each validator performing with at least 85% average attestation rate the previous 3,150 epochs (~14 days) is eligible.
- Abusive behaviour of the network (e.g. getting a hold of big amounts of goerli to register hundreds or thousands of validators) could result in exclusion from the incentivization program, decided by the communityās ambassadors, DAO and/ or Blox.
- A max of 1 new validator per day is allowed for the registering address to be eligible and not excluded.
- Rewards are claimable to the address that registered the validator from allocation B.
- Rewards per eligible validator is calculated by dividing allocation B by the number of eligible validators.
SSV holder registered validator Eligibility
- All validator eligibility conditions
- Every validator has a registering address, if that same address holds SSV tokens on mainnet then that address is eligible.
- A random snapshot to determine SSV balance is used to discourage manipulation.
- ri (see below) is the reward for a specific address that holds SSV and registered one or more validators.
- Rewards distributed from allocation A
SSV_i - amount of SSV held by registering address
Val_i - amount of validators registered by an address
Wi = SSV_i * Log(C * Val_i+1) - weight the registering address has towards rewards calculation
C - coefficient for validator count
W = āwi - Total weight of all eligible addresses
R - allocation A
r i= wi/W*R - rewards for a specific address
SSV Balance Snapshot
- A snapshot of SSV holders will be taken in a specific mainnet ethereum block for each distribution.
- A deterministic method for calculating the snapshot block is used by taking the first 4 bytes of the block root for each distributionās end epoch (the last slot of that epoch)
- Itās virtually impossible to predict that block root making the snapshot block pseudo-random.
b = time(distributionStart) - timestamp for the closest ethereum block to the distributions start epoch time, rounded down.
twoWeeksSec = 1209600 - two weeks in seconds
blockTimeStamp = b + integer(blockRoot[0:3]) % twoWeeksSec - taking the first 4 bytes of the block root for the end slot of the end epoch for a specific distribution, converting it to a number and adding to distribution start time to get an approximated block time stamp (the closest to it rounded down)
block = block(blockTimeStamp) - a block number given a timestamp.
Operators
- Every operator receives rewards based on the amount of eligible validators it is assigned to and its individual performance (For example, an eligible validator in which the operator has a score of 0 will not reward the operator)
- Operator score is calculated according to this
- Minimum eligibility score is 85% for each distribution duration
- ri(see below) is the reward for a specific operator.
- Rewards are claimable to the address that registered the operator.
- Rewards distributed from allocation D according to the below calculation
Verified Operators
- Same as all operators but with the additional rewards allocation.
- Verified operators include existing operators with the verified/ dAppnodes tag in the testnet web app.
- To become a verified operator please refer to this
- Rewards distributed from allocation C according to the below calculation
val_i - amount of validators the operator is assigned to
score_i- operatorās score for the entire distribution duration (docs)
wi=val_i * score_i - operatorās weight in rewards
W = āwi - sum of all operators weight
R- total rewards (allocation D and/ or C)
ri=wi/W*R- operator rewards
Whales and Abusive Behaviour
An abusive behaviour of the testnet can be in the form of a big SSV holder trying to kidnap a big portion of the rewards and/ or someone registering a big amount of validators.
If someone registers a big amount of validators from the same address it will be easy for the community to find it out and exclude that address (and validators).
A more sophisticated approach will be to split the above validators and register them from many different addresses. This will be harder to find though still possible if all those addresses receive goerli from one master address.
This type of abuse can happen but is limited to rewards allocation B.
Another type of abuse is a big SSV holder trying to ākidnapā a big portion of the rewards.
This can happen from a single or multiple addresses like before. This time there is a cost-benefit to it.
Because of the way weights are calculated there is a clear preference (in terms of rewards) to having a single address holding, say, 100K SSV tokens and registering 1K validators than 2 addresses holding, each, 50K SSV tokens and registering 500 validators each.
From an economic point of view thatās what an abuser will tend to do which makes it very easy to spot and exclude.
A more complicated scenario is a whale splitting his tokens and validators into multiple addresses, in which case he suffers a significant decrease in the overall rewards.
Considerations
- It is important to note that the testnet is still in development and could still have stability issues which might affect validator performance and subsequent rewards.
- Rewards calculations will be done in a centralized way by the community ambassadors and/ or Blox. Itās the responsibility of every testnet participant to check for errors and present them to the ambassadors and/ or Blox.
- Abuses of the testnet are not allowed and could result in exclusion from any current and future reward distributions.
- The testnet and rewards are made by and for the community to test out the network as an important step towards mainnet, THIS IS NOT A GET RICH QUICK OPPORTUNITY. If you expect to get rich out of this, we advise NOT to join the testnet.