Edits:
- 2023-03-10 : Grammar and writing corrections by @zaatar (Thanks!!!)
- 2023-03-17 : Even more grammar and writing corrections by @zaatar (Thanks, again)
Authors:
- Pablo Frigerio
- @Giskard1984
- @RawthiL
Introduction
Three topics that have been discussed several times in the Pocket Network ecosystem are the survival of small node-runners, the real decentralization of the Pocket Network and chain-region incentives (to promote the staking of nodes in a given region or chain).
These topics are closely intertwined since small node-runners are one of the major sources of decentralization of the network, and incentives should drive decentralization.
Currently in the V0 version of the Pocket Network, a Pocket Node can be staked for many chains at the same time (up to 15) and can work in any available gateway. In addition, there are no incentives to stake for specific chains or regions.
In V1 the staking of Pocket Nodes will change. Currently it is expected that a Pocket Node will be able to stake for many chains at the same time (as in V0), but recently a change was introduced to V1 specifications whereby a Pocket Node would be restricted to a single region. Also, the incentives for chains and regions are to be controlled by the Application volume on each [chain, region/geozone] pair. This approach is not ideal for several reasons. We want to open up this discussion to the community.
Restriction on staked GeoZones but not on staked Chains
The logic behind the restriction of GeoZones to one was to promote decentralization and encourage node runners to deploy blockchain nodes in each region that they wish to serve, thereby increasing the distribution and resilience of the service. However, this restriction will not produce the desired result. This is because there is no way to audit a node location (nor should there be). Nodes are permissionless; there is no way to know how a node-runner connects their Pocket Nodes to blockchain nodes. The only thing that matters is QoS, which is agnostic of node location. Therefore, one can have a single piece of hardware with many nodes serving more than one location. This is why we think that the current justification for single GeoZone staking is incorrect.
A real effect of single GeoZone staking was pointed out by @shane. He argues that this restriction would help small node-runners who lack the scale to deploy blockchain infrastructure in many locations, which disadvantages them vis-a-vis big node-running companies. This is true: restricting GeoZone staking to one region will dilute the relative power of big node-runners. However, this same argument can - and must - be used against the multi-chain staking that exists today and is expected to continue in V1. A small node-runner cannot compete against a large node-runner who can spread the cost of blockchain nodes by scale of operation. This is something we must consider if we want to capture the decentralization power of many devs who run single blockchain servers for other applications (something mentioned many times by @vitally). Currently, with staked POKT producing higher returns for big node-runners due to economies of scale, there is no reason why anyone would stake POKT for a single chain and region.
The current proposed V1 landscape, with multi-chain and single-GeoZone staking, seems to be arbitrary and should be changed, either to allow multi-chain and multi-GeoZone staking, or single-chain and single-GeoZone staking. The current specification will have the following effects:
-
Drop of yield per POKT staked: 15 k POKT will produce 70% less rewards than in V0.
-
Increase in staked nodes. To cover all the main regions, the number of nodes will have to increase by about 5x (or by the number of principal GeoZones implemented). More staked POKT for performing the same amount of work.
-
Partial improvement of small node-runners’ finances, but not as good as possible. Single-chain node runners will be largely out-performed by multi-chain node runners.
Decentralization Mechanisms for Node-Runners
V1 has no on-chain metric that makes it possible to monitor, and thereby enforce, node-runner decentralization. The only process intended to induce node runner decentralization is the single-GeoZone staking, but as explained above, it’s ineffective. We believe that it is impossible to control centralization of node-runners’ operations using on-chain data on a permissionless network such as Pocket. The only way to produce decentralization is to level the playing field for small node-runners. While economies of scale will always benefit large entities, the Pocket Network should do all it can to reduce the benefits of economies of scale for large node-runners. The limit of single-GeoZone staking is a move in the right direction, but by itself, not enough.
Chain and Region/GeoZones Incentives
In V1 the chains and GeoZone incentives are to be controlled by means of the Application volume in each of the [chain, GeoZone] pairs. As a result, regions generate rewards based on their traffic, which has some drawbacks:
-
The minting process of the network is more complex. If the minting per block of the network is to be controlled, it would require leveraging all the traffic in all applications, as opposed to the current model where only the Relays-To-Token Multiplier is modified to control the amount of POKT minted per day.
-
Nothing forces node runners into new zones and out of crowded ones. If one of the goals of the Pocket Network is to be decentralized we should incentivize not only the opening of nodes in new regions, but also the forcing of nodes out of crowded zones. Such a mechanism would encourage a lower total staked POKT (all servicers) per region - which some have said is desirable.
Below we describe two different approaches to this problem, one keeping the multi-chain multi-region nodes and the other going to a single-chain single-region.
Staking Restrictions Effects
Multi-Chain Multi-Region
This is the simplest approach in terms of transition from V0. Nothing changes for the node runner except the need to stake in all the regions that the node runner desires.
Without any further action, the same fairness and decentralization problems from V0 are carried over to V1. Only some unfair rewarding of bad nodes (poor QoS) is eliminated by the new fishermen mechanics.
We are still trying to come up with an on-chain metric that favors nodes staked into single regions and chains over multi-chain and multi-GeoZone nodes. So far we’ve not been able to find a way to do this, and are open to suggestions. What we do know is that a per-node parameter/multiplier should be created since this won’t interfere with GeoZone/chain incentives.
Advantages:
- No friction between V0 and V1 for node runners.
- Number of nodes in the network should remain constant.
Possible drawbacks:
- We would have to come up with a model to penalize nodes in multiple chains and regions and reward single chain/GeoZone nodes.
- Modulating per-node rewards can be difficult for the community to accept.
Single-Chain Single-Region
Following the logic of restricting the stake of a Pocket Node to a single region/GeoZone, the only logical path to follow is to also restrict chain staking to a single one. This creates the scenario where a Pocket Node represents a given chain in a given region. This is interesting as it simplifies the tracking of the nodes’ QoS on chain. Currently, in V0, QoS is already measured by chain and gateway; restricting nodes to single chain and region would therefore be natural from a metrics point of view.
On the other hand, restricting nodes from 15 chains to 1 and from 20 gateways to 1 would create significant pressure on node runners, as the expected return of POKT per POKT staked will fall considerably. Each POKT staked will yield less POKT. Just to give some context, in V0 a single Pocket Node staked with GeoMesh and 15 chains receives only around ~10% of its income from a single chain and single location (for top chains and locations). Also ~80% off all income of a high QoS node comes from the top 6 chains, meaning that many other chains are mostly unprofitable. This means that in this case, the minimum staked should be modified greatly to compensate. We can’t give exact numbers here, as this is only a proposal meant to open up debate. But in this scenario we would expect the MinStake to be reduced to ~1000 POKT (only to approximate the reduction impact). Nevertheless, this reduction will benefit the small node-runners who were staking 15K POKT in a single region and chain, now that their relative selection probability is increased with respect to large node-runners who will try to diversify their nodes to reduce income variability.
Advantages:
- Small node runners will see a clear improvement in the probability of entering a session compared with large node-runners.
- Node metrics are easier to visualize as a node will not have multiple sets of metrics.
- Given the same QoS and chain, there will be no difference between small and large node-runners in POKT yield per POKT staked.
Possible drawbacks:
- Large friction from V0 to V1.
- Base node-stake should be modified to keep POKT returns per POKT invested similar pre- and post V1.
- Number of nodes will dramatically increase - can V1 hold a 75x number of nodes? (required to keep status quo).
- Support of some chains and GeoZones might be reduced with the result that apps using them would experience poorer quality of service (due to likelihood that the Pocket nodes that continue to service those chains and GeoZones would have lower QoS).
Decentralization and Chain/GeoZone Incentives
Whether we choose to stick to multi-Chain/multi-GeoZone or single-Chain/single-GeoZone staking, it is critical to create incentives for the staking of new Pocket Nodes (and hopefully the underlying blockchain servers) in each location and chain. A mechanism should be created to encourage decentralization. Moreover we should try to set this as an on-chain mechanism to avoid having to discuss how and why we should benefit one region over another. To this end we need to measure and maximize the Pocket Network entropy, which is a fancy way of saying how distributed the nodes are in the network.
In a perfect Pocket Network the amount of Pocket Nodes per Relays (Application volume) would be constant for all chains and regions. We can think of this as a probability distribution; we want it to be as uniform as possible. This means that the p_{g,c} of the distribution of nodes per relay by GeoZone and Chain should be the same for all GeoZones and Chains:
where N_{g,c} and R_{g,c} are the number of nodes and relays in a given GeoZone “g” and chain “r” respectively. Then the calculation of the maximum system entropy is:
where “G” and “C” are the total number of GeoZones and chains respectively.
Now, using this value as a target, we can obtain an Incentive Multiplier (IM) for each chain following:
This would provide a way to calculate IM based on on-chain parameters. This is an equalization incentive that is agnostic of the distribution of relays. Further incentives can be applied on top of this if needed (i.e., to incentive archival nodes). Moreover, these IM_{r,c} values can be scaled and multiplied to a global RTTM which controls total emissions. This way we can re-use SER or WAGMI mechanisms after V1 without having to come up with a new inflation control mechanism.
Now with drawings YAY!!!
We created a metric that guides the weighting of chains. Suppose that we have 3 different scenarios:
- Overprovisioned: a given [Chain, GeoZone] with too few relays per node (many node runners in the same place)
- Balanced: the same number of relays per node (what we want to achieve)
- Underprovisioned: too many relays per node (we want more nodes here as we have lower decentralization)
This can be illustrated with the following distributions:
Notice that we only modified a single [Chain, GeoZone] for simplicity; from left to right these are the cases described before. If we apply the equation that we described before we would obtain the following multipliers:
The picture shows several cases, but we added three markers representing the cases of the distribution shown before. The red one is the overprovisioned case, where we apply a <1.0 multiplier to penalize nodes and kick them out. The green one, that is, the uniform distribution, that is above the black line representing the maximum entropy, corresponds to a multiplier of 1.0. This means that if all regions have the same amount of relays per node, no incentive or penalization is applied. Lastly, the yellow marker represents the underprovisioned case. Here we need more nodes to join this [Chain, GeoZone] and we will pay them more using a multiplier of >1.0 until the system reaches equilibrium.
Stake Weighting
It is unclear whether stake weighting will continue to exist in V1. The docs provide as follows:
Each Servicer’s reward is scaled proportionally to both their stake and their ReportCard.
This suggests that stake weighting will exist in V1. However, stake weighting will not serve Pocket Network’s decentralization objectives or reduce the costs of the network:
- Pocket V1 should have mechanisms such as LeanPOKT. The cost of the Pocket node should not be important, otherwise V1 would be a step backwards from V0 in terms of network cost. In this scenario stake weighting does not reduce network costs (same as today in V0). If node runners want to earn more with the same infrastructure, they can spin up a new Pocket Node with their existing hardware without additional costs.
- The number of nodes should not be a problem in V1 (or so we heard…).
- Adds an unnecessary layer of complexity to staking. Without stake weighting, per node earnings should be simpler to calculate, making it easier for new participants to know how much they would earn.
- It does not advance decentralization objectives as it does not require node runners to increase their stake before staking a new node. On the other hand, if no stake weighting is allowed, staking additional nodes in the same [chain, GeoZone] will negatively impact rewards, pushing new nodes to other chains/GeoZones. This means that you cannot freely earn more POKT if you don’t at least provide entropy to the system.
Personal Conclusions
In my view (I don’t speak for POKTscan), the best scenario would be:
- Single-Chain / Single-GeoZone Staking
- On-chain entropy controls to enforce even distribution of Relays per Node on each [Chain, GeoZone] pair.
- No stake weighting as it provides no benefit to the V1 Pocket Network.