Releases: LucienSong/shell-chain
v0.20.0 — wPoA Testnet Launch
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_consensusInfoRPC (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-cliFor testnet deployment see infra/testnet/README.md.
v0.17.0
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
What's New
Added
-
--storage-profile <archive|full|light>— single flag replaces--body-retention/--witness-retentionas the primary storage UX.Profile TX bodies PQ witnesses State roots ~Daily write archiveforever forever forever ~12.8 GB/day full(default)forever 128 blocks forever ~1.5 GB/day light4096 blocks (~2.3 h) 64 blocks 4096 blocks ~1 GB fixed -
StorageProfileenum withto_pruning_config()/from_pruning_config()/impl FromStr. -
StorageCapabilityP2P message — nodes advertise data-retention level on connect and startup. -
BodyRequest/BodyResponseP2P messages for historical body back-fill (128-block batches). -
HistoricalBodySync— automatic body back-fill on profile upgrade (e.g.light → full). -
NetworkTopicenum +NetworkMessage::topic()for safe libp2p message routing. -
ChainStore::has_body()andChainStore::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.mdstorage profiles section.
Changed
--body-retention/--witness-retentionare nowOption<u64>overrides; profile defaults apply when omitted.proof_replacement_graceis 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) deferskeep_recentto 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_gaptracking 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