I think the rewards should have 2 different criteria, one for eligibility and another to determine the % of rewards each participating address should receive.
Eligibility
Why not reward everyone?
Because someone registered online and not participating is harming the network. If enough stake does this, the network will stall.
In my opinion, the best way to ascertain proper participation is through voting.
I knew that soft and certification votes were not stored on-chain, but I didn’t realize that each node doesn’t necessarily use the same online accounts to reach certification.
This is correct. A node in the US may have recorded different cert votes than one in the EU, or one in Asia, because they will each record votes up to the required threshold to certify a block (70% iirc)
So there’s literally no way, when running a node, to be sure someone voted.
From a single node, you may indeed get skewed results, but I think I figured out a way around this:
You can query multiple relay nodes to get their recorded cert votes and build a set of voters based on their collective view of the network.
While not part of the blockchain, cert votes are recorded locally by each node - including relay nodes, which are regular algod nodes on top of being relays.
Querying a few relays in a few corners of the world should give you an excellent view of how participating nodes are voting system-wde. If you collected a superset of votes from, say: US West, US East, 2x EU and 2x Asia, then over time you should have a very decent view of how everyone is voting world-wide.
If we accepted this view as a reliable voting metric, the issue would then “simply” be figuring out the ever-changing voting rate expectation. Folks escrow accounts do not change balance much, but if the overall online stake number changes significantly, then the period cannot be considered as a static one and just take an average, but you have to slice time periods according to their total online stake. Still, this should be doable with math and a bit of elbow grease.
“wtf is this even legal?”
One of relay nodes’ function is that they serve blocks to nodes catching up, so retrieving blocks from them should not be a concern if done at the same rate as a syncing node (or slower, even.)
Voting is the vulnerable part
An extra reason to look at voting as an eligibility criterion is: voting is what would stall the network if 28% of the online stake stopped participating. Block proposers missing their turn is not the big problem - their turn would time out, and another would take their place. Even with 50% of the stake offline, block proposals would eventually take place. But if the critical threshold of voters is not voting, no proposed block would be certified, which would lead to a stalled network.
Voting also happens a lot more frequently than block proposals, so there is a lot more data to sample - whereas looking at block proposals would not be granular enough to determine if an address with ~ 1000 ALGO is doing a proper job of participating.
Rewards Distribution
First, my view about a flat-rate incentive is strictly negative. Anything other than a linear relationship between stake and rewards leaves the system open to a sybil attack: If I know that each participating address will get its equal share of the rewards, I can just spin up 20, 100, 200, 1000 addresses and do a half-assed job of participating (or not at all). This kind of sybil attack hasn’t been properly solved in blockchain aside from requiring KYC or centralizing the decision in some other fashion. If someone is dedicated enough and has a bit of scripting skill, gALGO commitment can be automated, so we aren’t even necessarily talking about someone clicking through the folks website a thousand times.
For similar reasons, voting is not a great metric to use for splitting the rewards. The relationship between stake and expected voting rate is roughly logarithmic.
This chart is from the article “To VRF or not to Vote?”:
As you can see the relationship has a roughly log shape. Again, as a participator you would be incentivized to split up your stake into smaller accounts in order to reap more rewards (by voting more frequently)
(continued)