go-blockchain/chain
Claude 3c76dd7070
fix(difficulty): correct LWMA algorithm and hardfork-aware target
Rewrites the LWMA difficulty algorithm to match the C++ daemon exactly:
- Uses N=60 window with linear weighting (position 1..n)
- Clamps solve times to [-6T, 6T]
- Excludes genesis block from the difficulty window
- Selects target based on hardfork: 120s pre-HF2, 240s post-HF2

On testnet, HF2 activates at height 10 (active from height 11),
doubling the target from 120s to 240s. The previous fixed 120s target
produced exactly half the expected difficulty from height 11 onward.

Integration test verifies all 2576 testnet blocks match the daemon.

Co-Authored-By: Charon <charon@lethean.io>
2026-02-21 22:32:57 +00:00
..
chain.go feat(chain): Chain struct with block storage and retrieval 2026-02-20 21:44:57 +00:00
chain_test.go test(chain): boost coverage to >80% with multi-block sync and error paths 2026-02-20 22:02:10 +00:00
difficulty.go fix(difficulty): correct LWMA algorithm and hardfork-aware target 2026-02-21 22:32:57 +00:00
difficulty_test.go fix(difficulty): correct LWMA algorithm and hardfork-aware target 2026-02-21 22:32:57 +00:00
history.go fix(chain): use genesis hash in sparse history for empty chain 2026-02-21 21:31:55 +00:00
history_test.go fix(chain): use genesis hash in sparse history for empty chain 2026-02-21 21:31:55 +00:00
index.go feat(chain): transaction, key image, and output index operations 2026-02-20 21:49:15 +00:00
integration_test.go fix(difficulty): correct LWMA algorithm and hardfork-aware target 2026-02-21 22:32:57 +00:00
levinconn.go feat(chain): add Levin P2P connection adapter and sync integration test 2026-02-21 21:32:05 +00:00
meta.go feat(chain): go-store dependency and metadata types 2026-02-20 21:42:22 +00:00
p2psync.go fix(difficulty): correct LWMA algorithm and hardfork-aware target 2026-02-21 22:32:57 +00:00
p2psync_test.go feat(chain): add P2P sync state machine 2026-02-21 21:00:57 +00:00
ring.go feat(chain): add GetRingOutputs callback for signature verification 2026-02-21 20:28:54 +00:00
ring_test.go feat(chain): add GetRingOutputs callback for signature verification 2026-02-21 20:28:54 +00:00
store.go feat(chain): add NextDifficulty for local LWMA computation 2026-02-21 22:03:28 +00:00
sync.go refactor(chain): extract processBlockBlobs for shared RPC/P2P use 2026-02-21 20:50:36 +00:00
sync_test.go fix(chain): mark ZC input key images as spent during sync 2026-02-21 20:36:00 +00:00
validate.go feat(chain): block header validation (linkage, height, size) 2026-02-20 21:50:12 +00:00
validate_test.go feat(chain): block header validation (linkage, height, size) 2026-02-20 21:50:12 +00:00