No description
The 240s PoW target was incorrectly gated on HF2 (block 10,080), matching the Zano upstream where HF2 coincides with the difficulty target change. Lethean mainnet uses 120s blocks between HF2 and HF6 (999,999,999), so the gate is corrected to HF6. Also adds NextPoSDifficulty with the same HF6 gate using the PoS target constants (DifficultyPosTarget / DifficultyPosTargetHF6). Both public methods delegate to a shared nextDifficultyWith helper to avoid duplicating the LWMA window logic. Co-Authored-By: Charon <charon@lethean.io> |
||
|---|---|---|
| .core | ||
| .forgejo/workflows | ||
| chain | ||
| cmd/core-chain | ||
| config | ||
| consensus | ||
| crypto | ||
| difficulty | ||
| docs | ||
| mining | ||
| p2p | ||
| rpc | ||
| testdata | ||
| tui | ||
| types | ||
| wallet | ||
| wire | ||
| .gitignore | ||
| CLAUDE.md | ||
| cmd_explorer.go | ||
| cmd_sync.go | ||
| commands.go | ||
| commands_test.go | ||
| go.mod | ||
| go.sum | ||
| README.md | ||
| sync_service.go | ||
go-blockchain
Pure Go implementation of the Lethean blockchain protocol. Provides chain configuration, core cryptographic data types, CryptoNote wire serialisation, and LWMA difficulty adjustment for the Lethean CryptoNote/Zano-fork chain. Follows ADR-001: protocol logic in Go, cryptographic primitives deferred to a C++ bridge in later phases. Lineage: CryptoNote to IntenseCoin (2017) to Lethean to Zano rebase.
Module: forge.lthn.ai/core/go-blockchain
Licence: EUPL-1.2
Language: Go 1.25
Quick Start
import (
"forge.lthn.ai/core/go-blockchain/config"
"forge.lthn.ai/core/go-blockchain/types"
"forge.lthn.ai/core/go-blockchain/wire"
"forge.lthn.ai/core/go-blockchain/difficulty"
)
// Query the active hardfork version at a given block height
version := config.VersionAtHeight(config.MainnetForks, 10081) // returns HF2
// Check if a specific hardfork is active
active := config.IsHardForkActive(config.MainnetForks, config.HF4Zarcanum, 50000) // false
// Encode and decode a Lethean address
addr := &types.Address{SpendPublicKey: spendKey, ViewPublicKey: viewKey}
encoded := addr.Encode(config.AddressPrefix)
decoded, prefix, err := types.DecodeAddress(encoded)
// Varint encoding for the wire protocol
buf := wire.EncodeVarint(0x1eaf7)
val, n, err := wire.DecodeVarint(buf)
// Calculate next block difficulty
nextDiff := difficulty.NextDifficulty(timestamps, cumulativeDiffs, 120)
Documentation
- Architecture -- package structure, key types, design decisions, ADR-001
- Development Guide -- prerequisites, test patterns, coding standards
- Project History -- completed phases with commit hashes, known limitations
Build & Test
go test ./...
go test -race ./...
go vet ./...
go build ./...
Licence
European Union Public Licence 1.2 -- see LICENCE for details.