I like this overall design a lot. I see two small issues and have small tweaks to address them.
Issue 1: Can be gamed by “hopping” in and out of smoothing pool
The design allows for opting in at any point. A strategy with positive expected value is to not participate in the smoothing pool and monitor the pool performance. If pool participants get sufficiently lucky during one reward period, then opt in for the remainder. Now you start earning shares of an above average reward pool and dilute people that have been in the pool from the beginning.
Proposed Solution
People can signal to opt-in/opt-out at any time, but it gets executed only at start/end of a reward interval.
Issue 2: Commission rate of nodes is ignored
As @objectObject points out above, commission is socialized. For nodes with low average collateral this design has positive expected value and for nodes with high average collateral it has negative expected value. This could lead to a race to the bottom where the smoothing pool is only attractive to 5% commission node operators and everybody else is forced to opt out.
Proposed Solution
- Let
node_attestation_share = node_successful_attestations / total_successful_attestations
the same thing @objectObject callsnode_rewards_share
above - Let
node_avg_commission
be the average over all minipools of one node - Calculate
staking_pool_rewards
based on the node_attestation_share weighted average ofnode_avg_commission
- Calculate a nodes rewards as
0.5 * node_attestation_share * (1 + node_avg_commission)