Skip to content

Releases: LucienSong/shell-chain

v0.20.0 — wPoA Testnet Launch

27 Apr 01:21

Choose a tag to compare

Shell-Chain v0.20.0 — wPoA Testnet Launch

This release activates the Weighted Proof of Authority (wPoA) consensus engine and launches the public testnet (chain_id=10).

Highlights

  • wPoA consensus engine (W.1–W.7): Full production activation with weighted quorum ⌈2/3 × total_weight⌉, view-change protocol, 8 e2e tests
  • shell_consensusInfo RPC (W.6): Live validator set + weights via JSON-RPC
  • Two-layer peer scoring bridge (PS.1+PS.2): wPoA vote quality → network-level ban list (3 violations → 5-min ban)
  • wPoA testnet genesis (T.1): chain_id=10, 3 validators, example file at examples/genesis-testnet-wpoa.json
  • Testnet infra (T.2+T.7): infra/testnet/ docker-compose, Prometheus + Grafana dashboards
  • RPC doc autogen (R.1–R.3): 75 methods, 7 namespaces, CI drift check

Network Parameters

Parameter Value
Chain ID 10
Engine wPoA
Block time ~2s
RPC https://rpc.testnet.shell.network

Breaking Changes

None — PoA genesis files continue to work unchanged.

Upgrading

git pull && cargo build --release -p shell-cli

For testnet deployment see infra/testnet/README.md.

v0.17.0

23 Apr 01:27

Choose a tag to compare

shell-chain v0.17.0

This release keeps the chain on v0.17.0 while closing the post-release sdk and wallet integration gaps.

Highlights:

  • reject ambiguous SignedTransaction JSON payloads that mix sender_pubkey with pubkey_mode
  • accept shell-sdk's current ML-DSA-65-produced Dilithium3 signatures as a compatibility fallback
  • align shell_getNodeInfo and shell_getWitness with sdk/wallet typed contracts
  • fix shell_getTransactionsByAddress.total to report the full match count
  • add crypto, RPC, and receipt-visible e2e regressions for the sdk compatibility path

v0.16.0 — M14: Storage Profile Node Classification

20 Apr 12:01
8479cdd

Choose a tag to compare

What's New

Added

  • --storage-profile <archive|full|light> — single flag replaces --body-retention / --witness-retention as the primary storage UX.

    Profile TX bodies PQ witnesses State roots ~Daily write
    archive forever forever forever ~12.8 GB/day
    full (default) forever 128 blocks forever ~1.5 GB/day
    light 4096 blocks (~2.3 h) 64 blocks 4096 blocks ~1 GB fixed
  • StorageProfile enum with to_pruning_config() / from_pruning_config() / impl FromStr.

  • StorageCapability P2P message — nodes advertise data-retention level on connect and startup.

  • BodyRequest / BodyResponse P2P messages for historical body back-fill (128-block batches).

  • HistoricalBodySync — automatic body back-fill on profile upgrade (e.g. light → full).

  • NetworkTopic enum + NetworkMessage::topic() for safe libp2p message routing.

  • ChainStore::has_body() and ChainStore::put_body_only() for selective body restore.

  • Node::oldest_available_body_block() binary-search helper.

  • Docker compose updated: node1=archive, node2/node3=full.

  • New docs: BLOCK_PRUNING_AND_COMPRESSION.md storage profiles section.

Changed

  • --body-retention / --witness-retention are now Option<u64> overrides; profile defaults apply when omitted.
  • proof_replacement_grace is now profile-driven (0 for full/light, u64::MAX for archive).
  • Node startup banner now shows active profile name and actual retention values.
  • --pruning 0 (default) defers keep_recent to the profile default (light auto-sets 4096).

Bug Fixes (post-review)

  • Fixed BodyResponse hash validation before storage (prevent malicious peer disk writes).
  • Fixed sync stall when all batch hashes mismatch — first_gap tracking re-requests from first missing block.
  • Fixed from_pruning_config() Full detection (was incorrectly matching some Light configs).
  • Fixed banner profile classification to use from_pruning_config() consistently.
  • BodyRequest handler warns about broadcast amplification (unicast API tracked as TODO).

Full Changelog

https://github.com/LucienSong/shell-chain/blob/main/CHANGELOG.md