UPDATE: For quick reading
SPARK NOTES (TLDR) SUMMARY 
Attributes
- **Author(s): @shane
- **Parameter: MaximumChains (the maximum amount of chains a servicers can serve)
- **Current Value: 15
- **New Value: TBD (considering between 1-3)
Summary
Since POKTâs birth, MaximumChains
has been set to 15
. This number was arbitrarily picked at the start for the network. 15
chains per servicer was beneficial early on since POKT wanted to be able to add new chains rapidly with a small node community, and allowing a server to serve many chains was a great way to enable that.
However, after having talked to many in the POKT ecosystem, no one actually knows the measurable effects MaximumChains
has on POKT today, so Iâve done independent research into accurately modeling out real world effects of the MaximumChains
parameter. This research can now be used for data driven decision making for MaximumChains
in both v0 and v1.
The conclusion I have drawn from this research, is that with POKTâs very mature node ecosystem, having MaximumChains
at 15
is negatively effecting POKTâs economics, QoS, and decentralization. I am proposing we change this parameter to 1
, 2
, or 3
, and am first submitting this as a pre-proposal to start a community discussion on what the proper number should be.
In the past year, POKTâs node ecosystem has been progressively becoming less open (through increased complexity), centralized, and imbalanced, and MaximumChains
only acts as an accelerant when set at 15
. By addressing MaximumChains
we could remove a lot of friction and imbalance within the POKT ecosystem, while potentially encouraging node growth.
I am calling this proposal GANDALF, which stands for âGrowth Acceleration, Node Decentralization, And Load Fairnessâ. GANDALF is here to protect all, including the little guys.
Abstract
The GANDALF Model spreadsheet
is a complete look at how the POKT chain ecosystem balances and the effects of
MaximumChains
. Here is an outline of the different pages:
Settings
- Where you can update the chain information from POKTScan and set other variables.Today
- Shows how POKT looks like today withMaximumChains
set to15
.Gandalf
- Same layout as Today page, but allows you to change theMaximumChains
, see the suggested balanced outcome, and introduce imbalance through Column H.Gandalf w/ Today's Imbalance
- Similar to the Gandalf page, but shows the effects of theMaximumChains
on the Gandalf page, but with todayâs imbalance. This shows what the effect of todayâs imbalance would have of differentMaximumChains
settings.
A BALANCED POKT WORLD
POKT TODAY
Before we can determine what the MaximumChains
should be, we need to understand what a perfect world looks like for each MaximumChains
variable. We can introduce imbalance later, but for now, we need to see how the system is suppose to work.
To understand POKT, letâs first look at the Today page which has itâs MaximumChains
set to 15
. We can see how many nodes should be staked on each chain and how many relays each node would expect in a balanced world.
Already we can some interesting features of MaximumChains
set to 15
, where Ethereum through Optimism are best balanced with every node on the networked staked on them. These 8 chains are âMoney Chainsâ, and even with all nodes staked on them, they would still generate more rewards than all other chains because they have a lot of relays.
Starting with Klaytn however, the amount of relays on the chain require less nodes to serve it. In a perfect world, with node balanced across each chain, all chains (besides the Money Chains) would serve 1,419 relays a day and generate .31 POKT.
CHANGING MaximumChains
Now lets see what happens when we change the MaximumChains
to something like 1
. This means that each servicer on the network can only serve 1
chain. To do this, move over to the Gandalf page and set A2 to 1
.
Now we see something interesting:
There are no longer Money Chains, and each chain would serve 65k relays a day, and 14 POKT a day. This means each node does not need to serve the 8 money chains to get close to network average⌠they instead need to simply serve a single chain.
All chains now have the ability to generate the same amount of rewards per node in a balanced network. Instead of a node runner needing to run 15 chains to make network average, a node runner could just run a single chain node.
Main Takeaways
When looking at what a balanced network would look like we can already draw several conclusions from
MaximumChains
being set to15
:
- A single node requires 15x the amount of infrastructure compared to
MaximumChains
being set to1
- The 8 Money Chains generate the vast majority of rewards for POKT nodes, whereas if
MaximumChains
was set to1
then all chains could generate the same amount of rewards per POKT node.
AN IMBALANCE POKT WORLD
While looking at things from a balanced place shows us how the system is technically designed to reward each chain, the real world isnât perfectly balanced. GANDALF allows imbalance to be introduced to see what the effects of imbalance would be on different MaximumChains
settings.
POKT TODAY
When looking at the Today page (which has imbalances pulled from POKTScan data), lets look at a chain like Moonbeam to understand the effects of imbalance with MaximumChains
set to 15
. You can see that Moonbean should have 3,229 nodes to be balanced, however it currently has 8,543 nodes. This means that for Moonbeam to be balanced, 5,314 nodes should be subtracted and staked on other chains.
Moonbeam has a provisioning of 265%, which is 165% over the 100% it is supposed to be for balance.
What effect does this imbalance have on the network?
This imbalance means that each serviceer staked on Moonbeam is only generated .12 POKT per day, instead of the balanced amount of .31. So the effect of this imbalance is those nodes are losing essentially -.19 POKT per day.
As you can see, this imbalance has very little effect. -.19 POKT is very little to worry about. On most chains, extreme imbalance has very little effect since Money Chains are where the bulk of a nodes rewards come from.
Main Takeaway
When looking at what an imbalanced network we can already draw several conclusions from
MaximumChains
being set to15
:
- Imbalance is barely penalized.
- A few Money Chains will always generate most of a nodeâs rewards.
CHANGING MaximumChains
Now letâs see how that imbalance with Moonbeam was applied to when MaximumChains
was set to 1
. To do this set A2 on the Gandalf page to 1
then go to the Gandalf w/ Todayâs Imbalance. This page applies the same Provisioning imbalance (Column K) from the Today page to the MaximumChains
set in Gandalf.
If Moonbean was provisioned at 265% (which is 165% over what it should be), then the effect would be as follows:
Nodes overstaked on Moonbeam would now be receiving a reward hit of -8.74 POKT per day. So instead of just losing -.19 (like it is today) nodes would be losing -8.74 POKT per day. This substantial reward drop for overstaked chains would mean the network would be naturally incentivize to have balance across all chains.
A node runner may be willing to remain on overstaked chains if the penalty is only -.19 POKT⌠but if the penalty is -8.74 POKT, that would require moving nodes to an undeserved chain.
Main Takeaway
When looking at what an imbalanced network we can already draw several conclusions from
MaximumChains
being set to1
:
- Imbalance is harshly penalized.
- Balance across all chains are naturally incentivized.
Motivation/Rationale
Fix Rare Chains
Currently some chains on the POKT network generate such little rewards that few bother to support them. This is why a Rare Chain Supplement was introduced in DAN. However, this was only meant to be a temporary measure, and a long term measure is needed.
GANDALF is a long term solution. By incentivizing balance across the network, node runners have to split up from primarily serving Money Chains, and focus a balance spread across all chains.
Enable Reasonable Independent Node Running
Currently, a node runner has to run at least the 8 Money Chains to be close to network average rewards. By reducing the MaximumChains
to something like 1
, then any independent node runner can start generating rewards by just serving a single chain.
Independent node running has always been a key part of POKTâs mission, but it has all but been extinguished through:
- High infra costs
- GeoMeshing
- Increased complexity
By reducing MaximumChains
, it can be economical for folks to run POKT nodes from home computers.
Encourage Node Growth
POKT was originally purposed to be a network where if someone was already running a chain node, they could stake POKT nodes on top to generate extra revenue for their nodes. I was the first node salesman for PNI, and that was the standard pitch to folks already running nodes from other chains.
When we first wanted to launch Avalanche as a new chain in August of 2021, they hosted a Twitter space for Michael and myself where Michael pitched how this is a way for their community to serve AVAX applications and generate reward from it. Today however, that pitch is all but dead because there is no reason to node run unless you can support many other expensive chains you know nothing about. That marketing has been dead for POKT, but we could set the network on a path to regain those kind of partnerships and marketing strategies with GANDALF.
POKT would benefit from the buy pressure if the node ecosystem was open to everyone, and not exclusive to large operations who can support a dozen chains, like it is now.
Prepare for v1
@RawthiL in V1 â How to Enforce Fairness and Decentralization: A first approach, has already started the argument that 1 chain per servicer would potentially allow there to be more distribution and fairness in v1.
POKT has already experimented with having many chains per servicer, and it seems to only have had a negative effect since the POKT node ecosystem matured. GANDALF shows objectively how imbalanced and impractical node running currently is, and how only few chains get most the reward. V1 needs to introduce balance, and GANDALF should be the starting point.
BONUS: Data Driven Decision Making on Delisting Chains
There is a good argument that POKT has too many chains that are underutilized and should be delisted. GANDALF provides a data driven approach to actually evaluation chains, their profitability in different environment, and if they are net loss for the network.
Column R shows if the net reward for a given chain is more than cost to run a single node in each primary POKT region. As you can see, 61% have âNOâ which means they do not generate enough reward to even run a single small server in each region.
Ultimately the POKT DAO and community will need to decide what our approach to delisting chains should be, but GANDALF allows us to actually make informed decisions, especially when taking factors like MaximumChains
into account.
Dissenting Opinions
This will hurt large node runners.
It likely wonât âhurtâ anyone. Instead of any node runner relying on the 8 Money Chains for the bulk of their rewards, each provider will likely spread out to support other chains. Many larger providers will still likely serve the same amount of chains, but each provider will focus on different chains.
Right now, the two top node providers both serve 15 chains each, but 11 of those chains are the same between them. This means that 74% of their infrastructure is serving the same chains, while other chains have little to no support. With GANDALF, and MaximumChains
set to something like 1
, they would likely only share 2 to 4 of the same chains (instead of 11), meaning POKT would have much more diversity of support between hosting providers.
Smaller providers on the other hand would benefit from this because they could generate more rewards with less chains. If someone has a few hundred chains, they could likely only spin up 5 or so chains, giving good spread to their rewards, while saving substantially from needing to serve 15.
TLDR: Large node runners would likely serve the same number of chains, but it would be a greater diversity of chains, while small node runners could actually serve fewer chains to generate the same reward.
1
is too low.
We canât know for sure what number will be best for POKT, but 1
should be what we want to heads towards (for all the reasons mentioned above). GANDALF does provide insight to how other numbers will work, so the community can help decide on the ultimate number. 15
however objectively is hurting the ecosystem, so something needs to be changed. To eliminate Money Chains, entirely, then 3 is the largest number to consider (hence why Iâm suggest between 1
and 3
).
Pros and Cons:
Set to 1
Pros
- Anyone can join POKT ecosystem by serving a single chain
- Less provider overlap, so more chains can be covered at a single time
- Most incentive for providers to maintain node balance across all chains
- Requires the least amount of infrastructure
- Eliminates Money Chains
- Best prepares for v1
Cons
- Rewards may be less consistent per servicer, since itâs connected to a single chain (though providers are heavily incentivized to balance quickly, so this would likely just be a short term issue).
- QoS for small chains may suffer if they are dominated by a single provider (that is the issue with having an ecosystem reliant on large providers though).
Set to 3
Pros
- Rewards come from 3 chains, so they may be more constant on the daily
- Eliminate Money Chains
- Possibly better QoS on some chains (since there could be more overlaps with which chains that providers support)
Cons
- Requires 3x the infrastructure per servicer vs the
1
option - Requiring more chains per servicer could limit who can/wants to join the node ecosystem
TLDR: We can decide as a community what we want to set it at, but 15
is not helping anyone and it needs to be changed. Feel free to use GANDALF to determine what number you feel is best and share below.
Node runners with more resources will be able to jump to more profitable chains, giving them an edge over others.
The beauty of setting MaximumChains
to something like 1
, is that node runners are incentivized to go to chains that are most profitable. If there are node runners that are able to quickly jump between chains to get the most profit, it benefits everyone since they are actively creating balance.
Example:
Say large node runner sees that Kava Archival (a chain they support) is overstaked by 20 nodes, and Celo, is currently under staked by 10 nodes. This results:
- Kava Archival making 10.61 POKT
- Celo is making 16.71 POKT
The large node runner decides to move 10 of their nodes to Celo, to maximize rewards. This results in Kava Archival reducing nodes, and bringing it closer to balance, helping every other Kava Archival node. The result is Kava rewards go up and Celo rewards go down:
- Kava Archival now makes 12.09 POKT
- Celo now makes 14.06 POKT
Having well equipped large node runners that are able to jump around to different chains, brings balance to the ecosystem as a whole and helps everyone. Any chains where nodes are taken away immediately see meaningful jump in rewards when the MaximumChains
is low.
We want nodes to generate more rewards, so we should allow them to serve as many chains as they want.
Iâm placing this here because this has been a common misconception. More chains does not equal more rewards, it just means those with more infrastructure (larger node runners) have the ability to get more rewards at the expense of smaller node runners who canât support expensive infrastructure. MaximumChains
has always been a mystery to the network, but GANDALF can now clearly see that MaximumChains
set to 15
doesnât promote decentralization.
I believe there is a reason that no other RPC protocol being developed has a MaximumChains
parameter as POKT (that Iâm aware of). Iâm only aware of node runners staking X amount per chain they want to serve on other protocols. GANDALF shows that higher MaximumChains
ends up centralizing at the expense of decentralization.
Analyst(s)
Copyright
Copyright and related rights waived via CC0.