Skip to content

Releases: CounterpartyXCP/counterparty-core

v10.1.2

08 May 09:20
aac6448
Compare
Choose a tag to compare

Release Notes - Counterparty Core v10.1.2 (2024-05-08)

This version of Counterparty Core marks the release of API v2, a new RESTful API—see the official project documentation. The new API is available at /v2/, while the old API is now available at /v1/ in addition to /.

Upgrading

There is a guide for migrating from the v1 to the v2 API in the documentation, which specifies equivalences between old and new functionality.

This release maintains full backwards-compatibility and includes no protocol changes.

ChangeLog

Bugfixes

  • Fix logging of some raw tracebacks (#1715)
  • Retry on ChunkedEncodingError with AddrIndexRs; break loop on all errors
  • Fix bad logging of Rust module panic (#1721)

Codebase

  • Release API v2
  • Have both API v1 and v2 return ready if the last block is less than one minute old
  • Add an index on the block_index field in the credits and debits tables
  • Add TRACE level to Python logging
  • Add basic anonymous node telemetry

Command-Line Interface

  • Set default and minimum values for Backend Poll Interval to 3.0 seconds
  • Update docker-compose.yml to use different profiles for mainnet and testnet
  • Check that another process is not connected to the database before starting the server
  • Launch database quick check on startup if the database has not been correctly shut down
  • Support an additional level of verbosity with the CLI flags -vv
  • Add the --no-telemetry flag to disable node telemetry

Credits

  • Ouziel Slama
  • Adam Krellenstein
  • Warren Puffett
  • Matt Marcello

v10.1.1

19 Apr 14:50
fc3957b
Compare
Choose a tag to compare

Release Notes - Counterparty Core v10.1.1 (2024-04-19)

This is a relatively small release with a number of bugfixes, one of which is critical---in v10.0.x and v10.1.0 there is a bug which can cause nodes to crash upon a blockchain reorganization.

Upgrading

To upgrade from v10.1.0 manually, you must first uninstall the following Counterparty Core Python packages:

pip3 uninstall counterparty-rs counterparty-lib counterparty-cli

This release contains no protocol changes, and the API has not been modified.

ChangeLog

Bugfixes

  • Fix missing events (NEW_BLOCK and NEW_TRANSACTION) when kickstarting and reparsing. To correct the values in the messages table, a full reparse is required.
  • Fix the current block index after a blockchain reorganisation.
  • Fix database shutdown, which caused a recovery of the WAL file on each startup.
  • Eliminate some extraneous error messages

Codebase

  • Merge counterparty-lib and counterparty-core package into counterparty-core
  • Integrate telemetry with optional Sentry service

Command-Line Interface

  • Replace --no-check-asset-conservation with --check-asset-conservation
  • Disable automatic DB integrity check on startup

Credits

  • Ouziel Slama
  • Adam Krellenstein
  • Warren Puffett
  • Matt Marcello

v10.1.0

16 Apr 13:43
a02a28e
Compare
Choose a tag to compare

Release Notes - Counterparty Core v10.1.0 (2024-04-16)

This release includes fixes for a number of bugs as well as a few regressions in v10.0.x.

Upgrade Procedure

This upgrade is optional but highly recommended. Upgrading from v10.0.x requires an automatic reparse from block 835,500 on mainnet, which should take a few minutes. If you are upgrading directly from v9.x.y, then there will be an automatic full database rebuild, which may take a long time (refer to the release notes for v10.0.0.)

In order to perform a manual installation, you must first uninstall all existing Counterparty Core Python packages:

pip3 uninstall counterparty-rs counterparty-lib counterparty-cli

ChangeLog

Bugfixes

  • Validate non-empty block_indexes in call to api.get_blocks (fix for #1621)
  • Reproduce order expiration bug in v9.61.x (fix for #1631)
  • Fix get_blocks call when several block indexes are provided (fix for #1629)
  • Fix create_send when one of the outputs is a dispenser (fix for #1119)
  • Fix get_dispenser_info RPC call

Codebase

  • Split out counterparty-cli package into counterparty-core and counterparty-wallet packages
  • Implement heavy healthz probe (default to light)
  • Automatic code checking and correction with Ruff
  • Refactor transaction file singleton to class
  • Run PRAGMA optimize on shutting down
  • Run PRAGMA quick_check on database initialization
  • Temporary disable asset conservation checking after each new block
  • Add instrumentation for optional Sentry error and performance monitoring

Command-Line Interface

  • Rename counterpary-client to counterparty-wallet
  • Add --skip-db-check flag to skip database quick check
  • Add --no-mempool flash to disable mempool parsing

Credits

  • Ouziel Slama
  • Adam Krellenstein
  • Warren Puffett
  • Matt Marcello

v10.1.0-rc.1: Merge pull request #1640 from CounterpartyXCP/develop

12 Apr 18:15
ae2ba6c
Compare
Choose a tag to compare

Release Notes - Counterparty Core v10.1.0-rc.1

Note: This update requires a reparse from block 835,500. (If you are upgrading from v9.x.y, then you need a full database rebuild.)

ChangeLog

Bugfixes

  • Validate non-empty block_indexes in call to api.get_blocks (fix for #1621)
  • Reproduce order expiration bug in v9.61 (fix for #1631)
  • Fix get_blocks call when several block indexes are provided (fix for #1629)

Codebase

  • Split out counterparty-cli package into counterparty-core and counterparty-wallet packages
  • Implement light / heavy healthz probes
  • Automatic code checking and correction with Ruff
  • Refactor transaction file singleton to class
  • Run PRAGMA optimize on shutting down

Command-Line Interface

  • Rename counterpary-client to counterparty-wallet

Credits

  • Ouziel Slama
  • Adam Krellenstein
  • Warren Puffett
  • Matt Marcello

v10.0.1

10 Apr 03:37
69b91be
Compare
Choose a tag to compare

Release Notes - Counterparty Core v10.0.1 (2024-04-09)

Hotfix release for #1619

ChangeLog

Stability and Correctness

  • Add missing sanity check in address unpacking for dispensers that causes a complete network crash

Credits

  • Adam Krellenstein

v9.61.3

10 Apr 03:21
69b91be
Compare
Choose a tag to compare

Release Notes - Counterparty Core v9.61.3 (2024-04-09)

Hotfix release for #1619

ChangeLog

Stability and Correctness

  • Add missing sanity check in address unpacking for dispensers that causes a complete network crash

Credits

  • Adam Krellenstein

v10.0.0

09 Apr 14:54
c7690e6
Compare
Choose a tag to compare

Release Notes - Counterparty Core v10.0.0 (2024-04-09)

Counterparty Core v10.0.0 is a very large release comprising many improvements across different portions of the codebase. “Counterparty Core” is also the new name for the codebase and repository that is the result of a merge between counterparty-lib, counterparty-cli and a new Rust library, counterparty-rs.

Upgrade Procedure

This release does not include any protocol changes, so there is no deadline for upgrading. However it is strongly recommended that all users upgrade as soon as possible, in particular to avoid consensus problems due to non-determinism in previous versions. The Counterparty Core API is also unchanged for this release. The minimum required version of AddrIndexRs has been increased to v0.4.6.

Because this release includes numerous changes to the database schema, a full database rebuild is required and the major version number has been bumped from 9 to 10. You may upgrade either by using Docker Compose or by installing Counterparty Core manually, following the installation instructions available in the official project documentation. When using kickstart, the database rebuild will happen automatically and take between 8 and 24 hours to complete.

ChangeLog

Codebase

  • Upgrade from Python 3.7 to Python >= 3.10
  • Support Ubuntu 22.04 and macOS officially
  • Upgrade packaging system: replace setup.py with pyproject.toml and use Hatchling as a build system
  • Upgrade all pip dependencies to the latest available version
  • Rename counterparty-lib repository to counterparty-core. NOTE: The normal redirect for GitHub URLs cannot be implemented.
  • Merge the counterparty-cli repository into the counterparty-core repository
  • Add Rust library, counterparty-rs, for performance-critical code
  • Synchronize versions of counterparty-rs, counterparty-lib and counterparty-cli
  • Update URL for hosting bootstrap files to https://bootstrap.counterparty.io/counterparty-*
  • Update URL for hosting notifications for protocol changes to https://counterparty.io/protocol_changes.json

Documentation and Testing

  • Fix test suite, with automated builds on supported operating systems
  • Add GitHub Workflows for building, testing and running automated code scanners:
    • PyLint
    • Bandit
    • CodeQL
    • License Scanner
    • Build and publish Docker image
    • Enable testnet test book
    • Test docker-compose.yml in Google Compute Engine VM
  • Add checkpoints for mainnet up to block 837,000 and for testnet up to block 2,580,000
  • Rewrite README

Stability and Correctness

  • Fix multiple sources of non-determinism caused by generic exception handling
  • Fix source of non-determinism in AddrIndexRs caused by txid_limit and get_oldest_tx
  • Fix consensus break due to missing support for segwit transactions in kickstart logic
  • Fix crash in software version checking caused by a format change of protocol_changes.json

Deployment

  • Rewrite Dockerfile and publish new official Docker images
  • Create Docker Compose file as an alternative to Federated Node
  • Change default bitcoind user from bitcoinrpc to rpc
  • Change default port for communication with AddrIndexRs to 8432 (and 81432 for testnet)

Command-Line Interface

  • Disable console logs except for with counterparty-server start
  • Show fancy spinners for all discrete operations
  • Rename checkdb command to check-db and refactor
  • Rename debugconfig to show-config; clean up output
  • Don't log values for transactions except with --verbose (for performance)
  • Move noisy log messages to DEBUG
  • Always log to a file, unless --no-log-files is set
  • Fix and refactor log.set_up()
  • Improve thread shutdown logic
  • Accept config args before and after the command
  • New flag --json-log, which replaces the human-readable logs in the console with the streaming content of the messages table in JSON format

Refactoring and Performance Optimizations

  • Rewrite kickstart, splitting work across two Python processes using shared memory and queue for communication
  • Activate write-ahead-log in SQLite and implement apsw.best_practices(), improving performance and fixing crashes from deadlocks
  • Fix database version checking which launches a rebuild instead of a rollback / reparse
  • Add numerous missing database indexes
  • Fix collisions between existing database indexes
  • DRY and refactor database index creation
  • DRY and isolate all SQL queries in ledger.py
  • Refactor log.messages and log.log heavily
  • Add additional fields and rows in the messages table (the messages hash will change)
  • Fix database integrity check and re-include assert conservation check
  • Migrate to log-structured database for simpler and faster rollback and reparse
    • Add block_index field to the balances table
    • Remove all UPDATE queries—use the ledger.insert_update() function, which adds a new row with a new block_index
    • Update all SELECT queries—always use MAX(rowid)
    • Remove the undolog completely
    • Implement rollback and reparse by deleting table rows using the block_index field
  • Migrate performance-critical logic to Rust library, counterparty-rs
    • b58_encode() and b58_decode()
    • script_to_asm()
    • script_to_address()
    • inverse_hash()
  • Refactor connection logic for AddrIndexRs RPC
  • Pre-fetch blocks with multiple threads for start
  • DRY and refactor get_tx_info*() functions
    • Isolate transaction parsing inside gettxinfo.py module
    • Heavily refactor code; eliminate unused code blocks
    • Isolate dispenser logic in get_dispensers_outputs() and get_dispensers_tx_info()
  • Change software version check interval to 24 hours
  • Add the possibility to reparse from a given block on minor version change
  • Add warning with confirmation dialogue to bootstrap command, and --no-confirm flag
  • Add REST endpoints optimized for tables that were altered during the migration to a log-structured database:
    • GET /addresses/<address>/balances
    • GET /assets/<asset>/
    • GET /assets/<asset>/balances
    • GET /assets/<asset>/orders
    • GET /orders/<tx_hash>
    • GET /orders/<tx_hash>/matches
  • Adjust the error message for when a user has an insufficient BTC balance but the unconfirmed flag has already been passed

Credits

  • Ouziel Slama
  • Adam Krellenstein
  • Warren Puffett
  • Matt Marcello

v10.0.0-rc.1

31 Mar 15:30
005dad6
Compare
Choose a tag to compare
v10.0.0-rc.1 Pre-release
Pre-release

Release Notes - Counterparty Core v10.0.0-rc.1

Counterparty Core v10.0.0 is a very large release comprising many improvements across different portions of the codebase. “Counterparty Core” is also the new name for the codebase and repository that is the result of a merge between counterparty-lib, counterparty-cli and a new Rust library, counterparty-rs.

Upgrade Procedure

This release does not include any protocol changes, so there is no deadline for upgrading. However it is strongly recommended that all users upgrade as soon as possible, in particular to avoid consensus problems due to non-determinism in previous versions. The Counterparty Core API is also unchanged for this release.

Because this release includes numerous changes to the database schema, a full database rebuild is required and the major version number has been bumped from 9 to 10. Follow the updated installation instructions in the README to download and install the latest version of Counterparty Core, run counterparty-server kickstart (while bitcoind is not running), then start the server with counterparty-server start. The rebuild should happen automatically, and it should take between 8 and 24 hours hours to complete.

IMPORTANT Be certain that you are running the latest version of AddrIndexRs (v0.4.6).

ChangeLog

Codebase

  • Upgrade from Python 3.7 to Python >= 3.10
  • Support Ubuntu 22.04 and macOS officially
  • Upgrade packaging system: replace setup.py with pyproject.toml and use Hatchling as a build system
  • Upgrade all pip dependencies to the latest available version
  • Rename counterparty-lib repository to counterparty-core. NOTE: The normal redirect for GitHub URLs cannot be implemented.
  • Merge the counterparty-cli repository into the counterparty-core repository
  • Add Rust library, counterparty-rs, for performance-critical code
  • Synchronize versions of counterparty-rs, counterparty-lib and counterparty-cli
  • Update URL for hosting bootstrap files to https://bootstrap.counterparty.io/counterparty-*
  • Update URL for hosting notifications for protocol changes to https://counterparty.io/protocol_changes.json

Documentation and Testing

  • Fix test suite, with automated builds on supported operating systems
  • Add Github Workflows for building, testing and running automated code scanners:
    • PyLint
    • Bandit
    • CodeQL
    • License Scanner
    • Build and publish Docker image
    • Enable testnet test book
    • Test compose.yml in Google Compute Engine VM
  • Add checkpoints for mainnet up to block 834,500 and for testnet up to block 2,580,000
  • Rewrite README

Stability and Correctness

  • Fix multiple sources of non-determinism caused by generic exception handling
  • Fix source of non-determinism in AddrIndexRs caused by txid_limit and get_oldest_tx
  • Fix consensus break due to missing support for segwit transactions in kickstart logic
  • Fix crash in software version checking caused by a format change of protocol_changes.json

Deployment

  • Rewrite Dockerfile and publish new official Docker images
  • Create Docker Compose file as an alternative to Federated Node
  • Change default bitcoind user from bitcoinrpc to rpc
  • Changed default port for communication with AddrIndexRs to 8432 (and 81432 for testnet)

Command-Line Interface

  • Disable console logs except for with counterparty-server start
  • Show fancy spinners for all discrete operations
  • Rename checkdb command to check-db
  • Rename debugconfig to show-config; clean up output
  • Don't log values for transactions except with --verbose (for performance)
  • Move noisy log messages to DEBUG
  • Always log to a file, unless --no-log-files is set
  • Fix and refactor log.set_up()
  • Improve thread shutdown logic
  • Accept config args before and after the command
  • New flag --json-log, which replaces the human-readable logs in the console with the streaming content of the messages table in JSON format

Refactoring and Performance Optimizations

  • Rewrite kickstart, splitting work across two Python processes using shared memory and queue for communication
  • Activate write-ahead-log in SQLite and implement apsw.best_pratices(), improving performance and fixing crashes from deadlocks
  • Fix database version checking which launched a rebuilds instead of rollbacks / reparses
  • Add numerous missing database indexes
  • Fix collisions between existing database indexes
  • DRY and refactor database index creation
  • DRY and isolate all SQL queries in ledger.py
  • Heavily refactor of log.messages and log.log.
  • Add additional fields and rows in the messages table (the messages hash will change)
  • Fix database integrity check and re-include assert conservation check
  • Migrate to log-structured database for simpler and faster rollback and reparse
    • Add block_index field to the balances table
    • Remove all UPDATE queries—use the ledger.insert_update() function, which adds a new row with a new block_index
    • Update all SELECT queries—always use MAX(rowid)
    • Remove the undolog completely
    • Implement rollback and reparse by deleting table rows using the block_index field
  • Migrate performance-critical logic to Rust library, counterparty-rs
    • b58_encode() and b58_decode()
    • script_to_asm()
    • script_to_address()
    • inverse_hash()
  • Refactor connection logic for AddrIndexRs RPC
  • Pre-fetch blocks with multiple threads for start
  • DRY and refactor get_tx_info*() functions
    • Isolate transaction parsing inside gettxinfo.py module
    • Heavily refactor code; eliminate unused code blocks
    • Isolate dispenser logic in get_dispensers_outputs() and get_dispensers_tx_info()
  • Activate check software version every 24H
  • Add the possibility to reparse from a given block on minor version change
  • Add warning with confirmation dialogue to bootstrap command, and --no-confirm flag
  • Add REST endpoints optimized for tables that were altered during the migration to a log-structured database:
    • GET /addresses/<address>/balances
    • GET /assets/<asset>/
    • GET /assets/<asset>/balances
    • GET /assets/<asset>/orders
    • GET /orders/<tx_hash>
    • GET /orders/<tx_hash>/matches

Credits

  • Ouziel Slama
  • Adam Krellenstein
  • Warren Puffett
  • Matt Marcello

v10.0.0-beta.1

20 Mar 20:19
6f5e4e4
Compare
Choose a tag to compare
v10.0.0-beta.1 Pre-release
Pre-release

Release Notes - Counterparty Core v10.0.0-beta.1

Counterparty Core v10.0.0 is a very large release comprising many improvements across different portions of the codebase. “Counterparty Core” is also the new name for the codebase and repository that is the result of a merge between counterparty-lib, counterparty-cli and a new Rust library, counterparty-rs.

Upgrade Procedure

This release does not include any protocol changes, so there is no deadline for upgrading. However it is strongly recommended that all users upgrade as soon as possible, in particular to avoid consensus problems due to non-determinism in previous versions. The Counterparty Core API is also unchanged for this release.

Because this release includes numerous changes to the database schema, a full database rebuild is required and the major version number has been bumped from 9 to 10. Follow the updated installation instructions in the README to download and install the latest version of Counterparty Core, run counterparty-server kickstart (while bitcoind is not running), then start the server with counterparty-server start. The rebuild should happen automatically, and it should take between 8 and 24 hours hours to complete.

IMPORTANT Be certain that you are running the latest version of AddrIndexRs (v0.4.4).

ChangeLog

Codebase

  • Upgrade from Python 3.7 to Python >= 3.10
  • Support Ubuntu 22.04 and macOS officially
  • Upgrade packaging system: replace setup.py with pyproject.toml and use Hatchling as a build system
  • Upgrade all pip dependencies to the latest available version
  • Rename counterparty-lib repository to counterparty-core. NOTE: The normal redirect for GitHub URLs cannot be implemented.
  • Merge the counterparty-cli repository into the counterparty-core repository
  • Add Rust library, counterparty-rs, for performance-critical code
  • Synchronize versions of counterparty-rs, counterparty-lib and counterparty-cli
  • Update URL for hosting bootstrap files to https://bootstrap.counterparty.io/counterparty-*
  • Update URL for hosting notifications for protocol changes to https://counterparty.io/protocol_changes.json

Documentation and Testing

  • Fix test suite, with automated builds on supported operating systems
  • Add Github Workflows for building, testing and running automated code scanners:
    • PyLint
    • Bandit
    • CodeQL
    • License Scanner
    • Build and publish Docker image
    • Enable testnet test book
  • Add checkpoints for mainnet up to block 834,500 and for testnet up to block 2,580,000
  • Rewrite README

Stability and Correctness

  • Fix multiple sources of non-determinism caused by generic exception handling
  • Fix source of non-determinism in AddrIndexRs caused by txid_limit and get_oldest_tx
  • Fix consensus break due to missing support for segwit transactions in kickstart logic
  • Fix crash in software version checking caused by a format change of protocol_changes.json

Deployment

  • Rewrite Dockerfile and publish new official Docker images
  • Implement simplenode Docker Compose file, an alternative to Federated Node
  • Change default bitcoind user from bitcoinrpc to rpc
  • Changed default port for communication with AddrIndexRs to 8432 (and 81432 for testnet)

Command-Line Interface

  • Disable console logs except for with counterparty-server start
  • Show fancy spinners for all discrete operations
  • Rename checkdb command to check-db
  • Rename debugconfig to show-config; clean up output
  • Don't log values for transactions except with --verbose (for performance)
  • Move noisy log messages to DEBUG
  • Always log to a file, unless --no-log-files is set
  • Fix and refactor log.set_up()
  • Improve thread shutdown logic
  • Accept config args before and after the command

Refactoring and Performance Optimizations

  • Rewrite kickstart, splitting work across two Python processes using shared memory and queue for communication
  • Activate write-ahead-log in SQLite and implement apsw.best_pratices(), improving performance and fixing crashes from deadlocks
  • Fix database version checking which launched a rebuilds instead of rollbacks / reparses
  • Add numerous missing database indexes
  • Fix collisions between existing database indexes
  • DRY and refactor database index creation.
  • DRY and isolate all SQL queries in ledger.py (except first insertion still inside contracts)
  • Fix database integrity check and re-include assert conservation check
  • Migrate to log-structured database for simpler and faster rollback and reparse
    • Add block_index field to the balances table
    • Remove all UPDATE queries—use the ledger.insert_update() function, which adds a new row with a new block_index
    • Update all SELECT queries—always use MAX(rowid)
    • Remove the undolog completely
    • Implement rollback and reparse by deleting table rows using the block_index field
  • Migrate performance-critical logic to Rust library, counterparty-rs
    • b58_encode() and b58_decode()
    • script_to_asm()
    • script_to_address()
    • inverse_hash()
  • Refactor connection logic for AddrIndexRs RPC
  • Pre-fetch blocks with multiple threads for start
  • DRY and refactor get_tx_info*() functions
    • Isolate transaction parsing inside gettxinfo.py module
    • Heavily refactor code; eliminate unused code blocks
    • Isolate dispenser logic in get_dispensers_outputs() and get_dispensers_tx_info()
  • Activate check software version every 24H
  • Add the possibility to reparse from a given block on minor version change
  • Add Warning with Confirmation Dialogue to bootstrap Command and --no-confirm flag

Credits

  • Ouziel Slama
  • Adam Krellenstein
  • Warren Puffett

v10.0.0-alpha

15 Mar 19:39
fb958ea
Compare
Choose a tag to compare
v10.0.0-alpha Pre-release
Pre-release

Release Notes - Counterparty Core v10.0.0-alpha

Counterparty Core v10.0.0 is a very large release comprising many improvements across different portions of the codebase. “Counterparty Core” is also the new name for the codebase and repository that is the result of a merge between counterparty-lib, counterparty-cli and a new Rust library, counterparty-rs.

Upgrade Procedure

This release does not include any protocol changes, so there is no deadline for upgrading. However it is strongly recommended that all users upgrade as soon as possible, in particular to avoid consensus problems due to non-determinism in previous versions. The Counterparty Core API is also unchanged for this release.

Because this release includes numerous changes to the database schema, a full database rebuild is required and the major version number has been bumped from 9 to 10. Follow the updated installation instructions in the README to download and install the latest version of Counterparty Core, run counterparty-server kickstart (while bitcoind is not running), then start the server with counterparty-server start. The rebuild should happen automatically, and it should take between 8 and 24 hours hours to complete.

IMPORTANT Be certain that you are running the latest version of AddrIndexRs (v0.4.3).

ChangeLog

Codebase

  • Upgrade from Python 3.7 to Python >= 3.10
  • Support Ubuntu 22.04 and macOS officially
  • Upgrade packaging system: replace setup.py with pyproject.toml and use Hatchling as a build system
  • Upgrade all pip dependencies to the latest available version
  • Rename counterparty-lib repository to counterparty-core. NOTE: The normal redirect for GitHub URLs cannot be implemented.
  • Merge the counterparty-cli repository into the counterparty-core repository
  • Add Rust library, counterparty-rs, for performance-critical code
  • Synchronize versions of counterparty-rs, counterparty-lib and counterparty-cli
  • Update URL for hosting bootstrap files to https://bootstrap.counterparty.io/counterparty-*
  • Update URL for hosting notifications for protocol changes to https://counterparty.io/protocol_changes.json

Documentation and Testing

  • Fix test suite, with automated builds on supported operating systems
  • Add Github Workflows for building, testing and running automated code scanners:
    • PyLint
    • Bandit
    • CodeQL
    • License Scanner
  • Add checkpoints for mainnet up to block 825,000 and for testnet up to block 2,540,000
  • Rewrite README

Stability and Correctness

  • Fix multiple sources of non-determinism caused by generic exception handling
  • Fix source of non-determinism in AddrIndexRs caused by txid_limit and get_oldest_tx
  • Fix consensus break due to missing support for segwit transactions in kickstart logic
  • Fix crash in software version checking caused by a format change of protocol_changes.json

Deployment

  • Rewrite Dockerfile and publish new official Docker images
  • Implement simplenode Docker Compose file, an alternative to Federated Node
  • Change default bitcoind user from bitcoinrpc to rpc
  • Changed default port for communication with AddrIndexRs to 8432 (and 81432 for testnet)

Command-Line Interface

  • Disable console logs except for with counterparty-server start
  • Show fancy spinners for all discrete operations
  • Rename checkdb command to check-db
  • Rename debugconfig to show-config; clean up output
  • Don't log values for transactions except with --verbose (for performance)
  • Move noisy log messages to DEBUG
  • Always log to a file, unless --no-log-files is set
  • Fix and refactor log.set_up()
  • Improve thread shutdown logic

Refactoring and Performance Optimizations

  • Rewrite kickstart, splitting work across two Python processes using shared memory and queue for communication
  • Activate write-ahead-log in SQLite and implement apsw.best_pratices(), improving performance and fixing crashes from deadlocks
  • Fix database version checking which launched a rebuilds instead of rollbacks / reparses
  • Add numerous missing database indexes
  • Fix collisions between existing database indexes
  • DRY and refactor database index creation.
  • DRY and isolate all SQL queries in ledger.py (except first insertion still inside contracts)
  • Fix database integrity check and re-include assert conservation check
  • Migrate to log-structured database for simpler and faster rollback and reparse
    • Add block_index field to the balances table
    • Remove all UPDATE queries—use the ledger.insert_update() function, which adds a new row with a new block_index
    • Update all SELECT queries—always use MAX(rowid)
    • Remove the undolog completely
    • Implement rollback and reparse by deleting table rows using the block_index field
  • Migrate performance-critical logic to Rust library, counterparty-rs
    • b58_encode() and b58_decode()
    • script_to_asm()
    • script_to_address()
    • inverse_hash()
  • Refactor connection logic for AddrIndexRs RPC
  • Pre-fetch blocks with multiple threads for start
  • DRY and refactor get_tx_info*() functions
    • Isolate transaction parsing inside gettxinfo.py module
    • Heavily refactor code; eliminate unused code blocks
    • Isolate dispenser logic in get_dispensers_outputs() and get_dispensers_tx_info()

Credits

  • Ouziel Slama
  • Adam Krellenstein
  • Warren Puffett