Releases: CounterpartyXCP/counterparty-core
v10.10.1
Release Notes - Counterparty Core v10.10.1 (2025-03-03)
This release includes two major improvements to the Counterparty Core codebase: (1) faster and more reliable node shutdown, (2) ~50% faster initial node catchup. It also includes a number of usability improvements to the API and CLI, as well as bugfixes.
Upgrading
Breaking Changes:
The commands get_asset_names
and get_asset_longnames
have been removed from API v1, as they are buggy and extremely non-performant. If you have been using these endpoints, you should migrate to /v2/assets
.
Upgrade Instructions:
To upgrade, download the latest version of counterparty-core
and restart counterparty-server
.
With Docker Compose:
cd counterparty-core
git pull
docker compose stop counterparty-core
docker compose --profile mainnet up -d
or use ctrl-c
to interrupt the server:
cd counterparty-core
git pull
cd counterparty-rs
pip install -e .
cd ../counterparty-core
pip install -e .
counterparty-server start
ChangeLog
Bugfixes
- Handle subprocess errors correctly when bootstrapping
- Fix
getrawtransaction_batch()
for batches greater thanconfig.MAX_RPC_BATCH_SIZE
- Improve error handling for when a port in use
- Fix ungraceful ZeroMQ failure
- Fix Conservation Check failing ungracefully
- Implement cleaner Gunicorn shutdown
- Fix ungraceful Waitress shutdown
- Handle RSFetcher version mismatch error correctly
- Handle Counterparty Server version checking errors correctly
- Fix the handling of
TypeError
in API calls
Codebase
- Tweak logging during Bitcoin Core catch up
- Batch
getrawtransaction
forget_vin_info()
- Create events indexes after catch up rather than before
- Make RPC calls to get transaction input info with RSFetcher
- Make RSFetcher compatible with HTTPS
- Fix all code scanner alerts (Bandit, CodeQL, Pylint)
- Only print debug messages about Counterparty being behind Bitcoin Core every 10 seconds
- Add missing indexes to the
sends
table
API
- Check balances when composing
detach
transaction - Add a
show_unconfirmed
parameter for Get Transactions endpoints - Add a
count_confirmed
parameter for Get Transactions Count endpoints - Add a
X-LEDGER-STATE
header to all API responses - Add a
ledger_state
field in API v2 root endpoint - Remove
get_asset_names
andget_asset_longnames
commands from API v1
CLI
- Accept
--catch-up
flag before the command - Add Locust runner to test local node performance (
python3 counterpartycore/test/integration/locustrunner.py
will start the Locust web UI on http://localhost:8089/) - Add
--profile
flag that enables cProfile during catchup and dumps results to the console when complete - Add
--rebuild
command to re-sync from scratch and then stop the server - Add memory database cache for
address_events
table
Credits
- Ouziel Slama
- Adam Krellenstein
v10.10.0
Release Notes - Counterparty Core v10.10.0 (2025-02-14)
This release includes a complete rewrite of the entire test harness for Counterparty Core, as well as both restored and all-new integration tests and GitHub workflows for continuous integration. This release also adds support for Python 3.12 and 3.13, which means significantly improved performance overall. There are of course a number of bugfixes, especially for node stability when Bitcoin Core is overloaded.
Upgrading
This upgrade does not include a protocol change and is not mandatory. User-facing changes to the API include a decrease in the default output value for attach
and move
transactions to 546 satoshis and renaming the --testnet
flag to --testnet3
.
IMPORTANT
- If you are running a version lower than 10.9.0, you must first update to 10.9.0 and only then install v10.10.0.
Download the latest version of counterparty-core
and restart counterparty-server
.
With Docker Compose:
cd counterparty-core
git pull
docker compose stop counterparty-core
docker compose --profile mainnet up -d
or use ctrl-c
to interrupt the server:
cd counterparty-core
git pull
cd counterparty-rs
pip install -e .
cd ../counterpaty-core
pip install -e .
counterparty-server start
ChangeLog
Protocol Changes
Bugfixes
- Don't retry RPC calls in
safe_get_utxo_address()
- Fix error handling in
safe_rpc()
- Raise
ValueError
instead ofPanicException
when an error occurs in Rust deserialization - Return
400
error onTypeError
when composing a transaction - Fix
bitcoind.search_pubkey_in_transactions()
- Don't force the existence of a change output
- Fix heavy HealthZ check
- Fix search pubkey for SegWit addresses that have never been used
- Fix Gunicorn shutdown
- Use the same logfile for all Gunicorn processes
- Fix duplicate log entries in the API Access file
- Don't call
getblockcount
from each API thread or process - Reset all caches on rollback and reparse
- Fix RSFetcher restart on failure
- Fix the
extended_tx_info
param in API v1 - Correctly handle RPC responses with simple strings or with string in
error
Codebase
- Completely rewrite the test suite. See comments in
test/mocks/conftest.py
. - Completely rewrite the GitHub Workflow files
- Add support for Python 3.12 and 3.13
- Rename
testnet
totestnet3
everywhere - Add
testnet4
andregtest
profiles todocker-compose.yaml
- Restore Docker Compose, Compare Hashes and testnet4 Reparse tests
- Refactor required actions for automatic upgrades
API
- Change default value for
attach
andmove
to 546 satoshis - Add
block_index
filter for Get Order Matches endpoints - Add
block_index
filter for Get Dispenses by Asset endpoint - Add Get Dispense By Hash endpoint
- Add
owner
field in assets info
CLI
- Rename
--testnet
flag to--testnet3
- Add testnet4 bootstrap database
- Add
--api-only
flag
Credits
- Ouziel Slama
- Adam Krellenstein
v10.9.1
Release Notes - Counterparty Core v10.9.1 (2025-01-24)
This is a small release that includes numerous bug and stability fixes, as well as a major refactor of the codebase in the name of improving testability. In particular, there was a bug in the Bitcoin fee calculation algorithm released as part of v10.9.0 which causes detach
and move
transactions composed with the API to have a higher fee than they should.
Upgrading
This release is not a protocol change and upgrading is not mandatory, but it is highly recommended.
IMPORTANT:
- If you are running a version lower than 10.9.0, you must first update to 10.9.0 and only then install v10.9.1.
- If you are running a testnet4 node, you need to rollback to block 64492 manually before starting the server process
ChangeLog
Protocol Changes
Bugfixes
- Fix ignored deprecated parameters in Compose API
- Fix Get Mempool Events By Addresses endpoint for
attach
,detach
and UTXOmove
- Retry ten times on telemetry request errors
- Return "not implemented" error when trying to get info about RPS transactions
- Fix typo in `protocol_changes.json' for testnet4
- Fix incorrect fee calculation for
detach
andmove
- Don't retry to get vin info when parsing the mempool, which can cause nodes to lock up
Codebase
- Remove all counterparty-wallet functionality
- Split up the test vectors file
- Move Python tests from
counterparty-rs
tocounterparty-core
- Reorganize files and functions; split too-big files; delete all unused functions
- Remove globals in
lib/util.py
andledger.py
- Use
yoyo
migrations to update the database - Add stacktrace when warning because of Bitcoin Core errors
API
- Add the
no_dispense
parameter to allow API clients to bypass the dispense transaction creation even when the destination is a dispenser - Add the
event_name
parameter to Get Mempool Events By Addresses endpoint - Have
sat_per_vbyte
parameter accept a float - Check addresses and hashes format in parameters
CLI
Credits
- Ouziel Slama
- Adam Krellenstein
v10.9.0
Release Notes - Counterparty Core v10.9.0 (2025-01-15)
This release represents a major technical milestone in the development of Counterparty Core: Counterparty no longer has AddrIndexRs as an external dependency. Originally, AddrIndexRs was used for transaction construction, and at the end of 2023 it was accidentally turned into a consensus-critical dependency (causing a number of subsequent consensus breaks and reliability issues). As of today, the only external dependency for a Counterparty node is Bitcoin Core itself.
Counterparty Core will rely on Bitcoin Core by default to provide all of the information it needs for transaction construction (which is not consensus-critical). However this operation will only succeed if the source
address for the transaction is present in the Bitcoin Core wallet. If it isn't, then Counterparty Core will use some service (either local or remote) which implements the Electrum server API to gather the information it needs. If the address isn't in Bitcoin Core, Counterparty will by default connect to the Blockstream public API. This server is configurable using the --electrs-url
CLI argument, however, and users can run their own instance of this service locally if they like. A public instance of Electrs is also available at https://api.counterparty.io:3000. This service does not need to be trusted in any way, and no private information is ever sent to it.
As a consequence of the removal of the AddrIndexRs dependency, the node storage requirements have effectively decreased from ~300 GB to ~30 GB, dramatically decreasing the cost of node operation. Nodes should also be more reliable and performant generally.
This upgrade notably includes support for testnet4
, since testnet3
is no longer usable for testing purposes. A public server is available at https://testnet4.counterparty.io:44000.
Finally, this upgrade includes a completely rewritten transaction composition module in preparation for future testing work. The new composer API is fully backwards-compatible, but it now includes additional parameters which make constructing a transaction much more natural. Transactions composed with the new API will use a version byte of 2
instead of 1
.
Upgrading
This upgrade does not include a protocol change and is not mandatory. After upgrading you can simply delete AddrIndexRs and shrink your disk.
The following transaction construction parameters have been deprecated (but remain functional for now): fee_per_kb
, fee_provided
, dust_return_pubkey
, return_psbt
, regular_dust_size
, multisig_dust_size
, extended_tx_info
, old_style_api
, p2sh_pretx_txid
, segwit
, unspent_tx_hash
. These parameters have been superceded by change_address
, more_outputs
, use_all_inputs_set
, sat_per_vbyte
, max_fee
, verbose
, multisig_pubkey
.
ChangeLog
Protocol Changes
Bugfixes
- Catch errors correctly when composing MPMA sends
- Fix fee calculation for SegWit transactions.
- Fix consensus hashes calculation after a blockchain reorg
- Fix query to fill
issuances.asset_events
field - Fix
assets_info.supply
field - Fix
verbose=True
whengive_asset
orget_asset
containsasset_longname
- Don't put null values in API cache
- Fix the Get Sends By Address endpoint, return also
detach
andmove
- Fix
transactions.transaction_type
field when destination is1CounterpartyXXXXXXXXXXXXXXXUWLpVr
- Catch
OverflowError
on API calls - Fix the
dispensers
table in State DB: include dispensers with same thesource
andasset
but a differenttx_hash
- Fix endpoint to get info from raw transaction when block index is not provided
- Fix issue where composed transactions contained
script_pubkey
(lock script) where thescript_sig
(unlock script) should be - Fix bootstrap when using
--bootstrap-url
flag and don't clean other networks files - Fix logic for blockchain reorgs of several blocks
- Have the node terminate when the
follow
loop raises an error - Don't stop the server on "No such mempool or blockchain" error
- Handle correctly RPC call errors from the API
- Don't clean mempool on catchup
- Retry 5 times when getting invalid Json with status 200 from Bitcoin Core
Codebase
- Remove the AddrIndexRs dependency
- Replace
transaction.py
andtransaction_helper/*
withcomposer.py
- Use the
bitcoin-utils
library for generating transactions - No longer block the follow process on mempool parsing
- Add a timeout when parsing mempool transaction from ZMQ
- Add a cache for unsupported transactions when parsing raw mempool transactions
- Refactor and optimize bootstrap process, use
zstd
instead ofgzip
- Trigger State DB refreshes automatically on version bumps
- Use only Rust to deserialize blocks and transactions
- Add
testnet4
support - Repeat the RPC call to Bitcoin Core indefinitely until it succeeds
- Raise a specific
BlockOutOfRange
error when querying an unknown block - Add mainnet checkpoint for block 879058 and testnet4 checkpoint for block 64493
API
- Add the following parameters to the transaction composition API:
change_address
: allows defining the change addressmore_outputs
: allows adding an arbitrary number of outputs in the form<value>:<address>
or<value>:<script_pubkey>
use_all_inputs_set
: forces the use of all UTXOs provided withinputs_set
sat_per_vbyte
: allows defining transaction feesmax_fee
: defines the maximum fees to be paidverbose
: includes transaction details, notablydata
andpsbt
multisig_pubkey
: public key allowing the redemption of multisig data outputs
- With
verbose=true
with the transaction constuction API, return alock_scripts
field that contains thescript_pubkey
of the UTXOs used by the transaction - Use the adjusted virtual size to calculate transaction fees
- Do not endlessly retry RPC calls to Bitcoin Core that return an error---immediately return the error to the user
- Throw an error if the BTC quantity in a dispense isn't enough to trigger the dispenser
- Add
get_asset
andgive_asset
parameters for the Get Orders by Asset endpoint - Add
forward_asset
andbackward_asset
parameters for the Get Order Matches by Asset endpoint - Add
forward_price
andbackward_price
to order matches results - Add parameter
exclude_with_oracle
for the Get Dispensers routes - Add
send_type
field to thesends
table - Use
satoshirate_normalized
andgive_quantity_normalized
to calculateprice_normalized
- Add a parameter
utxo_value
to theattach.compose()
andmove.compose()
functions - Add
source_address
anddestination_address
insends
table - Add the following routes:
/v2/addresses/<address>/compose/dividend/estimatexcpfees
/v2/addresses/<address>/compose/sweep/estimatexcpfees
/v2/addresses/<address>/compose/attach/estimatexcpfees
(alias of/v2/compose/attach/estimatexcpfees
)/v2/destructions
/v2/addresses/<address>/destructions
/v2/assets/<asset>/destructions
- Error messages for UTXOs now contain the reason for the error in parentheses:
invalid UTXOs: <utxo(s)> (<reason>)
CLI
- Add
--cache-dir
flag - Add
severity
field to JSON logs for compatibility - Add
--refresh-state-db
and--rebuild-state-db
flags to thestart
command - Add
--testnet4
flag - Add the
--electrs-url
parameter for transaction construction - Temporarily remove
--testcoin
and--customnet
flags
Credits
- Ouziel Slama
- Warren Puffet
- Adam Krellenstein
v10.9.0-rc.1
Release Notes - Counterparty Core v10.9.0-rc.1 (2025-01-09)
This release represents a major technical milestone in the development of Counterparty Core: Counterparty no longer has AddrIndexRs as an external dependency. Originally, AddrIndexRs was used for transaction construction, and at the end of 2023 it was accidentally turned into a consensus-critical dependency (causing a number of subsequent consensus breaks and reliability issues). As of today, the only external dependency for a Counterparty node is Bitcoin Core itself.
Counterparty Core will rely on Bitcoin Core by default to provide all of the information it needs for transaction construction (which is not consensus-critical). However this operation will only succeed if the source
address for the transaction is present in the Bitcoin Core wallet. If it isn't, then Counterparty Core will use some service (either local or remote) which implements the Electrum server API to gather the information it needs. If the address isn't in Bitcoin Core, Counterparty will by default connect to the Blockstream public API. This server is configurable using the --electrs-url
CLI argument, however, and users can run their own instance of this service locally if they like. A public instance of Electrs is also available at https://api.counterparty.io:3000. This service does not need to be trusted in any way, and no private information is ever sent to it.
As a consequence of the removal of the AddrIndexRs dependency, the node storage requirements have effectively decreased from ~300 GB to ~30 GB, dramatically decreasing the cost of node operation. Nodes should also be more reliable and performant generally.
This upgrade notably includes support for testnet4
, since testnet3
is no longer usable for testing purposes. A public server is available at https://testnet4.counterparty.io:44000.
Finally, this upgrade includes a completely rewritten transaction composition module in preparation for future testing work. The new composer API is fully backwards-compatible, but it now includes additional parameters which make constructing a transaction much more natural. Transactions composed with the new API will use a version byte of 2
instead of 1
.
Upgrading
This upgrade does not include a protocol change and is not mandatory. After upgrading you can simply delete AddrIndexRs and shrink your disk.
The following transaction construction parameters have been deprecated (but remain functional for now): fee_per_kb
, fee_provided
, dust_return_pubkey
, return_psbt
, regular_dust_size
, multisig_dust_size
, extended_tx_info
, old_style_api
, p2sh_pretx_txid
, segwit
, unspent_tx_hash
. These parameters have been superceded by change_address
, more_outputs
, use_all_inputs_set
, sat_per_vbyte
, max_fee
, verbose
, multisig_pubkey
.
ChangeLog
Protocol Changes
Bugfixes
- Catch errors correctly when composing MPMA sends
- Fix fee calculation for SegWit transactions.
- Fix consensus hashes calculation after a blockchain reorg
- Fix query to fill
issuances.asset_events
field - Fix
assets_info.supply
field - Fix
verbose=True
whengive_asset
orget_asset
containsasset_longname
- Don't put null values in API cache
- Fix the Get Sends By Address endpoint, return also
detach
andmove
- Fix
transactions.transaction_type
field when destination is1CounterpartyXXXXXXXXXXXXXXXUWLpVr
- Catch
OverflowError
on API calls - Fix the
dispensers
table in State DB: include dispensers with same thesource
andasset
but a differenttx_hash
- Fix endpoint to get info from raw transaction when block index is not provided
- Fix issue where composed transactions contained
script_pubkey
(lock script) where thescript_sig
(unlock script) should be
Codebase
- Remove the AddrIndexRs dependency
- Replacement of
transaction.py
andtransaction_helper/*
withcomposer.py
- Use the
bitcoin-utils
library for generating transactions - No longer block the follow process on mempool parsing
- Add a timeout when parsing mempool transaction from ZMQ
- Add a cache for unsupported transactions when parsing raw mempool transactions
- Refactor and optimize bootstrap process, use
zstd
instead ofgzip
- Trigger State DB refreshes automatically on version bumps
- Use only Rust to deserialize blocks and transactions
- Add
testnet4
support
API
- Add the following parameters to the transaction composition API:
change_address
: allows defining the change addressmore_outputs
: allows adding an arbitrary number of outputs in the form<value>:<address>
or<value>:<script_pubkey>
use_all_inputs_set
: forces the use of all UTXOs provided withinputs_set
sat_per_vbyte
: allows defining transaction feesmax_fee
: defines the maximum fees to be paidverbose
: includes transaction details, notablydata
andpsbt
multisig_pubkey
: public key allowing the redemption of multisig data outputs
- With
verbose=true
with the transaction constuction API, return alock_scripts
field that contains thescript_pubkey
of the UTXOs used by the transaction - Use the adjusted virtual size to calculate transaction fees
- Do not endlessly retry RPC calls to Bitcoin Core that return an error---immediately return the error to the user
- Throw an error if the BTC quantity in a dispense isn't enough to trigger the dispenser
- Add
get_asset
andgive_asset
parameters for the Get Orders by Asset endpoint - Add
forward_asset
andbackward_asset
parameters for the Get Order Matches by Asset endpoint - Add
forward_price
andbackward_price
to order matches results - Add parameter
exclude_with_oracle
for the Get Dispensers routes - Add
send_type
field to thesends
table - Use
satoshirate_normalized
andgive_quantity_normalized
to calculateprice_normalized
- Add a parameter
utxo_value
to theattach.compose()
andmove.compose()
functions - Add
source_address
anddestination_address
insends
table - Add the following routes:
/v2/addresses/<address>/compose/dividend/estimatexcpfees
/v2/addresses/<address>/compose/sweep/estimatexcpfees
/v2/addresses/<address>/compose/attach/estimatexcpfees
(alias of/v2/compose/attach/estimatexcpfees
)/v2/destructions
/v2/addresses/<address>/destructions
/v2/assets/<asset>/destructions
- Error messages for UTXOs now contain the reason for the error in parentheses:
invalid UTXOs: <utxo(s)> (<reason>)
CLI
- Add
--cache-dir
flag - Add
severity
field to JSON logs for compatibility - Add
--refresh-state-db
and--rebuild-state-db
flags to thestart
command - Add
--testnet4
flag - Add the
--electrs-url
parameter for transaction construction - Temporarily remove
--testcoin
and--customnet
flags
Credits
- Ouziel Slama
- Warren Puffet
- Adam Krellenstein
v10.8.0
Release Notes - Counterparty Core v10.8.0 (2024-12-15)
This release includes some significant architectural changes to the codebase to improve node stability and performance. Most notably, the data storage requirements of the Counterparty database have been reduced from ~50 GB to ~25 GB. Numerous bugs have been fixed, and all node hosts are recommended to upgrade ASAP.
Upgrading
This upgrade requires a mandatory, automatic rollback from block 871780.
ChangeLog
Protocol Changes
Bugfixes
- Set
issuances.reset
andissuances.locked
default values toFalse
rather thanNone
- Fix
get_price
andgive_price
fields: return0
rather thannull
- Store
utxo_address
in theaddress_events
table - Fix order of results during dividend distribution to UTXOs
- Fix XCP price calculation for fair mints
- Handle RSFetcher version mismatches correctly
- Improve shutdown process and correctly close the Ledger DB and State DB
- Always include all outputs in transactions decoded by RSFetcher
- Fix UTXO balances cache: don't cache
detach
; add cache forattach
; clean the cache when the balance is empty
Codebase
- Fix
block.close_block_index
field type - Eliminate unnecessary database indexes
- Don't rollback or reparse to a block index higher than current block index
- Remove the lockfile for the RSFetcher process
- Replace
counterparty.api.db
withstate.db
- Rollback State DB from Ledger DB rather than rolling back event-by-event
- Remove duplicate tables from State DB
- Add
issuances.asset_events
,dispenses.btc_amount
andmempool.addresses
field to the Ledger DB - Add version checking for State DB: launch a rollback when a reparse or a rollback is necessary for the Ledger DB
- Refactor functions to refresh
util.CURRENT_BLOCK_INDEX
inwsgi.py
- Remove
compose_utxo()
function and clean upcompose_attach()
andcompose_detach
- Add
transaction_type
field to thetransactions
table - Refactor
block.parse_tx()
- Include only one
TRANSACTION_PARSED
event for eachNEW_TRANSACTION
event - Fix API Watcher reorg checks
- Use
multiprocessing.Event
to stop API process when the Ledger process dies - Catch up with RPC when ZMQ is late
- Restart RSFetcher when it returns
None
too many times - Exclude transactions by
SIGHASH
- Be able to trigger a rollback on a minor version change
- Add several new checkpoints
- Parse raw mempool by batch before following
- Set
BACKEND_RAW_TRANSACTIONS_CACHE_SIZE
to 1000
API
- Exclude zero balances when retreiving balances by address and asset
- Add
description_locked
to theasset_info
field - Add
transaction_type
parameter forGet Transactions
endpoints - Add
transaction_types_count
table to the State DB - Add the following routes:
/v2/transactions/counts
/v2/blocks/<int:block_index>/transactions/counts
/v2/addresses/<address>/transactions/counts
- Add sortable field
asset_longname
to thebalances
table - Add the ability to retrieve balances by asset longname
- When composing an attach / move, use 10,000 sats for the value, rather than 546
- Add the
send_type
filter forsends
table (send
,attach
,move
ordetach
) - Add
events
field to transactions results whenverbose=true
CLI
- Have
rollback
andreparse
commands trigger a re-build of the State DB - Add current process name and current thread name to log messages
- Add
--log-exclude-filters
and--log-include-filters
flags
Credits
- Ouziel Slama
- Warren Puffet
- Adam Krellenstein
v10.8.0-rc.2
Release Notes - Counterparty Core v10.8.0-rc.2 (2024-12-12)
This release includes some significant architectural changes to the codebase to improve node stability and performance. Most notably, the data storage requirements of the Counterparty database have been reduced from ~50 GB to ~25 GB. Numerous bugs have been fixed, and all node hosts are recommended to upgrade ASAP.
Upgrading
This upgrade requires a mandatory, automatic reparse from block 871780.
ChangeLog
Protocol Changes
Bugfixes
- Set
issuances.reset
andissuances.locked
default values toFalse
rather thanNone
- Fix
get_price
andgive_price
fields: return0
rather thannull
- Store
utxo_address
in theaddress_events
table - Fix order of results during dividend distribution to UTXOs
- Fix XCP price calculation for fair mints
- Handle RSFetcher version mismatches correctly
- Improve shutdown process and correctly close the Ledger DB and State DB
- Always include all outputs in transactions decoded by RSFetcher
- Fix UTXO balances cache: don't cache
detach
; add cache forattach
; clean the cache when the balance is empty
Codebase
- Fix
block.close_block_index
field type - Eliminate unnecessary database indexes
- Don't rollback or reparse to a block index higher than current block index
- Remove the lockfile for the RSFetcher process
- Replace
counterparty.api.db
withstate.db
- Rollback State DB from Ledger DB rather than rolling back event-by-event
- Remove duplicate tables from State DB
- Add
issuances.asset_events
,dispenses.btc_amount
andmempool.addresses
field to the Ledger DB - Add version checking for State DB: launch a rollback when a reparse or a rollback is necessary for the Ledger DB
- Refactor functions to refresh
util.CURRENT_BLOCK_INDEX
inwsgi.py
- Remove
compose_utxo()
function and clean upcompose_attach()
andcompose_detach
- Add
transaction_type
field to thetransactions
table - Refactor
block.parse_tx()
- Include only one
TRANSACTION_PARSED
event for eachNEW_TRANSACTION
event - Fix API Watcher reorg checks
- Use
multiprocessing.Event
to stop API process when the Ledger process dies - Catch up with RPC when ZMQ is late
- Restart RSFetcher when it returns
None
too many times - Exclude transactions by
SIGHASH
- Be able to trigger a rollback on a minor version change
- Add several new checkpoints
API
- Exclude zero balances when retreiving balances by address and asset
- Add
description_locked
to theasset_info
field - Add
transaction_type
parameter forGet Transactions
endpoints - Add
transaction_types_count
table to the State DB - Add the following routes:
/v2/transactions/counts
/v2/blocks/<int:block_index>/transactions/counts
/v2/addresses/<address>/transactions/counts
- Add sortable field
asset_longname
to thebalances
table - Add the ability to retrieve balances by asset longname
- When composing an attach / move, use 10,000 sats for the value, rather than 546
- Add the
send_type
filter forsends
table (send
,attach
,move
ordetach
) - Add
events
field to transactions results whenverbose=true
CLI
- Have
rollback
andreparse
commands trigger a re-build of the State DB - Add current process name and current thread name to log messages
- Add
--log-exclude-filters
and--log-include-filters
flags
Credits
- Ouziel Slama
- Warren Puffet
- Adam Krellenstein
v10.8.0-rc.1
Release Notes - Counterparty Core v10.8.0-rc.1 (2024-12-12)
This release includes some significant architectural changes to the codebase to improve node stability and performance. Most notably, the data storage requirements of the Counterparty database have been reduced from ~50 GB to ~25 GB. Numerous bugs have been fixed, and all node hosts are recommended to upgrade ASAP.
Upgrading
This upgrade requires a mandatory, automatic reparse from block 871780.
ChangeLog
Protocol Changes
Bugfixes
- Set
issuances.reset
andissuances.locked
default values toFalse
rather thanNone
- Fix
get_price
andgive_price
fields: return0
rather thannull
- Store
utxo_address
in theaddress_events
table - Fix order of results during dividend distribution to UTXOs
- Fix XCP price calculation for fair mints
- Handle RSFetcher version mismatches correctly
- Improve shutdown process and correctly close the Ledger DB and State DB
- Always include all outputs in transactions decoded by RSFetcher
- Fix UTXO balances cache: don't cache
detach
; add cache forattach
; clean the cache when the balance is empty
Codebase
- Fix
block.close_block_index
field type - Eliminate unnecessary database indexes
- Don't rollback or reparse to a block index higher than current block index
- Remove the lockfile for the RSFetcher process
- Replace
counterparty.api.db
withstate.db
- Rollback State DB from Ledger DB rather than rolling back event-by-event
- Remove duplicate tables from State DB
- Add
issuances.asset_events
,dispenses.btc_amount
andmempool.addresses
field to the Ledger DB - Add version checking for State DB: launch a rollback when a reparse or a rollback is necessary for the Ledger DB
- Refactor functions to refresh
util.CURRENT_BLOCK_INDEX
inwsgi.py
- Remove
compose_utxo()
function and clean upcompose_attach()
andcompose_detach
- Add
transaction_type
field to thetransactions
table - Refactor
block.parse_tx()
- Include only one
TRANSACTION_PARSED
event for eachNEW_TRANSACTION
event - Fix API Watcher reorg checks
- Use
multiprocessing.Event
to stop API process when the Ledger process dies - Catch up with RPC when ZMQ is late
- Restart RSFetcher when it returns
None
too many times
API
- Exclude zero balances when retreiving balances by address and asset
- Add
description_locked
to theasset_info
field - Add
transaction_type
parameter forGet Transactions
endpoints - Add
transaction_types_count
table to the State DB - Add the following routes:
/v2/transactions/counts
/v2/blocks/<int:block_index>/transactions/counts
/v2/addresses/<address>/transactions/counts
- Add sortable field
asset_longname
to thebalances
table - Add the ability to retrieve balances by asset longname
- When composing an attach / move, use 10,000 sats for the value, rather than 546
- Add the
send_type
filter forsends
table (send
,attach
,move
ordetach
) - Add
events
field to transactions results whenverbose=true
CLI
- Have
rollback
andreparse
commands trigger a re-build of the State DB - Add current process name and current thread name to log messages
- Add
--log-exclude-filters
and--log-include-filters
flags
Credits
- Ouziel Slama
- Warren Puffet
- Adam Krellenstein
v10.7.4
Release Notes - Counterparty Core v10.7.4 (2024-12-09)
This is a hotfix release that addresses a deterministic node crash due to the fact that Enhanced Sends and MPMAs weren't setting the msg_index
value correctly. This bug was triggered by a UTXO send and an Enhanced Send being combined in a single Bitcoin transaction. All node operators should upgrade immediately.
Upgrading
This upgrade is required to address a critical protocol-level bug. No reparse is necessary.
ChangeLog
Protocol Changes
Bugfixes
- Ensure
msg_index
value is set for Enhanced Send - Ensure
msg_index
is unique for MPMA
Codebase
API
CLI
Credits
- Ouziel Slama
v10.7.3
Release Notes - Counterparty Core v10.7.3 (2024-11-26)
This is a hotfix release that must be installed immediately. It fixes a bug in the parsing of Attach and Detach transactions that crashes the server.
Upgrading
ChangeLog
Protocol Changes
Bugfixes
- Don't raise error on unpack exceptions
Codebase
API
CLI
Credits
- Ouziel Slama