Recently the EOSIO Resource Exchange (REX) that allocates resources (CPU/NET) to users became unusable on the EOS Public Blockchain after spikes in demand for processing power and bandwidth drained the system of liquidity. During the outage, borrowers who attempted to get access to these resources were denied service.

Resource supply for the EOS Public Blockchain on REX highlights a general issue with the resource allocation model; despite a large demand, most of the network’s resources are going unused. REX was managing around 30% of the network’s total CPU/NET and ran out of resources to allocate to new borrowers. Meanwhile, only a small percentage of the remaining 70% of the network’s resources were actually being utilized, evidenced by the fact that less than half of the blockchain’s total capacity was being used.

In light of this situation, we’re proposing a potential change to the way the current REX system operates that would establish a resource rental market. Under the new proposed system, a user will pay a resource rental fee via a smart contract to be granted 30 days worth of CPU/NET from the total supply. After 30 days the rental must be renewed and pricing is automatically adjusted using a market based mechanism, based on changes in supply and demand for CPU/NET resources.

Users will still be able to stake tokens under this proposed resource model. However, instead of receiving CPU/NET resources in proportion to staked tokens, users who stake their tokens to REX receive certain fees from name auctions, RAM fees, and proceeds from CPU/NET rentals.

The objective of proposing a transition from a resource entitlement model to a leasing or rental model is to remove the influence of speculative markets over resource pricing. Introducing a rental market with pricing based on overall resource utilization will make resource allocation more predictable and reliable for the community.

Figure 1: Instant and Adjusted Network Utilization over Time

CPU/NET pricing will be based on the CPU/NET supply available out of the total; the less CPU/NET available, the higher the price to rent the resource, and the more CPU/NET available, the lower the price. The real time CPU/NET utilization is represented as Instant Utilization in Figure 1. Resource pricing is based on Adjusted Utilization. During spikes in resource utilization, Adjusted Utilization follows the same rate of increase as Instant Utilization, and the price increases in real time to prevent the CPU/NET supply from being exhausted. As resource utilization decreases, the Adjusted Utilization rate decays over time, rather than instantly, and prevents large renters from leveraging an undesirable renting advantage.

Figure 2: An example fee curve showing how price (which is the slope of the curve) increases with greater network utilization, along with a representation of how the change in utilization is used to derive the rental fee.

The example curve shown above in Figure 2 visualises how price increases as network utilization increases, in this case based on Adjusted Utilization. While there is an abundance of resources available the price for CPU/NET remains relatively low, however the price rapidly increases as utilization reaches the maximum.

The price is determined by the difference in the network utilization prior to the rental purchase versus the new utilization of resources based on the size of the rental. For example, a user looking to acquire 5% of the CPU/NET supply for 30 days would pay a price equal to:

MAX(P(InstantUtilization+5%),P(AdjustedUtilization+5%))) — MAX(P(InstantUtilization),P(AdjustedUtilization)))

The formula shows how the difference between the current utilization and the level of utilization as a result of the rental order is used to calculate price. For example, on Figure 2, current utilization is marked as point 1 and utilization after the rental is marked as point 2. The difference between these two points is the fee paid by the renter.

Migrating from REX to Rental Markets

To facilitate the changeover from the current REX system to the proposed rental marketplace, the percent of CPU/NET allocated under the current model would be gradually shifted. It would be done in such a way that doesn’t increase the overall supply of tokens, but instead adjusts the parameters that determine the ratio of CPU/NET that should be allocated to each account.

The proposed changes aim to ultimately stabilize the CPU/NET marketplace in a way that more accurately reflects supply and demand for those resources. It is expected that the ecosystem will eventually migrate to the newly proposed rental market as opposed to continuing to use the current staking for resources model due to a lower cost and greater supply on the new market. Over time, the CPU/NET supply available on REX will diminish as the supply of CPU/NET in the proposed rental market increases.

In order to operate smoothly, EOSIO application developers and users alike need a consistent means of accessing resources with predictable pricing. We are proposing this change to the REX system in order to reduce systemic waste and improve scalability by having enough CPU/NET to meet the growing needs of the network.

For more information about the proposed changes to the EOSIO resource allocation system, refer to the proposal in the EOSIO GitHub repository. This pull request was included with the recent release of eosio.contracts v.1.8.4-rc1.

Stay Connected

We appreciate feedback from the community as we work towards refining this new model. If you would like to provide feedback and work more closely with our team to improve EOSIO for developers, you can send our developer relations team an email at developers@block.one.

We are continuously updating our mailing list with future announcements and release notes. Subscribe today on the new EOSIO website.