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.
- Request the broadcast minimum fee rate from connected peers.
- Removed the
StatelessPeerStore
, used primarily for development - Export the
tokio
crate - Further split
Log
andEvent
enumerations 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_random
convenience method onClient
- Request a
Range
of block headers fromClient
- Separate logs from events into different event channels
- The
Log
channel is bounded in size and contains informational, but non-critical information - The
Event
channel is unbounded and contains data that must be handled, likeIndexedBlock
- The
- Switch to
corepc-node
instead of unmaintainedbitcoincore-rpc
- Load block headers with
RangeBounds
- Remove unnecessary
unwrap
when managing filter headers - Clamp connections to a defined range
- Pass
FeeFilter
to client - Add Signet and Bitcoin checkpoints
- Upgrade
bip324
to0.6.0
- Switch to
corepc-node
to startbitcoind
in CI - Use
into_payload
inbitcoin 0.32.5
- Add check to bits before adjustment
- Remove explicit
serde
feature
- Client may fetch a
Header
at a particular height - Support for Testnet4 with new example
HeaderStore
has additionalheader_at
method- Removed unused
IndexedTransaction
variant onNodeMessage
- New
Progress
variant onNodeMessage
- Use inline docs for rustdoc
- Check the
CompactTarget
of the block headers received with far stricter requirements with respect to the difficulty adjustment - Bump
bip324
to0.5.0
andbitcoin
to0.32.4
- New
HeaderCheckpoint
constructor from height shutdown
,add_scripts
,broadcast_transaction
methods have blocking APIs- Add a
TrustedPeer
while the node is running - Add change the peer timeout while the node is running
- Use
impl Into
whenever possible onNodeBuilder
andClient
APIs - Remove the misleading
wait_for_broadcast
method onClient
- Remove
Option
fromWhitelist
as it is already aVec
- Limit the amount of
ADDR
messages a single peer can send
- Type alias for
Node
inbuilder
with default generics
HeaderStore
andPeerStore
traits now have an associated error typeNode
is now generic overH: HeaderStore
andP: PeerStore
- Move
NodeError
subvariants intocore
just
andjustfile
for 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::run
is an immutable method- Check block merkle root
- Download blocks in parallel with filters
- Single
ScriptBuf
may be added at a time Client
andClientSender
share methods
- Only request headers for
inv
the node does not have - Max v2 handshake buffer size increased
- Changes to
BlockQueue
to not spam peers with requests - Internal module renames
NodeBuilder
offers configuration options to build a compact block filtersNode
andClient
Client
is further split intoClientSender
andReceiver<NodeMessage>
ClientSender
may: add scripts, broadcast transactions, rescan block filters, stop the nodeNode
may run and sendNodeMessage
,Warning
while running- Connections to peers are encrypted if
ServiceFlags::P2P_V2
is 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
PeerStore
andHeaderStore
areSqlitePeerDb
andSqliteHeaderDb
- Nodes will no peers will bootstrap with DNS
- Experimental support for connections routed over Tor