Configurable inflation to eosio.system contract

in #blockproducer5 years ago (edited)

EOS Argentina has been working on an upgrade to the system contract that will facilitate the adjustment of the inflation rate.

As we stand today the inflation rate is fixed at 5% and for Block Producers to implement any changes they would need to replace the System Contract and hard code a different percentage. This does not seem very practical as inflation may be changed multiple times depending on different circumstances, so we decided to change the code so that inflation can be a configurable variable set by the top 21 Block Producers.

Our team made a pull request to the eosio repository to have the inflation set as a parameter, what this allows is for Block Producers to temporarily change the inflation while working on new solutions or proposals.

https://github.com/EOSIO/eosio.contracts/pull/247/commits/ebabb572aef419a6aac1c3b707acacf57a3b1fd3

It is important to point out that this change to the system contract is also useful to other eosio blockchains that may desire to have different inflation and distribution of their newly generated tokens.

Technical Details.


Set inflation action.

@details Change the annual inflation rate of the core token supply and specify how  the new issued tokens will be distributed based on the following structure.


    +----+                          +----------------+
    +rate|               +--------->|per vote reward |
    +--+-+               |          +----------------+
       |            +-----+------+
       |     +----->| bp rewards |
       v     |      +-----+------+
    +-+--+---+-+         |          +----------------+
    |new tokens|         +--------->|per block reward|
    +----+-----+                    +----------------+
             |      +------------+
             +----->|  savings   |
                    +------------+

 @param annual_rate - Annual inflation rate of the core token supply.
     (eg. For 5% Annual inflation => annual_rate=500
          For 1.5% Annual inflation => annual_rate=150

 @param inflation_pay_factor - Percentage of inflation used to reward block producers.
     The remaining inflation will be sent to the `eosio.saving` account.
     (eg. For 20%  => inflation_pay_factor=5
            For 100% => inflation_pay_factor=1).

 @param votepay_factor - Percentage of the block producer rewards to be distributed proportional to votes received.
     The remaining rewards will be distributed proportional to blocks produced.
     (eg. For 25%  => votepay_factor=4
          For 50%  => votepay_factor=2).

Steps forward

The Pull Request for the changes has already been merged by the Block One team to the official eosio repository, we plan to propose it and test it on Kylin Testnet before making the multisig on the EOS Mainnet.