Being a block producer

Table of contents

Calling all block producer candidates

FIO Chain Mainnet will launch in Q1 2020 and we are currently looking for organizations interested in becoming block producers. The FIO Chain block producers receive 85% of the fees collected by the FIO Protocol and there are additional incentives available. FIO Chain code will become open source around Mainnet launch, but if you are interested in being a Block producer now, please reach out.

Code of conduct

Please review BP Code of Conduct to better understand responsibilities of a block producer.

Recommended infrastructure

The FIO platform is comprised of two networks:

  • Testnet is a network for developers and others to have a full but valueless version of the network for testing.
  • Mainnet is the production network where all FIO transactions are recorded.

Mainnet nodes generally runs in two modes:

  • Block Producing Nodes are nodes that are configured to produce blocks in a FIO-based blockchain. This functionality if provided through the producer_plugin as well as other Nodeos Plugins. They connect to the peer-to-peer network and actively produce new blocks. Loose transactions are also validated and relayed. On mainnet, Producing Nodes only produce blocks if their assigned block producer is part of an active schedule.
  • Front-End Non-Producing Nodes connect to the peer-to-peer network but do not actively produce new blocks. Instead, it is connected and synchronized with other peers from a FIO-based blockchain, exposing one or more services publicly or privately by enabling one or more Nodeos Plugins, except the producer_plugin. They are useful for acting as proxy nodes, relaying API calls, validating transactions, and broadcasting information to other nodes. Non-Producing Nodes are also useful for monitoring the blockchain state.

Testnet nodes are less robust then Mainnet nodes and often combine the producer_plugin and other servicing plugins on a single server.

The following table outlines recommended hardware for producing and non-producing nodes based on initial 12 month transaction projections of:

  • 14M transactions
  • 10 GB total RAM in State

This transaction volume would result in:

  • 950,000 FIO allocated to a Top 21 BP that has maintained a server for the entire 12 months.
  • 400,000 FIO allocated to Standby (22-42) BP that has maintained a server for the entire 12 months.
All projected numbers are rough approximations and do not account for post-Mainnet RAM optimization improvements that are currently on the development roadmap. These will reduce or eliminate the amount of RAM required by some Transactions.
All projected numbers are rough approximations and do not account for post-Mainnet RAM optimization improvements that are currently on the development roadmap. These will reduce or eliminate the amount of RAM required by some Transactions.

Setting fees

Among other things, block producers are responsibble for setting FIO Chain fees. Fees are set by BPs in the following way:

  • Top 21 BPs can submit at anytime either one or both of these calls:
    • Fee ratios using /submit_fee_ratios call (can be made no more than once every 120 seconds) - this defines ratios between fees. Example:
      • register_fio_domain = 40
      • register_fio_address = 1
      • add_pub_address = 0.01
    • Fee multiplier using /submit_fee_multiplier call (can be made no more than once every 120 seconds) - this defines the number which will be mutliplied by the ratio for a specific fee to create an actual fee amount. The multiplier is intended to allow BPs to easily adjust fees as rate of exchange of FIO token changes. Example:
      • multiplier = 1000000000
  • Once received, the fee is computed by multiplying ration by multiplier. Example:
    • register_fio_domain = 40 x 1000000000 = 40000000000 SUFs
    • register_fio_address = 5 x 1000000000 = 5000000000 SUFs
    • add_pub_address = 0.01 x 1000000000 = 10000000 SUFs
  • After each submission, the fee is then added to a list of fees submitted by elected block producers and a live fee is determined by deriving a median of all submissions for particular fee. Example
    • Submissions from 3 BPs:
      • BP1: 40000000000
      • BP2: 50000000000
      • BP3: 1000000000000
    • Fee is set to 50000000000
  • If a BP is removed from elected BPs list, their submissions are removed from consideration at the next time a fee is computed, unless there are no other submission for that type of fee.

Setting bundled transactions for new registration

Number of bundled transactions credited for all new FIO Address registrations and renewals is set by BPs on the following way:

  • Top 21 BPs can submit at anytime /submit_bundled_transaction (can be made no more than once every 120 seconds) call
  • Once received, the bundled transactions are determined by deriving a median of all submissions. Example:
    • Submissions from 4 BPs:
      • BP1: 1
      • BP2: 1000
      • BP3: 2000
      • BP4: 15000
    • Bundled transactions are set to 1500
  • If a BP is removed from elected BPs list, their submissions are removed from consideration at the next time bundled transactions are computed, unless there are no other submissions.

Claiming block producer rewards

When fees are paid by users, they are collected in BP pools which are dynamically set-up for each day. Certain fees are placed into the current day pool, while others are divided up and placed into 365 pools for each day in the future. This is intended to cover bundled transaction. For example if /register_fio_domain fee of 40,000,000,000 SUF is paid, 96,438,356 SUF (40,000,000,000/365*.85) is allocated to current day pool, another 96,438,356 SUF to BP Pool for Day 2 and so on.

  • Each BP is paid by calling /claim_bp_rewards.
  • The call can only be called once every 24 hrs.
  • When the it’s called the following actions are taken
    • The payout will apply to last 24 hours
    • Before a payout can be made, a Payout Schedule must exist. If it does not it gets created as follows:
      • Top 42 BPs based on votes and their votes are stored in table as of the creation of the Payout Schedule.
      • This schedule will be used for all payments to all BPs for the next 24 hours
    • If Payout Schedule exists, the BPs are paid as follows:
      • Every block producer (elected and standby, max 42) will receive 60% of the entire pool distributed pro-rata based on votes they received. Specifically:
        • All votes in Payout Schedule are summed up and each BPs votes as percent of total votes casted are used as payout percentage.
        • Scheduled block producers (top 21 in Payout Schedule) will receive 40% of the entire pool divided by number of scheduled block producers.
  • If BP does not claim their rewards within 24 hours after becoming eligible, their fees are moved over to the current day’s BP Poll to be distributed among all BPs.

Knowledge Base articles