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_peersconfig (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 submodule —
protocol/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_VERSIONat 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, andsubblock_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_addressas the sole canonical account identifier, remove legacy account-ID examples, and describeSTORAGE_CLAIMas 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_directoryfor 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>.mdURLs - 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 —
/healthzand/readyzHTTP 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-fileflag for production key loading (alternative to--seed) - Structured startup logging — startup completion log with timing breakdown
- AddVerification CLI —
add-verificationcommand for linking external addresses - ListKeys RPC — paginated key listing by account
- Multi-validator flags —
--bootstrapperand 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_FOUNDstatus for missing accounts and commits instead of empty responses - Cursor pagination — fix 0xFF byte boundary bug in cursor-based pagination
- Search pagination — fix
search_projectspagination 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/REMOVEtargeting the project owner - Reverse index corruption — fix key reverse index cleanup on key removal
- Chain stats accuracy — correct
state_entriesundercount andtotal_accountssource - Missing metrics tracking — add
track_requestcalls 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
--networkflag 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 inverify_sol_claim
Refactoring
- Hex encoding optimization — use pre-allocated buffer instead of per-byte
format!()calls as_str()methods — addas_str()toMessageTypeand other enums to eliminateformat!("{:?}")allocations- Reporter double-lock fix — return block response from
commit_blockto 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_blockpanic path incommit_block - Debug derives — add
Debugderives 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
0x0Bprefix 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