Arthera's proof-of-stake consensus is the set of processes that determine which nodes become validators and how incentives are distributed to secure the network.
Validator nodes are responsible for generating and validating blocks. In return they will receive block rewards and a percentage of transaction fees and subscription fees. Based on their performance and reputation, validator nodes are assigned a score. They are incentivized to act in accordance with the network because they are subject to penalization (slashing) if they behave maliciously.
Staking and Delegation
Users will be able delegate a portion of their tokens to validating nodes. Validators will not be able to spend delegated tokens, which will remain secured in the user’s own address. Validators will receive a fixed proportion of the validator fees attributable to delegators. They will therefore compete based on their performance and not on fees. Higher performing node, with more reliable uptimes, will earn higher returns. Delegators will be incentivised to choose nodes that have a high validator score, i.e. are reliable and high performing.
A validators needs a minimum amount of AA coins to be able to join the network. They also have a maximum cap based on how much coins they have staked:
- Minimum stake: 100,000 AA
- Maximum stake: 15 * Minimum stake
- Estimated APY for Mainnet: 15%
Validator rewards are calculated and distributed at the end of each epoch. A validator's reward is weighted by 2 independent numbers:
transactions reward weight: share of transaction fees the validator will receive at the end of epoch.
base reward weight: share of base reward (newly minted coins) the validator will receive at the end of epoch.
Reward weights are calculated at the end of each epoch using the formulas below:
transactions reward weight = originated fee * uptime
base reward weight = stake * (uptime ^ 2)
stakeis the sum of delegations to validator (including validator's self-delegation)
uptimeis the total number of nanoseconds the validator was online in the epoch. It's also called the validation score.
originated feeis the total fees of transactions that the validator originated in the epoch ("originated" means "included into event"). It's also called origination score.
A list of properties which may be concluded from formulas:
originated feemay be roughly estimated as
stake share * uptime * network fee per nanosecond. If we substitute estimation into transactions reward weight formula, then we'll get
(stake share * uptime * network fee per nanosecond) * uptime.
uptimeinfluences the reward in a non-linear way. If a validator has 50% uptime in epoch, he'll receive approx. 4 times smaller rewards in that epoch.
stakeinfluences base reward linearly, and influences transactions reward weight linearly on average.
Validator rewards are split in three parts:
base rewards, calculated as
epoch duration in second * base reward per second, are inflationary rewards given by the protocol to hones validators, proportional to their
base reward weight
transaction rewardsare rewards from transaction fees. The protocol burns 30% of transaction fees. 70% of burnt fees plus 70% of the remaining total transaction fees are distributed to validators according to their
transactions reward weight
subscription rewardsare rewards from subscription fees. All subscription fees in an epoch are distributed to validators according to their
transactions reward weight
Delegators receive rewards according to their stake and will pay a 15% commission to the validator for their rewards.
Downtime is calculated as a difference time of
last block-time of last block where validator had at least 1 event.
Downtime has 2 numbers:
number of missed blocks and
time of missed blocks. If validator missed not more than 50 blocks,
then downtime should be interpreted as 0, because it may be possible that validator has a right to emit events slower
than other validators.
Uptime in an epoch is calculated differently. It's reset to 0 every epoch, and during processing of i'th block,
uptime is incremented by
block[i].time-block[i - min(number of missed blocks, 50)].time.
According to the formulas above, missing of no more than 50 blocks in a raw doesn't affect uptime.
If validator has downtime >= 72 hours (but not less than 1000 blocks), then he's permanently pruned from validators list. In this case, validator and delegators have to withdraw their stake via the Staking contract using the withdrawal procedure.
Validators and delegators can choose to lock their stake for a longer duration to get higher rewards.
The reward for a non-locked stake is set at
baseRate = 30% from the full reward for a locked stake.
The lockup duration proportionally increases the rate of rewards, according to the formula below.
fullReward is the maximum reward for a locked stake, the formula is:
reward = fullReward * (baseRate + (1 - baseRate) * lockupDuration / Staking.maxLockupDuration())
A delegator can choose to unlock a locked stake prematurely, before the lockup period expires. In this case, a penalty will be applied using the formula:
(base rate = 30%) / 2 + lockup rate of rewards received for epochs during the lockup period