Fixed-Point Arithmetic for Rate Computation

To compute base reward rate, base exchange rate, validator-specific exchange rates, and total validator voting power, we need to carefully perform arithmetic to avoid issues with precision and rounding. We use explicitly specified fixed-precision arithmetic for this, with a precision of 8 digits. This allows outputs to fit in a u64, with all products fitting in the output and plenty of headroom for additions.

All integer values should be interpreted as unsigned 64-bit integers, with the exception of the validator’s commission rate, which is a u16 specified in terms of basis points (one one-hundredth of a percent, or in other words, an implicit denominator of ). All integer values, with the exception of the validator’s commission rate, have an implicit denominator of .

Throughout this spec representations are referred to as , where , and the value represented by representations is .

As an example, let’s take a starting value represented in our scheme (so, ) and compute its product with , also represented by our fixed point scheme, so . The product is computed as

Since both and are both representations and both have a factor of , computing their product includes an extra factor of 10^8 which we divide out. All representations are u64 in our scheme, and any fixed-point number or product of fixed point numbers with 8 digits fits well within 64 bits.

Summary of Notation

  • : the fixed-point representation of the base rate at epoch .
  • : the fixed-point representation of the base exchange rate at epoch .
  • : the funding rate of the validator’s funding stream at index and epoch , in basis points.
  • : the sum of the validator’s commission rates, in basis points.
  • : the fixed-point representation of the validator-specific reward rate for validator at epoch .
  • : the fixed-point representation of the validator-specific exchange rate for validator at epoch .
  • : the sum of the tokens in the validator’s delegation pool.
  • : the validator’s voting power for validator at epoch .

Base Reward Rate

The base reward is an input to the protocol, and the exact details of how this base rate is determined is not yet decided. For now, we can assume it is derived from the block header.

Base Exchange Rate

The base exchange rate, , can be safely computed as follows:

Commission Rate from Funding Streams

To compute the validator’s commission rate from its set of funding streams, compute

where is the rate of validator ’s -th funding stream at epoch .

Validator Reward Rate

To compute the validator’s base reward rate, we compute the following:

Validator Exchange Rate

To compute the validator’s exchange rate, we use the same formula as for the base exchange rate, but substitute the validator-specific reward rate in place of the base reward rate:

Validator Voting Power

Finally, to compute the validator’s voting power, take: