Getting really close to 1.0 release!
Notable Updates from github
Segregated EOSIO.SYSTEM Funds
To ensure the allocation of system funds is clear we’ve decided to segregate system funds as follows:
implemented a 1% fee on all RAM buying and selling
all RAM trading fees sent from user to eosio.ramfee
all proceeds from selling RAM sent from eosio.ram
all staked tokens sent to eosio.stake
all unstaked tokens sent from eosio.stake
all auction proceeds sent to eosio.names
unallocated inflation sent to eosio.saving
producer block pay sent to eosio.bpay
producer vote pay sent to eosio.vpay
See contracts/eosio.system/producer_pay.cpp for details.
We’ve seen a little confusion in the community about some of the data stored on disk and options available to users that are running nodes, and have attempted to make things clearer via the following updates.
We renamed the "shared_mem" directory to "state" and changed a few of the plugin options:
"--block-log-dir" renamed to "--blocks-dir"
"--checkpoint" shorthand alias "-c" was removed
"--shared-memory-size-mb" renamed to "--chain-state-db-size-mb"
added "--reversible-blocks-db-size-mb" to change default size of reversible blocks DB
"--resync-blockchain" renamed to "--delete-all-blocks" to discourage the use of this option
“--contracts-console” prints contract output to console and is also available via config.ini now
added “--hard-replay-blockchain” to move block logs and data into a backup directory and construct a new “blocks.log” file and will then continue as if “--replay-blockchain” was used
added “--force-all-checks” to force checking authorizations on input transactions, inline actions, and contract-generated transactions
added “--fix-reversible-blocks” to allow nodeos to try to recover from the “reversible” blocks database and then immediately exit
updated “--hard-replay-blockchain” to attempt to recover and replay as many reversible blocks as possible from the “reversible” block database, even if it is left in a dirty state
We added a command line argument (--max-irreversible-block-age) that will cause a node to automatically stop production when the last irreversible block time is older than N seconds, an indication that there are not enough producers confirming blocks for the chain to continue forward. This option prevents producers from producing an excessive number of blocks that will need to be rationalized upon resuming production once enough producers rejoin the network.
We added the ability to pause node production on demand. The goal is to allow producers to coordinate during bad situations to resume/pause the chain without having the variability of replay/resync time etc.
POST /v1/producer/pause - pause production
POST /v1/producer/resume - resume from paused production
POST /v1/producer/paused - return true/false depending on whether the node is currently paused
Genesis JSON File No Longer Created By Default
genesis.json is no longer expected to be in the config directory and will not be automatically generated. Here’s what you’ll need to do:
Modify the file, change the timestamp, change the initial producer key and any other parameters that you normally change. Share the file as you’ve done in the past.
nodeos --delete-all-blocks --genesis-json to initialize a new blockchain (on all nodes)
On subsequent launches, do not specify --genesis-json, nodeos will pull the genesis state from the block log, and of course do not --delete-all-blocks either.
If nodeos does not restart cleanly, --replay-blockchain and if that does not work --hard-replay-blockchain.
The resync option has been renamed to --delete-all-blocks to indicate what it is actually doing.
BIOS Boot Process Tutorial Updates
We made improvements to the BIOS boot tutorial including producers claim pay, proxy voting, eosio account resigning, producers use eosio.msig contract to replace eosio.system contract and some bug fixes. Please note that we moved the tutorial support files from the “programs” directory to a new “tutorials” directory.
As was mentioned last week in the “Quality Name Distribution & Namespaces” (#3189) proposal, the name auction has been implemented though it will not become active until two weeks after the network unlocks (15% votes).
Producers can now only increase RAM size and never decrease. This was done to prevent potential manipulation of the RAM market by block producers.
We’ve updated the version of the Boost library that we build against from 1.66 to 1.67.
The “data/shared_mem” directory has been renamed to “data/state”.
The “block-log-dir” config.ini option has been renamed to “blocks-dir”.
Changed the “set_active_producers” intrinsic to “set_proposed_producers” to more accurately reflect the intention of the function which is to propose a new, active producer schedule.
Following last week’s change to the token symbol, we added the ability to specify the core token symbol in the Dockerfile. We also switched to Ubuntu 18.04 LTS for the Docker builder image.
You may now set the chain ID from CMake. By default, it is set to sha256("eosio::chain version 1.0").
We noticed, and fixed, an unexpectedly high rate of mini forks on producer handoff, especially with high network latency between producers.
Block producers may now change blockchain parameters via the system contract by using the newly added “setparams” action.
Several testnets noticed that the grace period for inactivating recently voted in producers was too strict. The grace period has been changed from roughly four minutes to three hours. A few other corner cases for deactivation were ad
We greatly reduced the memory usage of the history plugin by reducing the tracked actions to only those that match explicit filter rules. There is now no way to track all actions since that is susceptible to filling shared_mem.
We discovered, and corrected, an infinite recursion bug with various, malformed abi definitions.
We changed producer deactivation logic to prevent block producers from being removed from the production schedule improperly. We now update the producer field “time_became_active” every time a producer gets voted in as opposed to the first time only. If it's the first time or it's been over a day since a producer was last voted in, we don't check their “last_produced_block_time” and we don't deactivate them. Otherwise, the logic stays the same. This way we don't penalize a producer for not producing blocks after getting voted out.
We introduced Patroneos last week, and it is now available to the community via the EOSIO GitHub repository, https://github.com/EOSIO/patroneos.
As a reminder, Patroneos provides a layer of protection for EOSIO nodes designed to protect against some of the basic Denial of Service attack vectors.