Notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Unchecked division in average fee rate calculation
- Re-add support for fetching witness data with blocks
- Connections to Tor hidden services possible with Tor proxy
Socks5Proxynewtype introducedpeer_infomethod introducedchain_tipmethod introducedFilterTypeenum exposedachowadded to Signet DNS seeds
AllPeerstransaction broadcast removedexamplefolder renamed toexamplescorepc-nodeupdated to0.10.0
MessageGeneratormade infallible- V1 transport used when using a Tor proxy
- Re-add support for 32 bit architectures, commonly old Android devices.
- Reduce the stack allocation of the address manager
- Use
BufReaderforTcpStream
- Broadcasting a transaction waits for the transaction to be gossiped
- DNS resolver no longer configurable (determined by OS)
Progressnow includes chain height, removes public fields
- Interal DNS implementation removed in favor of
tokio BuilderderivesDebug
ChainStatemay be configured to initialize theBuilderbitcoin-address-book0.1.0added as a dependency
- MSRV changed to
1.84 rusqlitedependency removed, along with the underlying header and peer stores- Generics removed from
Node Headeremitted asEventwhen the block header chain updatesRequesterno longer fetchesHeaderdataNodeErrorhas a single variantBuilder::buildconsumesSelf- Some
Warningvariants removed
- Internal
Filteris infallible
- Take the inner
BlockFilterfromIndexedFilter Info::BlockReceivedto convey the node is doing work
Node::runconsumesself- Most checkpoints are removed, less segwit and taproot activations
NodeStateis now internal to the libraryNodeBuilderis renamedBuilder- Scripts are no longer add, only filters are emitted
- Interior mutexes removed
- Remove
ScriptBuffrom internals to avoid filter check race conditions - Additional mining delay
- Debug logs are now internally compiled in debug builds only
- "rescan" and "testnet4"
- Remove all unused data and methods on
PeerMap - Use static test variables in unit tests
- Increase the variety of filters(s) on DNS queries for more reliable results
- Query the average fee rate for a block
- Add
lookup_hostBitcoin DNS seeder querying function - Any feature configuration may request a block
- Add test to ensure all relevant blocks are fetched
- Add "BDK Tech Talk" slides
- Add unit test for
LastBlockMonitorto ensure stale blocks are noticed - More details in
Contributingdoc checkweekly job to check new nightly lints
- Add
NewHeightandNewForkvariants toInfo
- Ignore difficulty adjustment on
Testnet4 - Add
PingStateto ping peers that may have gone stale
- Add convenience methods to get blockhash and prev blockhash on
IndexedHeader
- Add an explicit transaction broadcasting test
- Add
bitcoinexample
- Added
Info::SuccessfulHandshakemessage when versions/veracks are exchanged with a peer - Update
bitcointo0.32.6 - Add
test-utilsdependency fromtokioto simulate passage of time testnet4uses DNS seeds for peersimpl_sourceless_erroris private
- Introduce the
ReaderMessage - Show the actual percentage for
Progress - Introduce
MessageStatefor state management withinPeer - Using
MessageState, gossiped peers are initially added on a separatetokio::task - Introduce
BroadcastQueuefor higher transaction broadcast reliability
- Fetch the
Networkfrom the node builder - Configure the initial TCP connection timeout when trying new peers
- Add BDK integration links to the
README - Updated resource usage and profiling in
DETAILS.md
- Use
HeightExtinternally for bitcoin related math onu32 anchor_checkpointis renamed toafter_checkpoint- Drop the
FilterSyncPolicyand associated configurations - Block header implementations now have separate "stage" and "write" steps
TxSentinfo message is nowTxGossiped, and is sent after a transaction is requested from the remote node
- Migrate the live sync CI task to a weekly job
- Remove
awaitpoints when syncingCFHeadersandCFilters - Fetch the headers required to handle both reorganizations and difficulty adjustments when the node starts
- Drop dynamic dispatch in the
networkin favor of explicitV1andV2transport
- Template issue for bugs, enhancement requests, releases
- Mainnet, signet, testnet4 checkpoints
- Testnet4 DNS seeds
- Socks5 proxy connections supported
justfileimprovements
- Removed the crate lockfile
- Removed the
coremodule - Removed the
filtermodule - Renamed
DisconnectedHeadertoIndexedHeader databasefeature is nowrusqlite- Remove
artiand Tor feature in favor of a Socks5 proxy - Folder for data storage is now
light_client_data - SQL header schema has been changed to store
BLOBof consensus encoded header bytes - New log level introduced and
Loghas been renamed toInfo - Debug strings sent on a separate channel
- Sending messages to the node is synchronous
- Checking
IndexedFilterfor matches is immutable
- Introduce
BlockTreeto manage chain data- Constant time data access when indexed by height or hash
- Consolidated block headers, filter headers/hashes, filter checks into a single struct
- Management of candidate forks
- Constant time fork comparison
- CI refactors and improvements
- Introduce log level and optimize release builds to remove heap allocations for debug messages
- Configure a custom DNS resolver
Dialogfield renamed toDebugdnsfeature is removed and DNS is used by default- Better naming on the fields of
Warning NodeBuilderuses declarative naming for methods
- Tor and Signet examples updated
- Adding scripts or peers twice does not overwrite past changes in
NodeBuilder - Remove invalid assessment of median time past in fork scenario
- Use the proper
inv->getdata->txmessage exchange to broadcast transactions
- Request the broadcast minimum fee rate from connected peers.
- Removed the
StatelessPeerStore, used primarily for development - Export the
tokiocrate - Further split
LogandEventenumerations intoLog,Warning, andEvent
- Update the port and services when peers are gossiped
- Reset the timer after disconnecting from peers due to a stale block
- Remove case for invalid median time check
- Request a block using the
Client - Add
broadcast_randomconvenience method onClient - Request a
Rangeof block headers fromClient
- Separate logs from events into different event channels
- The
Logchannel is bounded in size and contains informational, but non-critical information - The
Eventchannel is unbounded and contains data that must be handled, likeIndexedBlock
- The
- Switch to
corepc-nodeinstead of unmaintainedbitcoincore-rpc - Load block headers with
RangeBounds
- Remove unnecessary
unwrapwhen managing filter headers - Clamp connections to a defined range
- Pass
FeeFilterto client - Add Signet and Bitcoin checkpoints
- Upgrade
bip324to0.6.0 - Switch to
corepc-nodeto startbitcoindin CI - Use
into_payloadinbitcoin 0.32.5
- Add check to bits before adjustment
- Remove explicit
serdefeature
- Client may fetch a
Headerat a particular height - Support for Testnet4 with new example
HeaderStorehas additionalheader_atmethod- Removed unused
IndexedTransactionvariant onNodeMessage - New
Progressvariant onNodeMessage
- Use inline docs for rustdoc
- Check the
CompactTargetof the block headers received with far stricter requirements with respect to the difficulty adjustment - Bump
bip324to0.5.0andbitcointo0.32.4
- New
HeaderCheckpointconstructor from height shutdown,add_scripts,broadcast_transactionmethods have blocking APIs- Add a
TrustedPeerwhile the node is running - Add change the peer timeout while the node is running
- Use
impl Intowhenever possible onNodeBuilderandClientAPIs - Remove the misleading
wait_for_broadcastmethod onClient
- Remove
OptionfromWhitelistas it is already aVec - Limit the amount of
ADDRmessages a single peer can send
- Type alias for
Nodeinbuilderwith default generics
HeaderStoreandPeerStoretraits now have an associated error typeNodeis now generic overH: HeaderStoreandP: PeerStore- Move
NodeErrorsubvariants intocore
justandjustfilefor local development- Additional SQL tests with
tempfile - Additional context to database read and write errors
- Support for a new silent payments feature-flag:
- Receive block filters directly
- Request blocks directly
- Pause the node state before downloading filters
- Disconnect peers if no block is found after 30 minutes
- Find new peers after 3 hour connections
Node::runis an immutable method- Check block merkle root
- Download blocks in parallel with filters
- Single
ScriptBufmay be added at a time ClientandClientSendershare methods
- Only request headers for
invthe node does not have - Max v2 handshake buffer size increased
- Changes to
BlockQueueto not spam peers with requests - Internal module renames
NodeBuilderoffers configuration options to build a compact block filtersNodeandClientClientis further split intoClientSenderandReceiver<NodeMessage>ClientSendermay: add scripts, broadcast transactions, rescan block filters, stop the nodeNodemay run and sendNodeMessage,Warningwhile running- Connections to peers are encrypted if
ServiceFlags::P2P_V2is signaled - Connections are terminated if peers do not respond within a custom
Duration - Peers are selected at random with a target preference of 50% new and 50% tried
- Connections are terminated after long duration times to find new reliable peers
- Blocks are considered "stale" if there has not been a new inv message after 30 minutes. Block headers are requested again to ensure no inv were missed.
- Transactions are broadcast according to a configurable policy, either to all connections for higher reliability, or to a random peer for better privacy
- Default implementers of
PeerStoreandHeaderStoreareSqlitePeerDbandSqliteHeaderDb - Nodes will no peers will bootstrap with DNS
- Experimental support for connections routed over Tor