BitShares Core 4.0.0
Release Notes
The BitShares Core software has been updated to the 4.0.0 Protocol Release. The Core software is used to build the validation nodes that perform consensus of all transactions on the BitShares blockchain. This release includes additions, improvements, and changes to the consensus protocol.
The scheduled protocol upgrade time is Thursday, July 30, 2020 13:55:00 UTC
(2020-07-30T13:55:00Z
).
Documentation for users may be be found at How BitShares Works.
Documentation for BitShares developers may be found at the BitShares Developer Portal.
Who Should Upgrade?
All operators must upgrade to handle the protocol upgrade and to benefit from performance improvements.
Operators of API nodes will be able to configure custom limitations on their API nodes as described in the API section.
Upgrade Process
Precautions
- All validation nodes must complete their upgrade prior to Protocol Activation:
Thursday, July 30, 2020 13:55:00 UTC
- A blockchain replay will automatically be performed after the validation node software is restarted. This typically takes a few hours on a modern CPU.
Upgrading from Any Version
Delayed Node
The witness_node
program can be configured to serve the features that were previously provided by the delayed_node
program. Therefore the delayed_node
program is no longer supported. Instructions for configuring a witness node to act as delayed node can be found in the Wiki.
Elastic Search Plugin
The default values for the Elastic Search Plugin have been changed. These changes are summarized under Elastic Search Plugin.
Custom Operations Plugin
A new custom_operations
plugin is added in this release which is enabled by default for new nodes. The plugin stores account catalogs of key=>value
data using custom operations. The feature is expected to be utilized by several client applications including the reference UI and the BTS++ mobile App in the near future. Existing public API nodes should enable it.
API Helper Indexes Plugin
The api_helper_indexes
plugin is now required for serving several existing critical APIs. Public API nodes should enable it. Please check the API section for more info.
Upgrading from 3.2.0
Operators of API nodes need to edit their configuration file per the instructions in the 3.3.0 Release Notes API section.
Upgrading from before 3.2.0
Please check the 3.2.0 Release Notes for more information if you are upgrading from a version prior to 3.2.0.
How to Upgrade from Source Code
Note: the minimum build requirements have changed starting from the 3.3.0 Feature Release:
- The code base requires a compiler that supports the C++ 14 standard (previously C++ 11).
- The minimum supported boost version is 1.58 (previously 1.57).
- The minimum supported CMake version is 3.2 (previously 3.1).
Obtain the Source Code
The source code may be obtained by checking out the 4.0.0 tag. Download the source at:
Build the Binaries
The binaries may be built by using your pre-existing process, or by following the standard instructions that can be found in the wiki:
Deploy the Binaries
Your standard process for deploying the node software may be used. No additional requirements or precautions will be required to deploy the new release.
How to Upgrade with Docker
The latest Docker image may be found at BitShares Core Docker page and updated with
docker pull bitshares/bitshares-core
Binaries for download
Binaries of the command line interface (CLI) wallet and the node software are pre-built and available for download.
Note: These binary builds are reproducible and were signed using Gitian. Please check the README if you want to verify and/or contribute.
Platform | SHA256 Checksum |
---|---|
Microsoft Windows | 9482f0ef03e4df2fdd08c30e535709940925fd2ac0eccbe19c399316e57f0961 |
Mac | 25a28802d6bd44f9d516ade2b605ea6e5c55fdbddcf801c638be11f1c92ca0a7 |
Linux | 5d62f634633693e0a89dd86fdc0314ac0edb2fdc0d9b1437b84c62c5167270b7 |
Changes
The changes for 4.0.0 Protocol Release are summarized below.
Protocol
Description | Issue | Pull Request |
---|---|---|
Margin Call Fee Ratio (BSIP-74) | BSIP-74, 2129 | 2159, 2180 |
Asset Owner Defines MCR and MSSR Values (BSIP-75) | BSIP-75 | 2176 |
Require Higher CR When Creating / Adjusting Debt Positions (BSIP-77) | BSIP-77 | 2157 |
Simple Maker-Taker Market Fees (BSIP-81) | BSIP-81 | 2136, 2155 |
Maker order creation fee discount (BSIP-85) | BSIP-85 | 2145 |
Share Market Fees to the Network (BSIP-86) | BSIP-86 | 2128, 2140 |
Force settlement fee (BSIP-87) | BSIP-87 | 2151, 2159, 2172 |
Add HTLC related features: HASH160 support, optional memo, optional preimage size | 1967 | FC-143, 1998 |
Share market fees of force-settle orders to the referral program | 1780 | 1842, 2132 |
Redirect market fees sharing to temp-account to committee-account | 1800 | 1870, 2133 |
Asset precision can be updated when asset has zero supply | - | 2176 |
New asset issuer permission and flag to disable updating of maximum supply | - | 2176 |
New asset issuer permission and flag to disable creation of new supply | - | 2176 |
Independent asset creation fee for assets with a prefix | - | 2176 |
Fix 250M supply issue | 2103 | 2104 |
Fix additional authorities checking on custom_operation | 210, 2087 | 1629, 2138 |
Fix overabundant balance check for bid_collateral_operation | 1692 | 1830 |
Fix prediction markets suffering black swan | 460 | 2019 |
Fix too restrictive check in market fee sharing | 1774 | 1848, 2131, 2135 |
Fix a bug that undefined bits can be set in asset flags | - | 2176 |
Fix a bug that an asset's maximum supply could be smaller than current supply | - | 2176 |
Fix a bug that a prediction market may be unable to be globally settled | - | 2176 |
Stop using call_price when globally settling for future performance improvement | 1669 | 1672 |
Partial work for Custom Active Authorities (BSIP-40) | 1285 | 1860, 2028 |
Node Functionality
Description | Issue | Pull Request |
---|---|---|
Make more API limitations configurable | 1733, 2141 | 1903, 2154 |
Log rotation bugfix | 1982, 2078 | FC-162, FC-184, 2083 |
Fixed debug function wrt HTLC | - | 2072 |
Enable a stacktrace dump when the SIGSEGV signal is raised | - | 1985 |
Update seed nodes | - | 1990, 2022, 2089, 2126, 2152, 2191, 2192 |
Node Performance and Stability
Description | Issue | Pull Request |
---|---|---|
Skip updating unneeded secondary indexes during replay | 452, 682, 683 | 1918, 2142 |
Check witness signature of block before pushing to fork db | 831 | 1987 |
Fix a P2P connection issue when there are misbehaving peers in the network | 2105 | 2107 |
Fix a P2P connection issue while large message is being delivered | 2015 | 2119, 2120 |
Periodically re-check addresses of seed nodes | 2153 | 2164 |
Improve get_account_stats_by_owner performance | - | 2174 |
Fix testnet macOS crash | 2199 | 2200 |
Node Plug-ins
Description | Issue | Pull Request |
---|---|---|
Add custom operations plugin | 1847, 2032, 2092 | 1926, 2033, 2079, 2108, 2143 |
Fix an issue that ES_objects plugin inserts genesis data even when configured es-objects-start-es-after-block | 1951 | 1960 |
Update ES plugins' default values | 2024 | 2012 |
Elastic Search Plugins
Default settings for the Elastic Search Plugin have changed.
elasticsearch plugin:
_elasticsearch_operation_object
is defaulted totrue
_elasticsearch_operation_string
is defaulted tofalse
es_objects plugin:
_es_objects_limit_orders
is defaulted tofalse
General instructions for configuring Elastic Search are available here.
API
- The
api_helper_indexes
plugin is now required for several critical APIs. For API node operators, please enable the plugin if these APIs are used by your clients.
- get_key_references
- get_account_references
- get_proposed_transactions
- get_full_accounts (for fetching proposals)
- is_public_key_registered
- API Node operators can customize the maximum limit values for several API calls by setting numerical values that differ from that default values in the configuration file.
api-limit-lookup-accounts = 1000
api-limit-lookup-witness-accounts = 1000
api-limit-lookup-committee-member-accounts = 1000
api-limit-lookup-vote-ids = 1000
api-limit-get-account-limit-orders = 101
...
Description | Issue | Pull Request |
---|---|---|
Add get_limit_orders_by_account API |
463 | 2146 |
Add preimage info to virtual htlc_redeemed_operation |
1739 | 2161 |
Add refund info to virtual htlc_refund_operation |
1887 | 1950 |
Extend get_all_workers API to query only worker objects that have expired or not expired. |
2121 | 2149 |
Return top order sizes in market ticker | 2001 | 2166 |
Add info about who sold what to whom in get_trade_history API and get_trade_history_by_sequence API |
2163 | 2175, 2181 |
Increase default limits for get_full_accounts API |
2165 | 2190 |
Return a user-friendly message on RPC execution error | - | FC-186, 2111 |
Handle exceptions when formatting log messages | - | FC-167 |
Update wording of an error message about asset creation | - | 2109 |
Update an error message about updating debt position | - | 2206 |
Command Line Interface Wallet (CLI)
Description | Issue | Pull Request |
---|---|---|
Fix cli_wallet TLS handshaking issue in Windows | 314 | FC-159 |
Add sign_transaction2 and sign_builder_transaction2 commands to explicitly specify keys for signing transactions |
2048 | 2049 |
Show block numbers in account history in CLI | - | 2113 |
Update an error message about unable to find an asset | - | 2206 |
Software Design
Description | Issue | Pull Request |
---|---|---|
Reflection/static_variant updates | - | FC-154, FC-156, FC-158, 1968 |
Remove Deprecated Files | 1219 | 1989 |
Remove obsolete code about unsupported boost versions | 1584 | FC-171 |
Minor code style changes and typos | - | 1955, 2007 |
Split wallet.cpp file into several smaller files | 950, 1432, 2003 | 2013, 2198 |
Post-hardfork cleanups | 1743 | 1751 |
Remove copy construct/assign for openssl wrappers | - | FC-166 |
Move FC_REFLECT_DERIVED_NO_TYPENAME into fc | - | FC-160 |
Fix build error: static assertion failed: Failed to reserve enough space in fc::fwd<T,S> | 1935 | FC-150, 1946 |
Update bool serialization | - | FC-192 |
Replace int with 64-bit types in static_variant | - | FC-195, FC-196 |
Fix potential infinity loop in exception::to_detail_string() |
- | FC-193 |
Warning and Infotext Fixes | - | 1959 |
Fix warnings | - | 1964, FC-155, FC-175 |
Minor fixes for 4.0 | - | 2134 |
Remove standalone delayed_node program |
1986, 2014 | 1988, 2016 |
Update copyright and contributors | 1524 | 1525, 2209 |
Build Process and Continuous Integration
Description | Issue | Pull Request |
---|---|---|
Remove custom FindBoost.cmake | - | FC-149 |
Fix macOS build, reset flag after testing compiler | - | 1929 |
Support Building on OpenBSD | - | FC-148, FC-153, FC-194, 1910 |
Replace build tools for cat-parts and embed_genesis |
- | 1923, 2029 |
CMake cleanup & MinGW support | 2055, 2065 | FC-121, 1706, 2069 |
Use appropriate static/dynamic openssl libs for curl | - | 1980 |
Fix compilation for macOS | 2070 | FC-181, 2071 |
Improve Sonar Scanning | 2025, 2095 | 2039, 2096, 2102, 2124 |
Documentation
Description | Issue | Pull Request |
---|---|---|
Change Graphene Witness Node to BitShares Witness Node | - | 1994 |
Move some classes into namespaces | 1895 | 1992, FC-164 |
Update README | 1897 | 2060, 2207 |
Update Doxyfile | - | 2210 |
Update Wiki | - | 2211 |
Unit Tests
Description | Issue | Pull Request |
---|---|---|
Remove witness plugin from cli test | - | 1962 |
Unit tests for BSIP-40 | - | 2044, 2081 |
Supplement fix for cli_test crash | 2067 | 2068 |
Docker
Description | Issue | Pull Request |
---|---|---|
Fix issue: logging.ini does not symlinked inside docker CT | 1723 | 2010 |
Set default docker cfg max-ops-per-account to 100 | - | 2091 |
Release Contributors
@abitmore
@christophersanborn
@crazybits
@crypto-ape
@heifner
@ioBanker
@jmjatlanta
@manikey123
@MichelSantos
@mvandeberg
@nathanhourt
@OpenLedgerApp (Alexey Frolov and ddylko)
@oxarbitrage
@pmconrad
@ryanRfox
@spartucus