So EOS will select 21 block producer to make the DPOS work, but to become a block producer requires extremely high level hardware, which is not practical for average users. So is there any incentives for a normal user to run a full node on his PC? Will it do any good for the network?
2 Answers
for a normal user to run a full node on his PC?
If we define a "normal user" as Average Joe, who would like to just transfer some tokens or even deploy a smart contract, then there are not many reason why such a user would want to run a witness node.
But there are some:
If you are a developer/service provider (like exchange, block explorer) and you need to run a node anyway, then it is not a bad idea to run a witness node as well (however, personally I would prefer to have independent nodes for service/block producing)
Not only top producers are rewarded. Block producers from beyond top 21, are so called backup producers, and they also produce blocks from time to time. Backup producers need to have a way to test their infrastructure before being elected to the top 21
[EDIT]
According to current spec, num_of_payed_producers
is set to 121
.
static const uint32_t num_of_payed_producers = 121;
If I'm not mistaken** that means, that there will be 21 top producers + 100 backup producers
How much tokens will be reserved per block for block producers here:
eosio::asset system_contract::payment_per_block(uint32_t percent_of_max_inflation_rate) {
const eosio::asset token_supply = eosio::token(N(eosio.token)).get_supply(eosio::symbol_type(system_token_symbol).name());
const double annual_rate = double(max_inflation_rate * percent_of_max_inflation_rate) / double(10000);
const double continuous_rate = std::log1p(annual_rate);
int64_t payment = static_cast<int64_t>((continuous_rate * double(token_supply.amount)) / double(blocks_per_year));
return eosio::asset(payment, system_token_symbol);
}
From what I've understood, backup (or all?) producers will be paid proportional to amount of votes from token holders**.
** - please correct me if I'm wrong.
Aside from monetary incentives, the primary incentives for running your own node would be speed of access to the information in the block, and the ability to run custom plugins that are needed to power your application.
Since any node that runs will replicate all of the blocks as they are produced, accessing a local node will allow your application to query for information on the blockchain much faster. Also, new transactions can be submitted to the local node, which will then handle forwarding them to the Block Producers for inclusion in a block.
In addition to the speed of access, running a local node allows you to control what plugins are enabled. This can include standard plugins which aren't enabled by default, or custom plugins developed for your specific dApp.