EOSIO Dawn 4.2 Release
With EOSIO version 1.0 right around the corner, today we have tagged a Dawn 4.2 release of the EOSIO software. A couple of small features worked their way into the code, but as you’ll see below, we’ve been focused on bug fixes and stability improvements.
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 account name 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
- added “--genesis-json” to specify file to read genesis state from
- added "--genesis-timestamp" to override the initial timestamp in the Genesis State file
- added "--print-genesis-json" to extract genesis state from blocks.log as JSON and print to console
- added "--extract-genesis-json " to extract genesis state from blocks.log as JSON and write to specified file
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:
nodeos --extract-genesis-json <genesis filename>
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 <genesis filename> 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
If nodeos does not restart cleanly,
--replay-blockchain and if that does not work
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.
The chain ID is now the SHA256 digest of the genesis state configured when initializing a chain. Unless overridden using --genesis-json, nodeos will use the default genesis state built into the software. The default genesis state's initial root key can be changed using the EOSIO_ROOT_KEY CMake option.
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 seven hours. A few other corner cases for deactivation were addressed as well.
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.
Dawn 4.2 on GitHub
EOSIO Dawn 4.2 is available on GitHub here (https://github.com/EOSIO/eos/releases/tag/dawn-v4.2.0) so that developers and block producer candidates can continue testing their applications and networks.
As a reminder, we love hearing from our community and are dedicated to helping them run EOSIO successfully. Our EOSIO Stack Exchange (https://eosio.stackexchange.com/) beta is going well and we encourage questions about how to use the software on Stack Exchange. Please continue to report any potential bugs you may see in GitHub and include the following information:
EOSIO git version: <”nodeos -v” output>
config.ini: attach your config.ini file
genesis.json: attach your genesis.json file
Command line: your full nodeos command line
Console output: attach console debug output around the error that you are seeing (ok to paste into the description if it is small)
We’re on target for the EOSIO Version 1.0 release on June 1st. You can follow the issues that we are committed to working on over the next few weeks by observing the Version 1.0 milestone (https://github.com/EOSIO/eos/milestone/10) in GitHub.