All notable changes to the Norn Protocol will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- HotStuff BFT consensus activation --
--consensusCLI flag enables multi-validator consensus, overriding solo mode from--dev - Consensus timeout detection -- triggers view change after 9 seconds without a committed block (3x block time), preventing permanent chain stalls on leader failure
- State sync block verification -- synced blocks are now validated (hash, proposer, Merkle roots, signatures) before application, rejecting invalid blocks from malicious peers
staking_mut()accessor on WeaveEngine for future validator slashing supportsetup-validator-service.shdeploy script for the validator node
- Devnet seed and validator services now run with
--consensusfor true multi-validator block production - Startup summary displays "dev . consensus" when
--consensusis active
- Real-time app updates — loom event refreshes now update data in place instead of showing a full-page loading spinner
- Decoupled query loading from execute loading in
useLoomOpsso background data fetches don't flash the UI
- Wallet visual redesign — removed unnecessary Card wrappers, flattened dashboard hero, cleaned up contracts page
- Collapsible sidebar with icon-only mode and persistent state
- Identicon colors aligned with norn brand palette (muted blue-gray)
- Removed devnet banner from wallet layout
- Loom deploy race condition fixed with block confirmation polling
- Validator reward distribution — epoch fees redistributed to validators proportional to stake (replaces fee-burn model)
norn wallet rewardsCLI command for viewing pending epoch fees and projected validator rewardsnorn_getValidatorRewardsRPC endpointFormButtoncomponent with contextual disabled hints across all 20 wallet form pagesFieldErrorinline validation component for address and hex inputs- Contracts page Browse/Interact tabs with deployed contract discovery and structured result display
scripts/setup-node.shone-command node installer
debit_fee()no longer burns fees — supply is preserved, fees flow to validators- Disabled button styling improved:
opacity-30+cursor-not-allowed(wasopacity-50+pointer-events-none)
- Block explorer (
explorer/) — Next.js 15 + shadcn/ui with real-time block, transaction, token, and contract views - Web wallet (
wallet/) — PWA with mobile-first design, encrypted keystore, passkey recovery, 11 smart contract apps - Wallet extension for Chrome — sign transactions from web apps
- Website (
website/) — norn.network marketing site with documentation - Synthetic transfer records for complete transaction history (genesis, fees, mints, burns)
norn_getBlockTransactionsRPC endpoint- Address labels for known addresses (genesis, faucet)
- 8 example smart contracts: governance, escrow, vesting, treasury, timelock, swap, splitter, crowdfund
- Balance history and activity charts in wallet dashboard
- Block production timing metrics with microsecond precision
- Faucet credit propagation through blocks to all nodes (v0.18.1)
- Token symbol display in RPC responses (v0.18.4)
- Custom token decimal formatting in transfers (v0.18.3)
- WebSocket subscriptions — real-time streaming for blocks, transfers, tokens, looms, and pending transactions
- Cross-contract calls via
norn_call_contracthost function with re-entrancy protection (MAX_CALL_DEPTH = 8) - TypeScript SDK (
@norn-protocol/sdk) — NornClient, NornWallet, NornSubscriber, address utilities (51 tests) RpcBroadcastersfor grouped event distribution across 5 channels
- Multi-validator HotStuff BFT consensus with leader rotation
- Staking system with
stake,unstakecommands and bonding period - Slashing for conflicting block production
- State proofs — Merkle proof generation and verification for account balances
- Dynamic validator set — join/leave based on stake weight
- Epoch system — 1000-block epochs for fee accumulation and validator rotation
- PROTOCOL_VERSION 6 → 8, SCHEMA_VERSION 6 → 7 (breaking)
- Tuple
StorageKey—Map<(Address, Address), u128>composite keys safe_add/safe_sub/safe_mulchecked arithmetic returningContractErrorResponse::with_action(),add_address(),add_u128()builder methodsevent!macro for concise event constructionItem::init()/Map::init()panicking save for initializationItem::update_or()/Map::update_or()update with defaultResponse::merge()for stdlib composability- Test address constants:
ALICE,BOB,CHARLIE,DAVE assert_data::<T>()andassert_err_contains()test helpers
#[norn_contract]proc macro — eliminates ~60% of boilerplate- Direct method calls in tests (
counter.increment(&ctx)) - Typed init params via proc macro
norn-sdk-macroscrate
- Typed
InitMsg—type Init = MyInitMsgfor constructor parameters - Structured events —
Event::new("Transfer").add_attribute("from", hex) - Standard library —
Ownable,Pausable,Norn20(ERC20-equivalent) composable modules IndexedMap— iterable map withkeys(),range(),len()
Contracttrait now requirestype Initassociated type and second param onfn init()
Item<T>/Map<K, V>type-safe storage primitivesResponsebuilder pattern for contract return valuesensure!,ensure_eq!,ensure_ne!guard macrosTestEnvnative test harness (no Wasm needed for testing)
ContractResultchanged fromResult<Vec<u8>, ContractError>toResult<Response, ContractError>
- Loom Phase 2 — full smart contract execution with
norn-sdk norn_uploadLoomBytecode,norn_executeLoom,norn_queryLoom,norn_joinLoom,norn_leaveLoomRPC methods- Counter contract example (
examples/counter/) - 5 new wallet commands:
upload-bytecode,execute-loom,query-loom,join-loom,leave-loom
- Loom Phase 1 — smart contract registration and deployment
LoomRegistrationinWeaveBlockwith P2P propagationnorn_deployLoom,norn_getLoomInfo,norn_listLoomsRPC methods- 3 new wallet commands:
deploy-loom,loom-info,list-looms
- PROTOCOL_VERSION 5 → 6, SCHEMA_VERSION 4 → 5 (breaking)
- NT-1 fungible token system — create, mint, burn custom tokens
- Token operations in
WeaveBlockwith P2P propagation - 6 new RPC endpoints for token management
- 5 new wallet commands:
create-token,mint-token,burn-token,token-info,list-tokens - Token symbol resolution in CLI (
--token MTK) (v0.8.1) token-balancescommand for all non-zero holdings (v0.8.1)- comfy-table formatted CLI output (v0.8.2)
- PROTOCOL_VERSION 4 → 5, SCHEMA_VERSION 3 → 4 (breaking)
- Consensus-level NornNames with P2P propagation via blocks
- Rolling upgrade system with envelope protocol and dual-decode codec
- mDNS auto-discovery and
--boot-nodeCLI flag - Default bootstrap node with DNS transport
- PROTOCOL_VERSION 1 → 2 (NornNames wire format)
- SCHEMA_VERSION 1 → 2 (WeaveBlock schema change)
- Persistent storage with RocksDB backend and automatic state rebuild on restart
- Multi-node P2P devnet with peer discovery and state sync
- Production-ready CLI with network identity (
dev/testnet/mainnet), token economics, andcargo installsupport - Full codebase audit (WS1-WS8): wired consensus message routing, spindle watchtower, fee collection, fraud proof submission RPC, Prometheus metrics endpoint, RPC auth middleware
- Devnet genesis with founder allocation (10M NORN to Augmnt founder address)
- P2P genesis hash validation to prevent cross-network state sync
- Secured founder wallet — replaced public seed with private keypair stored in encrypted local keystore
- 4 new wallet commands:
node-info,fees,validators,whoami(20 → 24 total);sendalias fortransfer - 488 tests (up from 430+), 21 RPC endpoints, 24 wallet subcommands
- RPC API key authentication via tower HTTP middleware
- Founder keypair stored in encrypted local keystore (no public seed exposure)
- Genesis hash validation prevents connecting to wrong network
- NornNames native name registry (register, resolve, list owned names)
- P2P relay with state sync via libp2p request-response
- Fully functional CLI with StateManager, real RPC endpoints, and
--devmode - CLI startup banner (ANSI Shadow "NORN" art)
- 3 new wallet subcommands:
register-name,resolve,names(17 → 20 total)
- norn-types: Shared type definitions for Thread, Knot, Weave, Loom, consensus, fraud proof, genesis, and network message types
- norn-crypto: Ed25519 signatures, BLAKE3 hashing, Merkle trees, BIP-39 mnemonics, SLIP-0010 HD derivation, XChaCha20-Poly1305 encryption, Shamir's Secret Sharing
- norn-thread: Thread chain management, Knot creation and validation, state tracking, version management
- norn-storage: KvStore trait abstraction with memory, SQLite, and RocksDB backends; Merkle, Thread, and Weave stores
- norn-relay: P2P networking via libp2p with gossipsub, protocol codec, peer discovery, relay service, Spindle registry
- norn-weave: Anchor chain with block production, commitment processing, HotStuff BFT consensus, dynamic EIP-1559-style fees, fraud proof verification, staking
- norn-loom: Off-chain smart contract runtime with WebAssembly (Wasmtime), host functions, gas metering, Loom lifecycle, dispute resolution
- norn-spindle: Watchtower service with thread monitoring, fraud proof construction, rate limiting, service orchestration
- norn-node: Full node binary with CLI, JSON-RPC server (jsonrpsee), wallet CLI (24 subcommands), Prometheus metrics, genesis handling
- Wallet keystore with Argon2id KDF (per-wallet random salt), XChaCha20-Poly1305 authenticated encryption, and backward-compatible v1/v2 support
- Testnet faucet endpoint (feature-gated behind
testnetfeature, enabled by default) - Protocol Specification v2.0 (2150+ lines) and White Paper (856 lines)
- CI pipeline with build, test, clippy, and format checks
- 430+ tests including end-to-end, wallet, regression, Shamir, consensus, and validation tests
- Wallet keystore v3 with per-wallet random salt (replaces fixed salt in v2)
- Faucet endpoint gated behind
#[cfg(feature = "testnet")]compile-time flag - Zero
unsafeblocks across the entire codebase