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.
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.
Thursday, July 30, 2020 13:55:00 UTCThe 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.
The default values for the Elastic Search Plugin have been changed. These changes are summarized under Elastic Search 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.
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.
Operators of API nodes need to edit their configuration file per the instructions in the 3.3.0 Release Notes API section.
Please check the 3.2.0 Release Notes for more information if you are upgrading from a version prior to 3.2.0.
Note: the minimum build requirements have changed _starting from the 3.3.0 Feature Release_:
The source code may be obtained by checking out the 4.0.0 tag. Download the source at:
The binaries may be built by using your pre-existing process, or by following the standard instructions that can be found in the wiki:
Your standard process for deploying the node software may be used. No additional requirements or precautions will be required to deploy the new release.
The latest Docker image may be found at BitShares Core Docker page and updated with
docker pull bitshares/bitshares-core
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|
The changes for 4.0.0 Protocol Release are summarized below.
|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|
|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|
|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|
|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|
Default settings for the Elastic Search Plugin have changed.
elasticsearch plugin:
_elasticsearch_operation_object is defaulted to true_elasticsearch_operation_string is defaulted to falsees_objects plugin:
_es_objects_limit_orders is defaulted to falseGeneral instructions for configuring Elastic Search are available here.
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.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|
|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|
|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
|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|
|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|
|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|
|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|
|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|
@abitmore
@christophersanborn
@crazybits
@crypto-ape
@heifner
@ioBanker
@jmjatlanta
@manikey123
@MichelSantos
@mvandeberg
@nathanhourt
@OpenLedgerApp (Alexey Frolov and ddylko)
@oxarbitrage
@pmconrad
@ryanRfox
@spartucus
Is the custom_operations_plugin meant to be active on public API nodes? If so we should mention it.
Please make sure that all pull requests listed in https://github.com/bitshares/bitshares-fc/milestone/3?closed=1 are included in the release notes. Thanks.
Done (in anticipation of #2042)
Updated with changes from test-4.0.3
Updated with changes from test-4.0.4
Note: #2041, #2042, #2090, #2212 and the pull requests about merging branches are not included in the release notes intendedly.