Skip to content
LogoLogo

Changelog

Notable changes to the Makechain protocol, node, and documentation. Organized by month and grouped by category.

April 2026

Features

  • Commonware v2026.4 upgrade — upgraded all commonware dependencies from v2026.3 to v2026.4, including consensus, p2p, storage, and cryptography crates.
  • SilentLeader forwarding — consensus relay now uses ForwardingPolicy::SilentLeader, enabling targeted block re-sends to peers that missed a block instead of re-broadcasting to all peers.
  • Secondary peers — new secondary_peers config (CLI: --secondary-peers, env: MAKECHAIN_SECONDARY_PEERS) for registering known follower nodes that receive broadcasts but do not participate in consensus. Secondary peers must dial in and are not actively discovered by the P2P network.
  • Protocol submoduleprotocol/ directory replaced with a git submodule pointing to officialunofficial/protocol, enabling independent versioning of the specification.

Fixes

  • Empty reader block recovery — fix reader/follower recovery for empty blocks without falling back to full replay.
  • PROOF_VERSION stability — keep PROOF_VERSION at 1; no existing wire formats require a version bump.

March 2026

Features

  • Subblock architecture — non-proposer validators broadcast signed mempool snapshots (subblock payloads) to help the proposer build fuller blocks. Configurable via subblock_enabled, subblock_interval_ms, and subblock_max_messages. Broadcasts on P2P channel 5 with Ed25519 signature verification, validator membership checks, and staleness detection.
  • TUI command center — interactive terminal dashboard (cargo run --bin tui) with embedded devnet node. Tabs for Dashboard, Blocks, Messages, Projects, Accounts, Mempool, and a Submit tab for composing messages directly from the terminal.
  • MIP-3 identity cutover — documentation and client surfaces now treat owner_address as the sole canonical account identifier, remove legacy account-ID examples, and describe STORAGE_CLAIM as the only active Tempo-backed storage ingress path.
  • Client library extraction — shared src/client/ module extracted from CLI with reusable transport, keystore, formatting, signer, and wallet utilities for building custom clients.

February 2026

Features

  • Idle consensus throttling — drop the oneshot sender in propose() when the mempool is empty, using Simplex BFT's nullification mechanism to throttle idle rounds from ~100+/sec to ~5/sec
  • QMDB runtime storage directory — configure commonware runtime's storage_directory for QMDB partition placement, replacing manual directory management
  • Cold-start retry — gateway retries on empty gRPC response bodies during container cold start, ensuring reliable responses even when the node is booting
  • Subscriber robustness — signal lagged subscribers and enforce per-connection subscription limits to prevent resource exhaustion
  • Per-page markdown generation — enable AI agents to fetch individual documentation pages as markdown via <page>.md URLs
  • Ask AI dropdown — custom AI integration menu in docs with ChatGPT, Claude, copy-as-markdown, and llms.txt links
  • Interactive demos — six interactive demo pages (register account, create project, push commits, verify identity, fork project, manage access) with a reusable Demo component system
  • Design system — 55 shape SVGs, brand guidelines, color system, typography scale, component library, and writing guide
  • Health endpoints/healthz and /readyz HTTP endpoints on the metrics server for load balancer integration
  • Prometheus gossip metrics — P2P monitoring with broadcast/receive counters by outcome
  • Consensus event metrics — track proposal, verification, and commit events
  • Validator key file--validator-key-file flag for production key loading (alternative to --seed)
  • Structured startup logging — startup completion log with timing breakdown
  • AddVerification CLIadd-verification command for linking external addresses
  • ListKeys RPC — paginated key listing by account
  • Multi-validator flags--bootstrapper and multi-participant CLI flags for the node binary

Fixes

  • Empty block disk exhaustion — stop infinite empty block production that caused disk exhaustion from snapshots; re-enable container snapshots with the default interval
  • Snapshot restore logging — log the state root hash when restoring from snapshots instead of discarding it; remove redundant entries().count() call
  • QMDB empty diff skip — skip QMDB persistence for blocks with no state changes as defense-in-depth
  • NOT_FOUND for missing resources — return proper gRPC NOT_FOUND status for missing accounts and commits instead of empty responses
  • Cursor pagination — fix 0xFF byte boundary bug in cursor-based pagination
  • Search pagination — fix search_projects pagination and use saturating arithmetic for stats counters
  • Verification count gate — enforce verification limit before processing claim
  • Empty block liveness — ensure empty blocks still advance the chain
  • Lazy account init — initialize account state on first key registration instead of eagerly
  • Nonce overflow — use saturating addition for ref nonces to prevent overflow
  • Commit count inflation — fix double-counting in commit statistics
  • Name collision on restore — check name uniqueness when restoring a removed project
  • Ref type immutability — prevent changing a ref's type (branch vs tag) after creation
  • Owner-as-collaborator guard — reject COLLABORATOR_ADD/REMOVE targeting the project owner
  • Reverse index corruption — fix key reverse index cleanup on key removal
  • Chain stats accuracy — correct state_entries undercount and total_accounts source
  • Missing metrics tracking — add track_request calls to 17 gRPC endpoints
  • Gossip replay protection — reject already-committed messages in the gossip receiver
  • State root snapshot — use actual state root in shutdown snapshot instead of zero hash
  • Network flag validation — fail fast on invalid --network flag instead of silent devnet default
  • Block hash verification — verify block hash integrity before storing in commit_block
  • DA reference logging — log warning on malformed DA reference decode instead of silent skip
  • Solana verification safety — replace unwrap() with error handling in verify_sol_claim

Refactoring

  • Hex encoding optimization — use pre-allocated buffer instead of per-byte format!() calls
  • as_str() methods — add as_str() to MessageType and other enums to eliminate format!("{:?}") allocations
  • Reporter double-lock fix — return block response from commit_block to avoid double-locking in reporter
  • lock_state() helper — extract shared state lock helper in gRPC service for consistent error handling
  • Shared hex module — consolidate duplicate hex encoding functions into src/hex.rs
  • Block build simplification — simplify build_block panic path in commit_block
  • Debug derives — add Debug derives to public consensus and API structs
  • Mempool optimization — eliminate message cloning in mempool drain and harden decode paths
  • Reverse pubkey index — O(1) account-by-key lookups via 0x0B prefix index

Documentation

  • RPC reference — comprehensive reference for all 32 gRPC methods with request/response schemas
  • Protocol docs — scope requirements, storage limits, execution phase corrections
  • Design system pages — brand, colors, typography, components, writing guide, shapes
  • Key schema docs — updated with new prefixes (0x0A, 0x0B) and current test counts