Skip to content

@richmills3 richmills3 released this May 24, 2021

Headline changes since 1.0.7

  • Support for creating double-spend enabled transactions; if a double-spend of an input is seen, a HTTP notification will be sent to a specified endpoint. (Please refer to here for further details)
  • New getorphaninfo RPC.
  • New verifyScript RPC.
  • New getmerkleproof2 RPC consistent with latest TSC.
  • maxstackmemoryusageconsensus parameter added to output of getsettings RPC.
  • sendrawtransaction and sendrawtransactions RPC can be used with dontCheckFees even when a transaction is already known.
  • sendrawtransaction and sendrawtransactions RPC modified to optionally return list of unconfirmed parents.
  • New configuration parameter -dustlimitfactor available to define dust.
  • Free consolidation transaction can be used to avoid dusting attack.
  • Adjusted default maximum validation duration for async tasks to better handle chains and long graphs.
  • Change algorithm for using ancestor height rather than ancestor count.
  • Improve release rate from Oprhan pool.
  • Better performance as a result of improvements to cs_main processing.
  • Improved validation of chains.
  • Transactions will not be accepted if the result is an in-mempool ancestor chain of height 10,000 or more. Previously this figure was 1000 transactions.
  • The default value for the maxorphantxsize configuration parameter has been changed to 1GB
  • The maxcollectedoutpoints configuration parameter is no longer used and has been removed.
  • The STN is being reset.

Changes since 1.0.8.beta

  • Fixed the dust return script condition in IsDustReturnScript. The previous version incorrectly contained an OP_4.
  • Fixed a bug that caused double spend notifications to be skipped for previously detected but unreported double-spends.
  • Fixed an issue that could cause mempool and journal inconsistencies during a reorg.

Other technical changes

  • Remove all support for Tor.
  • Configure docker images so that core dump is preserved.
  • Include header files in CMAKE build.
  • Make CBlockIndex thread safe to remove cs_main dependency.
  • Encapsulate mapBlockIndex and remove cs_main dependency.
  • Create leaky bucket for tracking peer suspension score.
  • Remove non-ctor init function in networkprocessing.
  • Soft block orphaning support (not used).
  • Refactor NET logging category.
  • Move lNodesAnnouncingHeaderAndIDs into BlockDownloadTracker.
  • Replace rand with the facilities in .
  • Allow parallel downloads of the same block from several peers.
  • Error message can be of 'txid' instead of 'hash' at the beginning for incorrect txid value while executing getmerkleproof RPC as like verifymerkleproof RPC.
  • GlobalConfig class is not thread safe.
  • dev branch clang warning -Wdefaulted-function-deleted.
  • Initialize class members where clang requires.
  • Fix: P2P Messages In Multiple TCP Segments.
  • Improve detection of longer chains.
  • Improved orphan transaction processing.
  • Reduce Logging Cost.
  • Fix runtime errors in unit test (Windows os).
  • Global thread-local interferes with address sanitizer.
  • Remove libatomic dependency.
  • Undefined behaviour sanitiser reporting vector out of bounds access in CBlockFileInfoStore::FlushBlockFile.
  • Fix: St16invalid_argument displays many times on startup.
  • Falsely logged error opening rev.dat in logs.
  • Fix: coredump at shutdown within logging.
  • Fix: failure in CTxMemPool::GetMemPoolChildrenNL.
  • Fix: a possible false negative result during querying the PTV processing queue.
  • Remove maxcollectedoutpoints configuration parameter.
  • Improved stability when accepting transactions during the reorg.

Functional tests

  • Fix: import-rescan.py - possible race condition during tip update signaling.
  • Fix: bsv-factorMaxSendQueueBytes functional test fails on Windows.
  • Remove test/test_bitcoin_fuzzy.cpp.
  • Fix: failing functional test bsv-getdata.py.
  • Add a new FT to test long chains of CPFP txs.
  • Fix: bsv-magicbytes.py functional test failed.
  • Fix: internittent failure in bsv-block-propagation-priority.py.
  • Fix: Random failures of bsv_pbv_firstvalidactive.py functional test.
  • Fix: Failing util tests on Windows.
  • Fix for issue detected by bsv-dsreport.py and bsv-ds-bad-callback-service.py on Windows.
  • Wait_for_getdata method is misused in functional tests.

Security

  • Remove warnings from source code.
  • Update out-of-date dependencies with known security issues.
  • Lock consistency violations in WPUSMutex.
  • CReeRate calculation of CPFP groups allows invalid amounts.
  • Incorect usage of cs_main.

Scaling Test Network (STN) Reset

The Scaling Test Network has been reset at block height 5. This block has hash
00000000e9222ebe623bf53f6ec774619703c113242327bdc24ac830787873d6.

Additional notes

New command line option -dustlimitfactor available to define dust.

Until now, the minimum ratio between a transaction output amount and its corresponding fee is 3/1.
If this condition was not met, the transaction was considered “dust” and was rejected during validation.

This factor can now be configured via the new “-dustlimitfactor” option in percent, which still defaults
to 300% but can be set to any value between 300% and 0%.

If the -dustlimitfactor is set to zero, then no transaction output is regarded as dust.

The formula for calculating the dust threshold is as follows (integer arithmetic):

s = serialized size of transaction output
d = dustlimitfactor, percent value between 300 and 0, default: 300
r = dustrelayfee, default: default-minrelaytxfee, 250 as of v1.0.8
m = 148, minimum bytes of spendable input

d * (r * (s + m)/1000)) / 100

Note that the division by 100 as the dustlimitfactor specifies a percentage value.

A transaction exactly at the threshold passes. If one output is below the threshold, the transaction is rejected.

Example: For a typical transaction with an output of 34 bytes in size, the formula yields a threshold of 135 Satoshis.

s = 34
d = 300
r = 250
m = 148

Threshold = (300 * (250 * (34 + 148)/1000)) / 100 = 135

Note the same formula would give a threshold of 136.5 Satoshis if floating point arithmetic is used.

A typical transaction output, with the default parameter settings in 1.0.8, needs to be worth 135
Satoshis not to be considered dust. Note that due to rounding, the calculated dust threshold for the
example transaction becomes 0 if the dustlimitfactor and the dustrelayfee are very low.

Free consolidation transaction can be used to avoid dusting attack.

Transaction validation has now been relaxed to allow a new kind of transaction, the dust return transaction.
This new transaction type allows donating dust to miners via fees as a new way to counter wallet dusting attacks.
This is more economical for the network because it allows clearing the wallets and UTXO databases from otherwise
practically unspendable outputs, whilst completely removing the incentive to conduct dust attacks at all.

A transaction is considered a dust return transaction if the following conditions are met:

  • The transaction has a single output of zero value (zero amount).

  • The scriptPubKey is as follows:

      OP_FALSE OP_RETURN OP_PUSHDATA ‘dust’.
    

All inputs must be standard inputs or the following node configuration parameter must be set:

-acceptnonstdconsolidationinput=1

The node must also be configured to accept non standard transactions. I.e. following configuration option must be set:

-acceptnonstdtx=1

Note that dust return transactions share two configuration parameters with consolidation transactions:

  • -acceptnonstdconsolidationinput (default: 0)
  • -minconsolidationfactor (default: 20. Setting consolidation factor to 0 disables consolidation transactions and dust return transactions as well)
Assets 2
Pre-release

@richmills3 richmills3 released this May 10, 2021

Headline changes since 1.0.7

  • Support for creating double-spend enabled transactions; if a double-spend of an input is seen,i
    a HTTP notification will be sent to a specified endpoint. The specification for such double-spend
    enabled transactions can be found here.
  • New getorphaninfo RPC.
  • New verifyScript RPC.
  • New getmerkleproof2 RPC consistent with latest TSC.
  • maxstackmemoryusageconsensus parameter added to output of getsettings RPC.
  • sendrawtransaction and sendrawtransactions RPC can be used with dontCheckFees even when a transaction is already known.
  • sendrawtransaction and sendrawtransactions RPC modified to optionally return list of unconfirmed parents.
  • New command line option -dustlimitfactor available to define dust.
  • Inputs with dust amounts can now be returned to miners as a fee even if below the miner fee rate, when sent via single zero amount OP_FALSE OP_RETURN 'dust' output.
  • Adjusted default maximum validation duration for async tasks to better handle chains and long graphs.
  • Change algorithm for using ancestor height rather than ancestor count.
  • Improve release rate from Oprhan pool.
  • Better performance as a result of improvements to cs_main processing.
  • Improved validation of chains.

Technical changes

  • Remove all support for Tor.
  • Configure docker images so that core dump is preserved.
  • Include header files in CMAKE build.
  • Make CBlockIndex thread safe to remove cs_main dependency.
  • Encapsulate mapBlockIndex and remove cs_main dependency.
  • Create leaky bucket for tracking peer suspension score.
  • Remove non-ctor init function in networkprocessing.
  • Soft block orphaning support (not used).
  • Refactor NET logging category.
  • Move lNodesAnnouncingHeaderAndIDs into BlockDownloadTracker.
  • Replace rand with the facilities in .
  • Allow parallel downloads of the same block from several peers.
  • Error message can be of 'txid' instead of 'hash' at the beginning for incorrect txid value while executing getmerkleproof RPC as like verifymerkleproof RPC.
  • GlobalConfig class is not thread safe.
  • dev branch clang warning -Wdefaulted-function-deleted.
  • Initialize class members where clang requires.
  • Fix: P2P Messages In Multiple TCP Segments.
  • Improve detection of longer chains.
  • Improved orphan transaction processing.
  • Reduce Logging Cost.
  • Fix runtime errors in unit test (Windows os).
  • Global thread-local interferes with address sanitizer.
  • Remove libatomic dependency.
  • Undefined behaviour sanitiser reporting vector out of bounds access in CBlockFileInfoStore::FlushBlockFile.
  • May 2021 STN reset.
  • Fix: St16invalid_argument displays many times on startup.
  • Falsely logged error opening rev.dat in logs.
  • Fix: coredump at shutdown within logging.
  • Fix: failure in CTxMemPool::GetMemPoolChildrenNL.
  • Fix: a possible false negative result during querying the PTV processing queue.
  • Remove maxcollectedoutpoints configuration parameter.
  • Updated default value for maxorphantxsize: from 100 MB to 1 GB
  • Updated default value for limitancestorcount: from 1000 to 10000
  • Improved stability when accepting transactions during the reorg.

Technical change details

New command line option -dustlimitfactor available to define dust.

Until now, the minimum ratio between a transaction output amount and its corresponding fee is 3/1.
If this condition was not met, the transaction was considered “dust” and was rejected during validation.

This factor can now be configured via the new “-dustlimitfactor” option in percent, which still defaults
to 300% but can be set to any value between 300% and 0%.

If the -dustlimitfactor is set to zero, then no transaction output is regarded as dust.

The formula for calculating the dust threshold is as follows (integer arithmetic):

s = serialized size of transaction output
d = dustlimitfactor, percent value between 300 and 0, default: 300
r = dustrelayfee, default: default-minrelaytxfee, 250 as of v1.0.8
m = 148, minimum bytes of spendable input

d * (r * (s + m)/1000)) / 100

Note that the division by 100 as the dustlimitfactor specifies a percentage value. Note also, that the setting
of the parenthesis is important due to integer arithmetic.

A transaction exactly at the threshold passes. If one output is below the threshold, the transaction is rejected.

Example: For a typical transaction with an output of 34 bytes in size, the formula yields a threshold of 135 Satoshis.

d = 300
s = 34
r = 250

Threshold = (300 * (250 * (34 + 148)/1000)) / 100 = 135

Note the same formula would give a threshold of 136.5 Satoshis if floating point arithmetic is used.

Consequently, with the default parameter settings in 1.0.8, a typical transaction output needs to be worth 135
Satoshis at least to be not considered dust. Note that due to rounding, the calculated dust threshold for the
example transaction becomes 0 if the dustlimitfactor and the dustrelayfee are very low.

Free consolidation transaction can be used to avoid dusting attack.

Transaction validation has now been relaxed to allow a new kind of transaction, the dust return transaction.
This new transaction type allows donating dust to miners via fees as a new way to counter wallet dusting attacks.
This is more economical for the network because it allows clearing the wallets and UTXO databases from otherwise
practically unspendable outputs, whilst completely removing the incentive to conduct dust attacks at all.

A transaction is considered a dust return transaction if the following conditions are met:

  • it has only one output.

  • the txn outputs a zero amount, i.e. the single output of the transaction has zero value.

  • The scriptPubKey is as follows:

      OP_FALSE OP_RETURN n ‘dust’.
    

    where n = length of the protocol ID, i.e. string size of ‘dust’.

  • Either all inputs are standard or configuration following parameter is set:

    -acceptnonstdconsolidationinput=1 (default: 0)

  • Non standard transactions must be allowed, i.e. following configuration must be set:

    -acceptnonstdtx=1 (default: 1)

Note that dust return transactions share two configuration parameters with consolidation transactions:

  • -acceptnonstdconsolidationinput (default: false)
  • -minconsolidationfactor (default: not zero. Setting consolidation factor to 0 disables consolidation transactions and dust return transactions as well)

Functional tests

  • Fix: import-rescan.py - possible race condition during tip update signaling.
  • Fix: bsv-factorMaxSendQueueBytes functional test fails on Windows.
  • Remove test/test_bitcoin_fuzzy.cpp.
  • Fix: failing functional test bsv-getdata.py.
  • Add a new FT to test long chains of CPFP txs.
  • Fix: bsv-magicbytes.py functional test failed.
  • Fix: internittent failure in bsv-block-propagation-priority.py.
  • Fix: Random failures of bsv_pbv_firstvalidactive.py functional test.
  • Fix: Failing util tests on Windows.
  • Fix for issue detected by bsv-dsreport.py and bsv-ds-bad-callback-service.py on Windows.
  • Wait_for_getdata method is misused in functional tests.

Security

  • Remove warnings from source code.
  • Update out-of-date dependencies with known security issues.
  • Lock consistency violations in WPUSMutex.
  • CReeRate calculation of CPFP groups allows invalid amounts.
  • Incorect usage of cs_main.

Known issues

  • A double-spend notification might not be triggered if a previously invalid double-spend was detected.

Scaling Test Network (STN) Reset

The Scaling Test Network has been reset at block height 5. This block has hash
00000000e9222ebe623bf53f6ec774619703c113242327bdc24ac830787873d6.

Assets 2

@richmills3 richmills3 released this Apr 22, 2021

Version 1.0.7.1 is a critical upgrade to version 1.0.7.

List of changes since 1.0.7

  • Performance hardening changes to ensure performance remains stable under adverse network conditions.
Assets 2

@richmills3 richmills3 released this Feb 10, 2021

Headline changes since 1.0.6

  • Removed performance penalty for long chains. Mempool performance does not depend on the transaction's chain length anymore.
  • Legacy block assembler removed; support for low priority / free transactions removed.
  • Refactoring of CCoinView.
  • P2P improvements.

Full list of changes between 1.0.6 and 1.0.7.beta

  • Increased default maximum ancestors count for paying transactions to 1000.
  • Removing transactions from the mempool when a new block is mined is much faster. As a consequence, block propagation is faster.
  • More efficient mempool transaction eviction algorithm.
  • Removed the Legacy block assembler; Journaling block assembler is now the only block assembler available.
  • Efficient detection of the CPFP (child pays for the parent) groups.
  • Limiting the total size of the low-paying transactions in the mempool as the percent of the mempool size.
  • Limiting the ancestors count for the low-paying transactions to 25, and as consequence, limiting the maximal size of the CPFP groups.
  • Stopped limitting transaction chains by ancestors size in the mempool.
  • Stopped limitting transaction chains by descedant statistics, both size and count.
  • Removed concept of the "high priority / free transactions". We are not accepting nor relaying them any more.
  • Added command line switches:
    • mempoolmaxpercentcpfp, Percentage of total mempool size to allow for low paying transactions. Default: 10%
    • limitcpfpgroupmemberscount, Maximal number of non-paying ancestors a single transaction can have. Thus, the maximal size of a CPFP group. Default 25.
    • disablebip30checks Disables BIP30 checks when connecting a block. Not active on the mainnet.
  • Removed command line switches:
    • limitancestorsize, Not tracking ancestors size in the new implementation.
    • limitdescendantcount, limitdescendantsize Not keeping descendant statistics in the new implementation.
    • limitfreerelay relaypriority printpriority blockprioritypercentage Removed concept of the "free / high priority" transactions
  • The prioritisetransaction RPC method ignores the first positional argument (modified priority), which must be 0, and uses only the second argument (modified fee) into account.
  • Other changes to the RPC methods, added and removed JSON entries:
RPC Method Entries Added Entries Removed
getrawmempool, getmempoolancestors, getmempooldescendants, getmempoolentry startingpriority, currentpriority, descendantcount, descendantsize, descendantfees, ancestorcount, ancestorsize, ancestorfees
getmempoolinfo usagedisk, usagecpfp, maxmempooldisksize, maxmempoolsizecpfp
getmininginfo blockprioritypercentage
getblocktemplate sigops, sigoplimit
  • Implement HTTP streaming for getblocktemplate
  • Do not load large blocks into memory
  • Performance - CCoinView refactoring
  • Endomorphism is now ON by default in libsecp256k1
  • New configurable connection timeout for validating blocks.
  • Serialize in getblock RPC without cs_main
  • Maximum size of INV messages configurable
  • Change -rejectmempoolrequest default to true
  • Separate P2P Control and Data Channels
  • Implement HTTP streaming for getrawmempool
  • Expose consensus and policy limits through RPC
  • Improve interface to Stream::GetNewMsgs
  • Fix: If setAskFor fills up then transaction requesting stops.
  • Simplify JSonWriter
  • Allow the available stream policies to be set by the config
  • Message processing stall remedy
  • Send GETDATA for blocks over the higher priority stream.
  • Fix: Slow reading of coins from database when using leveldb iterators
  • sendrawtransaction RPC - fix PrioritiseTransaction/ClearPrioritisation usage to be exception safe.
  • sendrawtransaction RPC - functional test – send already known transaction and create block.
  • sendrawtransaction RPC - check if transaction is already known before validation starts.
  • Remove bitcoin-seeder.
  • Fix: Coredump at shutdown with scriptCheckQueuePool
  • Fix: Consolidation tx option 'acceptnonstdconsolidationinput' uses wrong type
  • Fix: Consolidation variable name and update function to respect interface
  • Fix: maxConsolidationInputScriptSize parameter should use GetArgAsBytes() function in init.cpp
  • Fix: Possible XSS vulnerability
  • Fix: Update Windows build instructions
  • Fix: sendtransactions PRC should use JSON response streaming
  • Fix: Implicit loop conversions
  • Unused code removed
  • False positive check for null dereferencing in merkle proof
  • Explicitly define the missing special members for ZMQPublisher
  • Decimal is not defined. Change its name or define it before using it
  • Fix: getutxos RPC should serialize integer when serializing RPC call id
  • Removed call to virtual function Flush() in dtor of text writer
  • Refactor default parameters of virtual function in TextWriter
  • Backport performance improvement to rolling bloom filter
  • Fix: bench_bitcoin fails on build with --disable-wallet
  • Use pointer or reference to avoid slicing from "CAddress" to "CService
  • Fix: Uninitialized member in CWalletDBWrapper
  • Revert unordered->ordered map/set for COutPoint -> coins.
  • ZMQ: add method for distinct zmq ports when running functional tests in parallel
  • Fix: snprintf overflows write buffer
  • Remove 'bitcoin' prefix from worker thread names
  • Prevent unnecessary copies in range loops
  • Fix: Unhandled nullptr in GetDiskBlockStreamReader if file does not exist
  • Add list of supported stream policies to the output of getnetworkinfo
  • Provide an option to increase the number of open files for leveldb. Increasing number of open files improves performance of transaction validation.
  • Fix: Starting bitcoind with negative value for consolidation transaction parameters is setting very high values internally
  • Remove dead code that was accidentally introduced by parallel block validation task
  • Fix: cURL example of gettxouts RPC help
  • Add stream type enumerations to python test framework
  • Test framework - make Key.py locate correct openssl implementation on Mac
  • Test framework: add tx hash to log
  • Make using network associations in the functional tests easy.
  • Replace time.sleep with wait_until in reindex.py
  • Protect all uses of txinvs with mininode_lock in bsv-consolidation-feefilter.py
  • Add an extra config params to the bsv-ptv-rpc-sendrawtransactions.py functional test.
  • Fix: Functional test bsv-genesis-activation-transactions-beforeafter fails occasiobally.
  • Fix: bsv-pvq-timeouts.py functional test fails occasionally
  • Fix: bsv-genesis-large-blockfile-reindex.py functional test fails occasionally
  • Fix: bsv-genesis-journal-reorg_2.py functional test fails occasionally
  • Fix: Functional test bsv-genesis-general fails with timeout in height_based_test_framework
  • Fix: Functional test bsv-sigopslimit-consensus-test.py fails occasionally.
  • Fix: bsv-128Mb-blocks functional test fails occasionally
  • Fix: example-test.py functional test fails occasionally
  • Fix: bsv-coinbase_P2SH.py functional test fails occasionally
  • Fix: bsv-sigopslimit-policy-test.py functional test fails occasionally
  • Fix: p2p_inv_msg_time_order2.py functional test fails occasionally
  • Fix: Functional test bsv-pvq-timeouts sometimes fails with timeout
  • Fix: Functional test bsv-genesis-spendable-op-return fails occasionally.
  • Fix: Functional test bsv-genesis-general (Increased max policy tx size) fails.
  • Fix: Functional test mining journal fails occasionally.
  • Fix: Functional test bsv-block-stalling-test.py fails occasionally.
  • Fix: Functional test p2p-fullblocktest fails occasionally.
  • Fix: Functional test abc-p2p-compactblock fails occasionally.
  • Fix: txn_clone test fails if transaction is sent after nodes reconnect
  • Fix: Functional test bsv-mempool_ancestorsizelimit can fail on a busy environment
  • Fix: merkle_proof.py generate takes to long for 1500 blocks
  • Fix: Functional test bsv-block-size-activation-generated-default fails occasionally.
  • Fix: Functional test bsv-consolidation-p2pkh.py fails occasionally.
  • Fix: Functional test bsv-journal-mempool-reorg-ordering.py fails occasionally.
  • Fix: test bsv-zmq-txremovedfrommempool.py
  • Race condition while running zmq_test.py
  • Fix: Address sanitizer issue with unit tests.
  • Fix: Failing rpc_tests/rpc_ban
  • Fix: Unit tests fail to build
  • bsv-protoconf.py starts to fail with large value of maxprotocolrecvpayloadlength
  • Explicitly define the missing copy constructor

List of changes since 1.0.7.beta

  • Ensure correct id type in RPC
  • New RPC dumpparameters to provide configuration settings.
  • Help text - coinbaseValue parameter added to help text for getminingcandidate RPC.
  • Packaged Diagnostic Service - allows remote gathering of diagnotic information.
  • The default value for maxcoinsprovidercachesize = 1GB and must be at least 1MB.
  • The mempoolminfee (rolling fee) is prevented from becoming greater than blockminfee while there are secondary mempool transactions.
  • Fix: Heap used after free during shutdown.
  • Fix: possible undefined behaviour processing block requested via getdata.
  • Fix: Undefined behaviour in RIPEMD160, SHA1 and SHA256 code.
  • Fix: Possible referenced null pointer triggered by help RPC command.
Assets 2
Pre-release

@richmills3 richmills3 released this Jan 13, 2021

Headline changes since 1.0.6

  • Removed performance penalty for long chains. Mempool performance does not depend on the transaction's chain length anymore.
  • Legacy block assembler removed; support for low priority / free transactions removed.
  • Refactoring of CCoinView.
  • P2P improvements.

Full list of changes since 1.0.6

  • Increased default maximum ancestors count for paying transactions to 1000.
  • Removing transactions from the mempool when a new block is mined is much faster. As a consequence, block propagation is faster.
  • More efficient mempool transaction eviction algorithm.
  • Removed the Legacy block assembler; Journaling block assembler is now the only block assembler available.
  • Efficient detection of the CPFP (child pays for the parent) groups.
  • Limiting the total size of the low-paying transactions in the mempool as the percent of the mempool size.
  • Limiting the ancestors count for the low-paying transactions to 25, and as consequence, limiting the maximal size of the CPFP groups.
  • Stopped limitting transaction chains by ancestors size in the mempool.
  • Stopped limitting transaction chains by descedant statistics, both size and count.
  • Removed concept of the "high priority / free transactions". We are not accepting nor relaying them any more.
  • Added command line switches:
    • mempoolmaxpercentcpfp, Percentage of total mempool size to allow for low paying transactions. Default: 10%
    • limitcpfpgroupmemberscount, Maximal number of non-paying ancestors a single transaction can have. Thus, the maximal size of a CPFP group. Default 25.
    • disablebip30checks Disables BIP30 checks when connecting a block. Not active on the mainnet.
  • Removed command line switches:
    • limitancestorsize, Not tracking ancestors size in the new implementation.
    • limitdescendantcount, limitdescendantsize Not keeping descendant statistics in the new implementation.
    • limitfreerelay relaypriority printpriority blockprioritypercentage Removed concept of the "free / high priority" transactions
  • The prioritisetransaction RPC method ignores the first positional argument (modified priority), which must be 0, and uses only the second argument (modified fee) into account.
  • Other changes to the RPC methods, added and removed JSON entries:
RPC Method Entries Added Entries Removed
getrawmempool, getmempoolancestors, getmempooldescendants, getmempoolentry startingpriority, currentpriority, descendantcount, descendantsize, descendantfees, ancestorcount, ancestorsize, ancestorfees
getmempoolinfo usagedisk, usagecpfp, maxmempooldisksize, maxmempoolsizecpfp
getmininginfo blockprioritypercentage
getblocktemplate sigops, sigoplimit
  • Implement HTTP streaming for getblocktemplate
  • Do not load large blocks into memory
  • Performance - CCoinView refactoring
  • Endomorphism is now ON by default in libsecp256k1
  • New configurable connection timeout for validating blocks.
  • Serialize in getblock RPC without cs_main
  • Maximum size of INV messages configurable
  • Change -rejectmempoolrequest default to true
  • Separate P2P Control and Data Channels
  • Implement HTTP streaming for getrawmempool
  • Expose consensus and policy limits through RPC
  • Improve interface to Stream::GetNewMsgs
  • Fix: If setAskFor fills up then transaction requesting stops.
  • Simplify JSonWriter
  • Allow the available stream policies to be set by the config
  • Message processing stall remedy
  • Send GETDATA for blocks over the higher priority stream.
  • Fix: Slow reading of coins from database when using leveldb iterators
  • sendrawtransaction RPC - fix PrioritiseTransaction/ClearPrioritisation usage to be exception safe.
  • sendrawtransaction RPC - functional test – send already known transaction and create block.
  • sendrawtransaction RPC - check if transaction is already known before validation starts.
  • Remove bitcoin-seeder.
  • Fix: Coredump at shutdown with scriptCheckQueuePool
  • Fix: Consolidation tx option 'acceptnonstdconsolidationinput' uses wrong type
  • Fix: Consolidation variable name and update function to respect interface
  • Fix: maxConsolidationInputScriptSize parameter should use GetArgAsBytes() function in init.cpp
  • Fix: Possible XSS vulnerability
  • Fix: Update Windows build instructions
  • Fix: sendtransactions PRC should use JSON response streaming
  • Fix: Implicit loop conversions
  • Unused code removed
  • False positive check for null dereferencing in merkle proof
  • Explicitly define the missing special members for ZMQPublisher
  • Decimal is not defined. Change its name or define it before using it
  • Fix: getutxos RPC should serialize integer when serializing RPC call id
  • Removed call to virtual function Flush() in dtor of text writer
  • Refactor default parameters of virtual function in TextWriter
  • Backport performance improvement to rolling bloom filter
  • Fix: bench_bitcoin fails on build with --disable-wallet
  • Use pointer or reference to avoid slicing from "CAddress" to "CService
  • Fix: Uninitialized member in CWalletDBWrapper
  • Revert unordered->ordered map/set for COutPoint -> coins.
  • ZMQ: add method for distinct zmq ports when running functional tests in parallel
  • Fix: snprintf overflows write buffer
  • Remove 'bitcoin' prefix from worker thread names
  • Prevent unnecessary copies in range loops
  • Fix: Unhandled nullptr in GetDiskBlockStreamReader if file does not exist
  • Add list of supported stream policies to the output of getnetworkinfo
  • Provide an option to increase the number of open files for leveldb. Increasing number of open files improves performance of transaction validation.
  • Fix: Starting bitcoind with negative value for consolidation transaction parameters is setting very high values internally
  • Remove dead code that was accidentally introduced by parallel block validation task
  • Fix: cURL example of gettxouts RPC help
  • Add stream type enumerations to python test framework
  • Test framework - make Key.py locate correct openssl implementation on Mac
  • Test framework: add tx hash to log
  • Make using network associations in the functional tests easy.
  • Replace time.sleep with wait_until in reindex.py
  • Protect all uses of txinvs with mininode_lock in bsv-consolidation-feefilter.py
  • Add an extra config params to the bsv-ptv-rpc-sendrawtransactions.py functional test.
  • Fix: Functional test bsv-genesis-activation-transactions-beforeafter fails occasiobally.
  • Fix: bsv-pvq-timeouts.py functional test fails occasionally
  • Fix: bsv-genesis-large-blockfile-reindex.py functional test fails occasionally
  • Fix: bsv-genesis-journal-reorg_2.py functional test fails occasionally
  • Fix: Functional test bsv-genesis-general fails with timeout in height_based_test_framework
  • Fix: Functional test bsv-sigopslimit-consensus-test.py fails occasionally.
  • Fix: bsv-128Mb-blocks functional test fails occasionally
  • Fix: example-test.py functional test fails occasionally
  • Fix: bsv-coinbase_P2SH.py functional test fails occasionally
  • Fix: bsv-sigopslimit-policy-test.py functional test fails occasionally
  • Fix: p2p_inv_msg_time_order2.py functional test fails occasionally
  • Fix: Functional test bsv-pvq-timeouts sometimes fails with timeout
  • Fix: Functional test bsv-genesis-spendable-op-return fails occasionally.
  • Fix: Functional test bsv-genesis-general (Increased max policy tx size) fails.
  • Fix: Functional test mining journal fails occasionally.
  • Fix: Functional test bsv-block-stalling-test.py fails occasionally.
  • Fix: Functional test p2p-fullblocktest fails occasionally.
  • Fix: Functional test abc-p2p-compactblock fails occasionally.
  • Fix: txn_clone test fails if transaction is sent after nodes reconnect
  • Fix: Functional test bsv-mempool_ancestorsizelimit can fail on a busy environment
  • Fix: merkle_proof.py generate takes to long for 1500 blocks
  • Fix: Functional test bsv-block-size-activation-generated-default fails occasionally.
  • Fix: Functional test bsv-consolidation-p2pkh.py fails occasionally.
  • Fix: Functional test bsv-journal-mempool-reorg-ordering.py fails occasionally.
  • Fix: test bsv-zmq-txremovedfrommempool.py
  • Race condition while running zmq_test.py
  • Fix: Address sanitizer issue with unit tests.
  • Fix: Failing rpc_tests/rpc_ban
  • Fix: Unit tests fail to build
  • bsv-protoconf.py starts to fail with large value of maxprotocolrecvpayloadlength
  • Explicitly define the missing copy constructor
Assets 2

@richmills3 richmills3 released this Nov 17, 2020

List of Changes since 1.0.5

  • New RPC to retrieve UTXOs.
  • sendrawtransactions returns any double spend transaction IDs.
  • Refactor code so HTTP client requests can be made from bitcoind.
  • New RPC to list ZMQ notifications and endpoints.
  • ZMQ notifications for transaction mempool removal.
  • Insecure function (sprintf) no longer used.
  • Make ZMQ interface thread safe.
  • RPC to provide Merkle proofs for transaction inclusion in blocks.
  • Invalid transactions can now be published to ZMQ or stored to disk.
  • Ensure the fallback path for packages (bitcoinsv.io) in the Gitian build contains all required packages.
  • Fix to Gitian build.
  • Fix: Accessing memory after std::move.
  • ZMQ: Push information (blockhash) in which block transaction we collided with arrived.
  • Do not use deprecated boost bind features.
  • Remove logging from consensus.
  • Validation status dos cleanup.
  • ThreadSanitiser reports issues in thread safe queue tests.
  • ThreadSanitiser reported heap-use-after-free.
  • Fix: gettxouts parameters CLI type mismatch.
  • Fix: CheckTxInputExists should not be used.
  • Remove assert and fix shutdown after unsuccessful startup.
  • Unconditionally log P2P stall messages if denugp2pthreadstalls is specified.
  • Fix: clearinvalidtransactions RPC returned the number of bytes freed as zero.
  • Fix: #include added to script_num.cpp to fix build issues with later compilers.
  • Rename ZMQ topic zmqpubremovedfrommempool to zmqpubdiscardedfrommempool.
  • November 2020 STN reset.

Scaling Test Network (STN) Reset

The Scaling Test Network has been reset at block height 4. This block has hash
00000000d33661d5a6906f84e3c64ea6101d144ec83760bcb4ba81edcb15e68d.

Assets 2
Pre-release

@richmills3 richmills3 released this Sep 30, 2020

List of Changes since 1.0.5

  • New RPC to retrieve UTXOs.
  • sendrawtransactions returns any double spend transaction IDs.
  • Refactor code so HTTP client requests can be made from bitcoind.
  • New RPC to list ZMQ notifications and endpoints.
  • ZMQ notifications for transaction mempool removal.
  • Insecure function (sprintf) no longer used.
  • Make ZMQ interface thread safe.
  • RPC to provide Merkle proofs for transaction inclusion in blocks.
  • Invalid transactions stored in repository.
  • Ensure the fallback path for packages (bitcoinsv.io) in the Gitian build contains all required packages.
  • Fix to Gitian build.
  • Fix: Accessing memory after std::move.
Assets 2

@richmills3 richmills3 released this Sep 16, 2020

List of Changes since 1.0.4

  • Make Journaling block assembler the default. The legacy block assembler is scheduled for removal in a future release.
  • Journaling block assembler now respects -blockmintxfee
  • New consolidation transaction policy. Consolidation transactions are now processed for free.
  • New RPC function sendrawtransactions - support submitting multiple transactions in a single call.
  • PTV: optimise txn lookup
  • Allow size values in bitcoin.conf to be set with human readable values
  • Update dust relay fee
  • Increase size limit for GETBLOCKTXN messages.
  • Stop NetworkThread when functional test ends
  • Split the network properly in functional tests
  • example_test.py inconsistency
  • bsv-genesis-mempool-scriptcache.py functional test fails
  • Fix bsv-genesis-general.py by increasing timeout for tx to be rejected in height_based_framework
  • Increase/fix timeout in comptool sync_blocks and sync_transactions
  • sendheaders.py functional test fails
  • Fix bsv-genesis-activation-gracefull-period.py by using wait_until() instead of sleep()
  • NodeConn constructor can fail if NetworkThread is already running
  • Fix disconnect_ban.py by increasing ban time
  • Fix for sync_all() "Mempool sync failed" assertion error in mempool_reorg.py test
  • IsPayToScriptHash decoupled from CScript
  • Prevent blocking the socket handling thread.
  • Fix potential deadlock in rpc walletpassphrase
  • Fixed values for extra_args: -maxmempool and -maxtxsizepolicy
  • Remove redundant code CScript::IsWitnessProgram
  • Fix incorrect and misleading comment.
  • Fix executable status on tests.
  • Failure of bsv-trigger-safe-mode-by-invalid-chain.py
  • Fix bsv block stalling test.py
  • Fix functional test net.py fail on ping pong
  • Reduce number of lines logger stores in memory
  • Fix spelling in error message
  • Fix_dbcrash.py
  • Fix whitespace in RPC help output
  • Move opcodes to separate files
  • Fix casting alignments in bitcoin-miner.cpp
  • Shutdown JBA while unit test deletes blocks.
  • Increase timeout for p2p accept to 60
  • Update dust threshold amount in transactions test
  • Remove use of deprecated zmq api functions
  • Functional test conversions.
  • Reduce number of chain tip copies
  • Race condition in comptool.py
  • p2p_compactblocks.py functional test fails with timeout
  • bsv-2Mb-excessiveblock.py functional test fails
  • Support CMake 3.17 and python 3.8
  • Fix verify binaries script
  • Increase timeout for _new_block_check_accept in height_based_test_framework.py
  • Improve logging in python test framework
  • Improve test runner to print currently running jobs
  • Refactor Python functional test framework
  • Make functional test clean up running bitcoind instances
  • Increase timeout for p2p accept to 60
  • Add missing #include
  • Enable -maxmempool config setting, to accept zero value.
  • Fix inconsistency between policy and consensus limits for maxopsperscript
  • Add a thread-safe function to clear messages with mininode
  • Failing script tests caching invalid signatures
  • Update configure script to require version of libzmq >= 4.3.2
  • Fix memory buildup if log file doesnt have write permissions
  • Journal Rebuild After Block
  • Remove redundant code CScript Find
  • Clean up comments and dead code from when BIP 125 was removed
  • Backport of Core PR#18806 to clarify CVE fix
  • Make SOCKET of type int on UNIX
  • Refactor CNode
  • Remove support for upgrading database from old format.
  • Handle exception in ActivateBestChainStep
  • Instruction iterator fix for OP_INVALIDOPCODE traversal.
  • Optimise relaying of transactions.
Assets 2

@richmills3 richmills3 released this Jul 1, 2020

Downloads available from https://download.bitcoinsv.io/bitcoinsv/1.0.4/

List of Changes

  • Gitian build fix: instruction[_iterator].h location in Makefile.am.
  • Ban nodes that violate the maxscriptnumlengthpolicy policy setting.
  • Fix race condition in bsv-trigger-safe-mode-by-invalid-chain.py.
  • Fix: bug in thread pool tests.
  • Fix: Failing unit tests in debug on develop branch.
  • Fix: P2P stops sending data under some circumstances.
  • Remove excess physical dependencies (#includes) on script.h.
  • Fix: Missing debug flags in CMake.
  • Minimum mempool size should be at least 30% of default mempool size.
  • Optimise frequent malloc calls in GetOp2.
  • Reduce the number of orphan transactions during PTV processing.
  • Windows build; Separate running tests from C++ build.
  • Fix: formatting of floating point number in log messages.
  • Implement caching invalid signatures.
  • Fix: P2P getaddr returns very polluted results.
  • Increase default script cache size to improve performance with large blocks.
  • Fix: Failing functional tests.
Assets 2

@richmills3 richmills3 released this Apr 28, 2020

Downloads available from https://download.bitcoinsv.io/bitcoinsv/1.0.3/

List of Changes

  • Fix errors reported by Address sanitizer
  • User input to RPC submitblock can crash node
  • Fix: improve functional tests nodes synchronization stability
  • STN network reset (April 2020)
  • Fix: PTV race condition in bsv-highsigopsdensitymempool functional test
  • Build instructions updated for CentOS 7 and Ubuntu 16.04
  • Fix: Racy test in bsv-block-stalling-test.py
  • Add reference to BSV Wiki site to documentation
  • Fix duration profiling for "Connect transactions" in ConnectBlock()
  • RPC getblock method with verbosity 3 throws exception for blocks without CDiskBlockMetaData
  • RPC sendrawtransaction doesn't accept last argument 'dontcheckfee'
  • Fix lost transactions under high load.
  • Binary src/bench/bench_bitcoin aborts due to failing benchmark
  • Prevent P2SH outputs in coinbase transactions
  • Fix compiler error for MSVC trigger introduced in DetectStaling
  • Configurable P2P timeouts
  • Remove excess Padding in CTxMemPoolEntry
  • Fix forknotify.py test and consider CI improvements
  • Fix: Orphan txn processing keeps CNode reference
  • Add big block tests to CI build
  • Fix gcc-9 warnings
  • Fix: Journal errors in large reorg (over Genesis boundary)
  • Perform quick block validation venturing in large reorg
  • Do not activate safe mode for large forks with invalid blocks
  • Fix: security@bitcoinsv.io PGP key has expired
  • Remove "Warning: Unknown block versions being mined! It's possible unknown rules are in effect"
  • Remove P2SH test data from Makefile
  • Log calls to RPC function stop
  • getminingcandidate - include tx count + block size (excluding coinbase transaction)
  • Fix Typo on maxstackmemoryusageconsensus help
  • TOB;#20 Update OpenSSL depends package from 1.1.1 to 1.1.1d
  • Update help message for ancestor and descendant size limit
  • Add field "num_tx" to RPC "getblock 3"
  • bitcoin-tx supports encapsulating in P2SH
  • Centos 8 build, functional tests skipped: rpcbind and zmq
  • Remove unused variables in config_tests.cpp
  • Fix: IBD stalls at block 5095 (1GB transaction) on GT network
  • [GITHUB-131] provide for compilation on 32-bit systems without changing behavior on 64-bit
  • [GITHUB-124] Test failure on MacOSX
  • Remove warning: RPC getinfo warns that version 1.0.0 is pre-release
  • CBaseChainParams Lacks Virtual Destructor
  • [GITHUB-115] Update minimum required version of Boost to 1.59.0
  • [GITHUB-114] Fix typo: isGenesisEnsbled -> isGenesisEnabled
  • [GITHUB-122] Fix typos in RDP
  • [GITHUB-121] Replace ABC with SV logo in Doxygen
  • Remove -excessutxocharge startup parameter
  • TOB; #17 Several integer variables could overlow during block validation
  • [Github] Fix duplicate misbehaving message for sendheaders
  • Update the Responsible Disclosure Policy
  • OptBool net_processing.cpp cleanup
  • Fix: MAX_TX_SIZE_CONSENSUS_AFTER_GENESIS is missing in test/functional
  • Fix asserts and potential null pointer reference in call to PeerHasHeader
  • Remove the estimatefee RPC command
  • Add 'getblockstats' RPC call
  • Backport fix for CVE-2017-18350 - Severity: low
  • Remove CBlockPolicyEstimator
  • bitcoind crashes when too many RPC calls are made
  • Interrupt (^c) does not work during block verification in initialization
Assets 2