dusk-node 1.7.0

An implementation of dusk-blockchain node in pure Rust
Documentation
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [1.7.0] - 2026-06-10

### Added

- Add a bounded pre-admission retry queue for non-consecutive Moonlight transactions
- Export genesis block generation through `node::chain::genesis_block`.
- Add `node::chain::find_block_header_by_state_root` for recovering stored
  headers from persisted state roots.
- Add `Ledger::latest_block_opt` to distinguish empty tip metadata from
  missing tip blocks.

### Fixed

- Remove unsafe consensus spin-time environment mutation during node initialization
- Require a higher gas price to replace conflicting mempool transactions
- Reject non-improving mempool transactions before VM preverification
- Reject deploy transactions whose gas charge overflows during mempool
  admission.
- Reject blob transactions whose gas charge overflows during mempool
  admission
- OutOfSync: stop consensus task on entry
- OutOfSync: ensure sync attempts do not exceed `SYNC_ATTEMPTS`
- InSync: reject implausible far-future Quorum sync targets
- OutOfSync: add early recovery on valid next-round Candidates
- OutOfSync: rotate sync peers on retry
- Reject historical transaction formats during live mempool admission while
  preserving ledger replay compatibility
- Discard reverted stake events from provisioner's selective update
- Preserve reverted VM event metadata in SQLite archive storage.

### Changed

- Extract transaction admission checks from the mempool service and validate
  canonical transactions without re-encoding ledger envelopes on the hot path.
- Accept Aegis and Boreas envelopes during live mempool admission and normalize them to the active ingress format
- Change `VMExecution` state movement, finalization, provisioner lookup, and
  revert APIs to use block headers instead of raw state roots.

## [1.6.0] - 2026-02-27

### Added

- Add phoenix fee check
- Add phoenix refund check to mempool validation

### Changed

- Update to edition 2024
- Replace `serde_as` with stable `serde(with)` attributes
- Remove unused lifetime in `fetch_unfinalized_events_by_hash`
- Update MSRV to 1.85

## [1.4.2] - 2025-12-13

### Added

- Add support for wasm module shading

## [1.4.1] - 2025-12-04

### Added

- Add config parameter `reader_max_connections` & make archive node options configurable [#3917]
- Add support for range activation features

## [1.4.0] - 2025-11-06

### Added

- Add extra SQLite indexes for archive node performance [#3874]
- Add cursor based pagination to `fetch_finalized_events_from_contract` [#3871]
- Add index on finalized_events (source, id) to do fast pagination [#3871]
- Add separate read/write SQLite connection pools [#3863]
- Add support for `TransactionData::Blob`
- Add fetch transaction count to archive [#3647]

### Changed

- Change SQLite connection configuration [#3866]
- Improve archive resilience and handle `CHECK(id == block_height)` invariant without panicking [#3865]
- Change mempool rule to compare gas limit on equal price

## [1.3.0] - 2025-04-17

### Added

- Add transaction serialization check
- Add max transaction size check
- Add active accounts to archive [#3646]
- Add from_block & to_block params to `full_moonlight_history` in archive [#3613]

## [1.2.0] - 2025-03-20

### Added

- Add `create_if_missing` field to `DatabaseOptions`
- Add support for `RUSK_EXT_CHAIN` env

## [1.1.0] - 2025-02-14

### Added

- Add `ledger_txs` to `Ledger` trait and Backend implementation [#3491]

### Fixed

- Change the way the archive synchronizes with the node Acceptor [#3359]

### Changed

- Change deprecated `tempdir` with `tempfile` dependency [#3407]

### Removed

- Removed ArchivistSrv & archivist module [#3359]

## [1.0.1] - 2025-01-23

### Changed

- Change dependency declaration to not require strict equal [#3405]

## [1.0.0] - 2025-01-17

- First `dusk-node` release

<!-- Issues -->
[#3917]: https://github.com/dusk-network/rusk/issues/3917
[#3874]: https://github.com/dusk-network/rusk/issues/3874
[#3871]: https://github.com/dusk-network/rusk/issues/3871
[#3866]: https://github.com/dusk-network/rusk/issues/3866
[#3865]: https://github.com/dusk-network/rusk/issues/3865
[#3863]: https://github.com/dusk-network/rusk/issues/3863
[#3647]: https://github.com/dusk-network/rusk/issues/3647
[#3646]: https://github.com/dusk-network/rusk/issues/3646
[#3613]: https://github.com/dusk-network/rusk/issues/3613
[#3491]: https://github.com/dusk-network/rusk/issues/3491
[#3359]: https://github.com/dusk-network/rusk/issues/3359
[#3407]: https://github.com/dusk-network/rusk/issues/3407
[#3405]: https://github.com/dusk-network/rusk/issues/3405

[Unreleased]: https://github.com/dusk-network/rusk/compare/dusk-node-1.7.0...HEAD
[1.7.0]: https://github.com/dusk-network/rusk/compare/dusk-node-1.6.0...dusk-node-1.7.0
[1.6.0]: https://github.com/dusk-network/rusk/compare/dusk-node-1.4.2...dusk-node-1.6.0
[1.4.2]: https://github.com/dusk-network/rusk/compare/dusk-node-1.4.1...dusk-node-1.4.2
[1.4.1]: https://github.com/dusk-network/rusk/compare/dusk-node-1.4.0...dusk-node-1.4.1
[1.4.0]: https://github.com/dusk-network/rusk/compare/dusk-node-1.3.0...dusk-node-1.4.0
[1.3.0]: https://github.com/dusk-network/rusk/compare/dusk-node-1.2.0...dusk-node-1.3.0
[1.2.0]: https://github.com/dusk-network/rusk/compare/dusk-node-1.1.0...dusk-node-1.2.0
[1.1.0]: https://github.com/dusk-network/rusk/compare/dusk-node-1.0.1...dusk-node-1.1.0
[1.0.1]: https://github.com/dusk-network/rusk/compare/node-1.0.0...dusk-node-1.0.1
[1.0.0]: https://github.com/dusk-network/rusk/tree/node-1.0.0