Tari Release Notes – v5.1.0-rc.0
Breaking Changes
Comms infrastructure removed from wallet
- The wallet no longer includes its own peer-to-peer communication layer (comms, DHT, SAF) and now requires a persistent connection to a base node for all network operations. As a result, peer discovery, store-and-forward messaging, and Tor-based networking have been removed. Wallets must now connect via HTTP/gRPC to a base node to send transactions, sync UTXOs, or register validator nodes. Configuration files and FFI/gRPC interfaces related to comms have been deprecated or updated accordingly.
Wallet FFI
- SAF and DHT callbacks have been removed.
- A new type,
TariWalletDbConfig
, now replacesTariCommsConfig
- naming for comms_config_create and comms_config_destroy have been retained. - These functions have been removed:
wallet_get_seed_peers
- These functions have changes to their interfaces:
wallet_create
wallet_get_last_version
wallet_get_last_network
comms_config_destroy
comms_config_create
Updated gRPC .proto Bindings
-
ListConnectedPeers
now returns a new response,ListConnectedHttpPeersResponse
, replacingListConnectedPeersResponse
. The connected base node'spublic_key
andnode_id
are also returned for convenience, along with the connection URL, latency and online status. -
the gRPC
GetNetworkState
method’sliveness_results
now returns latency values in milliseconds instead of seconds, improving precision for network health reporting; this change is documented in the proto file to clarify expected behavior.
Softfork to resolve C29 calculations
In this release, a bug in the accumulated difficulty calculation for the Cuckaroo29 (C29) proof-of-work algorithm has been corrected. The fix will take effect starting from the proposed softfork height of 121,000. It is important to note that after upgrading, a node will no longer be able to sync from non-upgraded peers due to the change in consensus rules. However, a non-upgraded node that has not yet synced can still download blocks from an upgraded node. Once the sync completes, the non-upgraded node will detect the consensus mismatch and automatically ban the upgraded peer for four hours. To avoid network fragmentation and potential syncing issues, all nodes are strongly encouraged to upgrade before reaching the softfork height.
Burn-Claim Lifecycle
- The introduction of the full burn-claim lifecycle results in previous burn proofs in the wallet being deleted. In addition, there are several breaking changes in the following:
- Replacement of
range_proof
andCommitmentSignatureBase64
withSignature (compressed Schnorr)
in messages likeCreateBurnTransactionResponse
. - Schema changes in the wallet database: the
burnt_proofs
table is replaced with a newburn_proofs
schema, which is not backward-compatible. - Removal of older CLI and gRPC paths (
BurnTari
,BurnMinotari
), and renamingBurntProof
toBurnClaimProof
.
- Replacement of
Features
Application Enhancements
Console Wallet:
- The Tari Wallet now exposes richer connectivity states (Connecting/Online/Degraded/Offline) and reports latency; new RPC methods return connected HTTP peers (URL, last latency, online).
- Multi-signature functionality and offline signing has been introduced to the
minotari_console_wallet
. A full list of commands can be found [here]#7481). - Improved wallet performance by optimizing output handling to avoid redundant recalculations, resulting in faster transaction and gRPC flows. Refactored wallet/output interfaces to use standardized, synchronous accessors for enhanced reliability, stability, and simpler integration across wallet, node, and tests.
- Introduces full end-to-end support for burn-claim proofs from Layer 1 to Layer 2, enabling users to generate, store, and verify Merkle proofs for burned outputs. It replaces Ristretto-based ownership proofs with more efficient compressed Schnorr signatures, adds new wallet RPCs, database schemas, client/server APIs, and UI/CLI support. Additionally, it updates internal proof handling across the wallet, node, and transaction layers for improved performance and scalability.
- Dynamic fee estimation is now applied across sends (including multisend, one-sided, and multisig), and memos/payment metadata reflect computed fees.
Base Node:
- Added a configurable option to optionally clear bad blocks when starting the node. Users can now pass the
-p base_node.storage.clear_bad_blocks_at_startup=<bool>
command to perform this action when runningminotari_node
. A list of common commands across all the applications can be found at here. - Base node now exports
log₂
and high-significance representations of accumulated and target difficulty for improved Grafana visibility. Useful for monitoring forks or abnormal chain conditions. - Support for TCP-only mode. Running a Tari base node over TCP offers faster connections, lower latency, and improved reliability compared to Tor. It enables full compatibility with modern wallet interfaces (including HTTP/gRPC in Tari v5.x), supports real-time connectivity states, and simplifies infrastructure monitoring and debugging. You can read more about it here: Running a node in TCP only.
Network Behaviour
- Improved base node connectivity issues with peers when user does not use
Tor
running the base node while filtering out non-compatible connections, reducing the number of failed dialed attempts - Discovery requests adjusted to exclude client-only peers, reducing irrelevant results and improving relevance of discovered nodes.
- Network health checks now perform discovery and ping tests at the same time and ensure a stable connection before pinging, preventing system stalls.
- Removed the need to set a TCP address as a requirement for running a TCP node; the only requirement now is to set the
base_node.p2p.transport.type
in the configuration file totcp
.
gRPC Improvements
- New methods for depositing and withdrawing multi-signature tranactions have been added to the wallet gRPC methods:
PrepareDepositMultisigTransaction
PrepareWithdrawMultisigTransaction
Wallet and Node Configuration
- Added configurable per-route HTTP caching for wallet endpoints with centralized Cache-Control management, enable/disable toggle and sensible defaults; cache settings now flow through the node, RPC surface and HTTP server. Configuration presets updated with commented
http_cache
options and documented default settings
Database Improvements
- Improves SQLite connection handling by aligning
r2d2 checkout
timeouts with SQLite lock timeouts to reduce connection errors under load. It optimizes PRAGMA usage to avoid unnecessary write contention during migrations, adds better logging for the connection pool state, and introduces a high-contention stress test to validate stability under heavy load. As a result, users may see fewer errors, with occasional slight delays instead of immediate failures.
Migration Improvements
- Throttled background database rebuild tasks with brief delays to yield resources to other operations, improving responsiveness and reducing contention during heavy rebuilds.
Note: This may increase the time spent on full database rebuilds.
Fixes
- The C29 scaling issue has been corrected, and hash rate metrics for the network should now be reported accurately for the explorer and other purposes.
- Improved the header sync process: non-canonical headers are trimmed, headers are only committed when switching to a stronger chain, and enhanced logging of header sync errors.
- Added optional
minimum_value_promise
to pay-to-self and UTXO aggregation transactions, using it for VN registration to satisfy base node deposit validation. - Seed peers now load on-demand instead of at startup, reducing startup overhead and improving initial responsiveness.
- Improved the error message
"SeedStrap: Failed to contact any seed nodes or retrieve new peers."
to clarify the specific impact by further breaking it into two messaages:"SeedStrap: Failed to communicate with any seed nodes."
"SeedStrap: Communicated with {} seed nodes but did not retrieve any peers."
- Onion addresses are filtered when loading identity config.
- Fixed
peer_db update
where avalue = None
was ignored in the update set instead of changing the value tonull
in the database. This caused higher-level logic that depended on null to represent something to fail. - Improved startup resilience; if the stored node identity conflicts with the local identity, the system now auto-corrects the database, recalculates peer distances atomically, and proceeds with a warning instead of failing.
- Improved reliability of canceling pending transactions; missing or already-processed pending records and unlock failures are now logged as warnings and do not abort cancellation.
- Corrected the accumulated difficulty calculation for the Cuckaroo29 (C29) proof-of-work algorithm.
- Fixed potential saturation in C29 calculations to prevent skewed or capped hash rate values.
- Ensured hash rate metrics are accurate and consistent across all PoW variants.
- Fixed an issue where ledger-based wallets had undefined birthdays. Wallets now default to a birthday of
0
, ensuring they scan from genesis and detect all relevant transactions and UTXOs. - Prevents unnecessary rebuilds for chain heights below the C29 fork.
- Ensures rebuilds are only triggered when truly needed by inspecting the accumulated data.
- Appropriately sets the
last-rebuild
height for a smoother upgrade experience. - Corrects an issue where the
payment_id
was not being included in outbound transactions of recovered wallets. - Fixed the ledger app to use the latest version of the
ledger_sdk
.
Deployment
-
Back up your data — including the Console Wallet and Base Node data directories and configurations.
-
Stop all running services — Console Wallet, Base Node, and any FFI-integrated wallets.
-
Update gRPC clients and
.proto
files:- Regenerate client bindings using the updated
.proto
files. - Notable changes include:
ListConnectedPeers
now returnsListConnectedHttpPeersResponse
, which includes the connected base node’spublic_key
,node_id
, connection URL, latency, and online status.- The
GetNetworkState
method now reportsliveness_results
in milliseconds instead of seconds for improved accuracy. - New methods added to the wallet service for multi-signature support:
PrepareDepositMultisigTransaction
PrepareWithdrawMultisigTransaction
GetBurnClaimProof
added.
- Regenerate client bindings using the updated
-
FFI integrations:
-
The wallet FFI no longer includes support for comms, DHT, or SAF. All related callbacks and transport configurations (e.g., Tor, TCP) have been removed.
-
TariWalletDbConfig
replaces the deprecatedTariCommsConfig
. While function names likecomms_config_create
andcomms_config_destroy
remain, their internals have changed to reflect the new architecture. -
Removed FFI functions:
wallet_get_seed_peers
-
Updated function interfaces:
wallet_create
(now includes new parameters such aswallet_birthday_offset
)wallet_get_last_version
wallet_get_last_network
-
Ensure any FFI consumers are rebuilt using updated headers and regenerated bindings to reflect these changes.
-
-
Install the latest binaries for both the Base Node and Console Wallet.
-
Restart all services — Base Node, Console Wallet, and FFI-integrated wallets.
-
Verify operation — Check logs for errors, confirm wallet synchronization via HTTP/gRPC, and validate that updated gRPC and FFI interfaces are functioning correctly, including:
- Connectivity states (e.g., Online, Offline, Degraded) in the Console Wallet.
- Multi-signature transaction preparation flows.
- Accurate network health reporting via
GetNetworkState
.