ADAMANT blockchain node v0.10.0 is a major maintenance and capability release for operators, delegates, and client developers. It improves messenger-facing APIs, adds WebSocket peer transport, strengthens diagnostics and installation tooling, refreshes dependencies, and hardens transaction admission at the P2P boundary.
Upgrade guidance: delegates and node runners are encouraged to upgrade for reliability, security, and compatibility with newer clients. The release does not introduce a mandatory consensus fork for already-synced networks — height-gated protocol behavior (fairSystem, spaceship) remains configuration-driven and backward-compatible before activation heights.
Breaking changes
- Node.js requirement: Node.js 18 is no longer supported. Engine requirement is
>=22.13.0(#117, #111). - Removed deprecated HTTP endpoints including passphrase-bearing routes, unused chat helpers,
/delegates/fee,/normalize, and related legacy handlers (#105). - API response typing:
countis now returned as a number across affected list endpoints (#110). - Filter rename:
withoutDirectTransfersis deprecated; useincludeDirectTransfersinstead (#91). - Cryptography stack: migrated from
sodiumwrapper to nativesodium-nativebindings (#153).
API updates
timestampMsfield for transactions, with consensus-gated validation and response handling (#93, #210).?returnUnconfirmed=1for transactions, chats, states, and chatrooms; additional explicit unconfirmed fields (#96, #122, #127).includeDirectTransfersparameter for/api/chats/getand/api/chatrooms(#91, #114).- Default sorting uses
timestamp:desc; timestamp-based ordering prioritizestimestampMs(#128). - Query parsing fix: bracket-style
types[]filters work in transaction API queries (#157). - Past-timestamp admission limited to chat and state transactions; transfers allow a wider offline-wallet window (#236).
- Security: disabled public access to forging list endpoint (#123).
Protocol & consensus
- Consensus activation heights configuration for
fairSystemandspaceshipwith height-gated behavior (#210). timestampMsprotocol rules preserved: ADAMANT-epoch milliseconds, derivedtimestamp, and activation-boundary tests.- No emergency fork: existing chains continue with deterministic replay; operators should still upgrade before future activation milestones.
Security
- P2P timestamp admission hardening: future- and past-timestamp checks used by the Public API are now also enforced on the P2P gossip path, closing a pool-poisoning gap where far-future transactions could bypass
publish()via peer relay (#246). Replay/syncverify()paths are unchanged — not consensus-breaking. - Native Ed25519 verification via
sodium-native(#153). - Cache and request-limiter configuration improvements (#238).
Networking & performance
- WebSocket peer transport between nodes with connection rotation and peer prioritization (#99). Learn more at https://docs.adamant.im
- Improved WebSocket logging with direction context (#233, #136).
- Block sync robustness: prevent stale block backlog during synchronization (#237, #138).
- Chatroom SQL optimizations (#109).
- Transaction pool rewrite using
Mapwith improved removal and indexing (#108, #125). - Block / transaction metadata: height and
blockTimestamppersisted and exposed.
Node operations & tooling
- Installation scripts modernized for Ubuntu/Debian and CentOS/RHEL 8–10: Node.js 22/24/26, PostgreSQL handling, wget-based bootstrap, improved prompts and logging (#241).
fix_node.shrepairs and version bumps for operator recovery flows.- Config overrides via CLI and JSON files with unsafe-key validation (#228).
- Localnet scripts:
start,stop,status,drop(#230). - Live scenario testing runner for testnet and localnet (#232).
- Testnet bootstrapping helpers in tooling (#152).
- Default peer list maintenance (#139, #224, #169).
- Populate missing config values from
config.default.jsonat startup (#142). - Graceful shutdown and mem-table safety documentation (#158, AGENTS.md).
Developer experience
- Structured logging with rotation, colored levels, and sync progress diagnostics (#158, #140, #100).
- Expanded CONTRIBUTING.md with live test scenarios and reporting (#232).
- AGENTS.md and AI_AGENT_NOTES.md for maintainer/agent workflows (#165, #169).
- Improved unit/API test coverage and developer testing workflow (#124, #115, #119).
Deprecated & removed
- GitHub Wiki as documentation source — use https://docs.adamant.im
withoutDirectTransfersquery parameter (useincludeDirectTransfers)verifyOnLoadingconfig option (#112)- Legacy HTTP endpoints removed (#105)
Upgrade notes for operators
- Upgrade Node.js to 22.13.0 or newer before deploying.
- Prefer official install/repair scripts from this release tag.
- Review
config.default.jsonfor new options (wsNode, logging, consensus activation heights). - Stop nodes gracefully (
Ctrl+C); do not usekill -9on live nodes. - After upgrade, verify
/api/node/statusand peer connectivity (HTTP and WebSocket).
Full changelog
✨ Features & enhancements
- #91 feat: add
includeDirectTransfersfor chats/chatrooms by @yoxira - #93 feat: add
timestampMsfor transactions by @yoxira - #96
?returnUnconfirmed=1flag for transactions by @yoxira - #99 feat: add socket connection between nodes by @yoxira
- #110 feat: return count as number by @yoxira
- #111 update to Node.js 20/22 and dependencies by @graycraft
- #124 feat: improve testing developer experience by @yoxira
- #127 feat: return additional fields for unconfirmed transactions by @yoxira
- #128 feat: use timestampMs when sorting by timestamp by @yoxira
- #140 feat: color log levels by @yoxira
- #142 feat: populate missing config values from defaults by @yoxira
- #158 feat: rewrite logger with debug files and rotation by @yoxira
- #165 docs: add AI agent guidelines by @al-onyxprotocol
- #210 fix: complete timestampMs response and activation handling by @adamant-al
- #228 feat: add generic startup config overrides by @dev-adamant-im
- #230 feat: add localnet management scripts by @dev-adamant-im
- #232 feat: add live scenario testing runner by @adamant-al
🐞 Bug fixes
- #108 fix: transaction pool doesn't properly remove transactions by @yoxira
- #113 fix: don't process old blocks by @yoxira
- #114 fix:
includeDirectTransfersby @yoxira - #120 fix: skipping delegate slot by @yoxira
- #121 fix: removeAllListeners is not a function by @yoxira
- #122 fix: orderBy/offset with
returnUnconfirmedby @yoxira - #123 fix: disable public access to forging list by @yoxira
- #125 fix: transactionPool uses wrong config by @yoxira
- #129 fix: enforce not null after successful migration by @yoxira
- #133 fix: dependency error by @yoxira
- #134 fix: bugs related to Express v5 migration by @yoxira
- #135 fix: minor bugs by @yoxira
- #138 fix: block process sequence by @yoxira
- #157 fix: default query parser does not support
types[]by @yoxira - #210 fix: complete timestampMs response and activation handling by @adamant-al
- #233 fix: improve WebSocket peer logging visibility by @metalisk
- #236 fix: limit past-timestamp admission to chat/state transactions by @metalisk
- #237 fix: prevent stale block backlog during synchronization by @metalisk
- #246 fix: enforce future-timestamp admission check on P2P transaction relay by @al-onyxprotocol
🚀 Performance
⚙️ Chores & maintenance
- #100 chore: improve logs for discarding blocks by @yoxira
- #104 chore: rename
wsNodeoptions in test config by @yoxira - #105 chore: remove deprecated endpoints by @yoxira
- #112 chore: remove
verifyOnLoadingfrom config by @yoxira - #115 chore: review tests by @yoxira
- #117 BREAKING CHANGE: drop Node.js 18 by @yoxira
- #118 update README by @adamant-al
- #119 docs: update requirements for testing by @yoxira
- #126 chore: update testnet config by @yoxira
- #132 update minor dependencies by @adamant-al
- #136 update WsNode logging by @adamant-al
- #139 update default nodes by @adamant-al
- #152 chore: add testnet bootstrapping to scripts by @adamant-al
- #153 chore: replace sodium with sodium-native by @yoxira
- #169 chore: update AI guidance and default node list by @adamantmm
- #224 chore: replace unreachable initial peer IP by @dev-adamant-im
- #238 chore: update dependencies (phase 2) by @metalisk
- #241 chore: modernize node installation and repair scripts by @metalisk
- #242 chore: update post-phase-2 dependencies by @metalisk
📦 Release
- #244 Release: ADAMANT node v0.10.0 by @al-onyxprotocol