ADAMANT blockchain node v0.10.2 is a reliability, recovery, and API capability release for node operators, delegates, explorers, messengers, and service developers. It helps nodes recover from stalled synchronization and interrupted shutdowns, adds richer REST and Socket.IO data access, corrects delegate API regressions, improves large-database queries, and refreshes dependencies and operator guidance.
Upgrade guidance: upgrading is recommended for improved reliability, recovery time, security maintenance, and API capabilities, but it is not mandatory for network compatibility. This release introduces no consensus fork and does not change block or transaction serialization, signatures, delegate ordering, rewards, fees, activation heights, slot timing, or deterministic replay.
Breaking changes
There are no protocol, consensus, wire-format, or API contract-breaking changes in v0.10.2.
- New REST fields and Socket.IO subscriptions are additive and backward-compatible.
- The legacy
topAccountsconfiguration switch is removed;GET /api/accounts/topis now registered consistently on every node. - The release adds forward-only database migrations. The first startup after upgrading may need additional time and disk space to create checkpoint storage and account/block indexes.
API updates
- Top accounts API: add
GET /api/accounts/topwith deterministicbalance DESC, address ASCordering, pagination,isDelegatefiltering, response metadata, andlimit=0count-only requests (#260; Adamant-im/docs#29; Adamant-im/adamant-schema#44). - Delegate rank correctness: restore real
rank, deprecatedrate, and outsider productivity values inGET /api/delegates/get(#253). - Delegate voters correctness: prevent
GET /api/delegates/votersfrom falling through to all accounts; add address-list filtering and related validation fixes (#255). - Consensus visibility: expose
consensusCodeName, the effective consensus activation schedule, and the complete block reward milestone schedule through status APIs (#266; Adamant-im/docs#37; Adamant-im/adamant-schema#51). - Delegate forged amount: add lifetime
forgedvalues to delegate list and single-delegate responses as base-10 integer strings (#266). - Next-forger projection: use the next block height at round boundaries and return a stable loading error before the chain tip is available (#266).
- Blocks filtering: correctly support
numberOfTransactions=0without changing the/api/blocksresponse contract (#263; Adamant-im/docs#33; Adamant-im/adamant-schema#46).
Client WebSocket API
- Add opt-in compact
newBlockevents through the existing client Socket.IO interface (#264; Adamant-im/docs#35; Adamant-im/adamant-schema#48). - Add opt-in
balances/changeevents forbalance,unconfirmedBalance, or both (#264). - Index block, transaction, and balance subscriptions so unrelated clients are not scanned.
- Batch affected account reads around block apply/rollback and isolate publication failures from consensus-state mutation.
- Delivery remains best-effort and non-durable. Clients should restore subscriptions after reconnecting and reconcile critical state through REST.
Protocol & consensus
- The effective activation schedule and active consensus codename are now observable through public status APIs (#266).
- The next-forger fix changes only a previously incorrect public API projection at round boundaries; the forging and validation paths remain unchanged.
- No consensus rules, activation heights, transaction/block bytes, IDs, signatures, rewards, fees, round settlement, or replay behavior change in this release.
Reliability & recovery
- Sync watchdog: detect synchronization runs that make no block-height progress for five minutes, abort the stalled run safely, drain in-flight state mutation, and allow a later sync to recover automatically (#249).
- Rejected-query handling: propagate PostgreSQL rejections through block verification, block loading, and startup memory-table updates instead of silently parking callback chains (#251).
- Persisted mem-table checkpoints: add three rotating, SHA-256-verified checkpoint slots for derived
mem_*state (#261). - Fail-closed recovery: restore only checkpoints that pass metadata, digest, invariant, chain, and network checks; fall back to the existing full deterministic rebuild whenever verification or partial replay fails (#261).
- Canonical blocks and deterministic replay remain the source of truth. Checkpoints are only a local recovery cache.
Security
- Update dependencies within their current major versions and remove the unused direct
npmruntime dependency and its bundled subtree (#262). - Add a narrow compatible
grunt -> js-yaml@3.15.0override (#262). - Reduce the audited dependency graph from 4 moderate and 1 high findings to 0 moderate, high, or critical findings (#262).
- No signature, mnemonic, transaction validation, peer handshake, or cryptographic protocol behavior changes.
Networking, database & performance
- Add a partial balance index for deterministic top-account queries (#260).
- Replace the blocks generator hash index with a composite B-tree index on
(text_generatorPublicKey, height DESC), avoiding full-table scans for unknown generators with the default ordering (#263). - Use indexed Socket.IO subscriptions and batched final-state reads to reduce unnecessary client scans and account queries (#264).
- Add rotating checkpoint storage for faster recovery from inconsistent derived state (#261).
Node operations & tooling
- Enable persisted memory-state checkpoints by default through
loading.memCheckpoints.enabled(#261). - Preserve the full-rebuild fallback for disabled, unavailable, invalid, or stale checkpoints.
- Clarify graceful shutdown: after
SIGINTorSIGTERM, wait for active sync/block processing to drain and forCleaned up successfullybefore restarting or closing the process. - Document the native
pg-native/libpqNode ABI rebuild path and current PostgreSQL test-service guidance. - Keep the existing Node.js requirement of 22.13.0 or newer.
Developer experience
- Expand unit, API, integration, SQL, and live-scenario coverage for synchronization recovery, checkpoints, accounts, delegates, blocks, status APIs, and Socket.IO flows.
- Reorganize the README and refresh project/community references.
- Align companion documentation and OpenAPI changes for the top-accounts, blocks, WebSocket, status, and delegate APIs.
Upgrade notes for operators
- Use Node.js 22.13.0 or newer.
- Back up the database according to your normal operator procedure.
- Stop the node gracefully and wait for
Cleaned up successfully. - Deploy v0.10.2 and allow the first startup to finish all migrations.
- Plan additional database time and disk space for three rotating derived-state checkpoint slots and the new indexes.
- After startup, verify
/api/node/status, synchronization progress, live block processing, and any REST or Socket.IO capabilities used by your services.
Full changelog
✨ Features & enhancements
- #260 Feat: Add top accounts API by @adamant-al
- #261 Feat: Add persisted mem-table checkpoints for crash recovery by @adamantmm
- #264 Feat: Add client WebSocket block and balance events by @massivedev0
- #266 Feat: Expose consensus schedules and delegate forged amounts by @al-onyxprotocol
🐞 Bug fixes
- #249 Fix: Sync watchdog so a stalled sync cannot wedge the node by @massivedev0
- #251 Fix: Handle DB query rejections in block/sync path to prevent silent stalls by @massivedev0
- #253 Fix: Compute delegates/get rank and rate over the full delegate list by @massivedev0
- #255 Fix: Prevent delegate voters API from returning all accounts by @dev-adamant-im
- #263 Fix: Optimize blocks API queries by @massivedev0
⚙️ Chores & maintenance
- #262 Chore: Update npm dependencies and reduce install vulnerabilities by @metalisk
214d091eChore: Update version to 0.10.2 inpackage.jsonandpackage-lock.json62d9519eDocs: Reorganize README for clarity and improved information flow
📦 Release
- #269 Release: ADAMANT node v0.10.2 by @al-onyxprotocol