No description
Find a file
Claude 18ceb7fa26
Some checks failed
Security Scan / security (push) Successful in 8s
Test / Test (push) Failing after 20s
fix(chain): gate difficulty target switch on HF6, not HF2
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>
2026-03-16 20:47:56 +00:00
.core chore: add .core/build.yaml for core-chain binary 2026-03-09 16:24:05 +00:00
.forgejo/workflows ci: add Forgejo Actions test and security scan workflows 2026-02-23 03:28:02 +00:00
chain fix(chain): gate difficulty target switch on HF6, not HF2 2026-03-16 20:47:56 +00:00
cmd/core-chain fix: remove accidentally re-added cmd/chain/main.go 2026-03-09 16:27:35 +00:00
config feat(config): add BlockTarget constant (120s) 2026-02-21 21:59:41 +00:00
consensus feat(consensus): add ErrBlockVersion alias and comprehensive block version tests 2026-03-16 20:47:47 +00:00
crypto chore: fmt.Errorf(static) → errors.New 2026-02-24 16:11:27 +00:00
difficulty fix(difficulty): correct LWMA algorithm and hardfork-aware target 2026-02-21 22:32:57 +00:00
docs docs: HF5 confidential assets implementation plan 2026-03-16 20:25:56 +00:00
mining test(mining): integration test against C++ testnet daemon 2026-02-21 02:20:05 +00:00
p2p chore: use range-over-integer (Go 1.22+) 2026-02-24 16:14:08 +00:00
rpc fix(difficulty): correct LWMA algorithm and hardfork-aware target 2026-02-21 22:32:57 +00:00
testdata feat(consensus): V2 Zarcanum signature and proof verification 2026-02-22 00:06:10 +00:00
tui refactor(types): change TxOutputBare.Target to TxOutTarget interface 2026-03-16 20:23:27 +00:00
types feat(types): add TxInputHTLC and TxInputMultisig input types 2026-03-16 20:27:49 +00:00
wallet refactor(types): change TxOutputBare.Target to TxOutTarget interface 2026-03-16 20:23:27 +00:00
wire test(wire): add HF1 mixed transaction round-trip integration test 2026-03-16 20:41:28 +00:00
.gitignore chore: add .core/ and .idea/ to .gitignore 2026-03-15 10:17:49 +00:00
CLAUDE.md docs: add CLAUDE.md project instructions 2026-03-13 13:38:01 +00:00
cmd_explorer.go fix: code review fixes — log.Fatalf, goroutine lifecycle, stale doc 2026-03-09 16:27:21 +00:00
cmd_sync.go fix: wait for syncLoop goroutine before closing store in daemon mode 2026-03-09 16:23:36 +00:00
commands.go fix: code review fixes — log.Fatalf, goroutine lifecycle, stale doc 2026-03-09 16:27:21 +00:00
commands_test.go feat: modernise CLI — AddChainCommands, explorer/sync subcommands, core-chain binary 2026-03-09 16:21:42 +00:00
go.mod chore: sync go.mod dependencies 2026-03-15 15:37:24 +00:00
go.sum chore: sync go.mod dependencies 2026-03-15 15:37:24 +00:00
README.md docs: graduate Phase 0 into production documentation 2026-02-20 15:24:38 +00:00
sync_service.go feat: modernise CLI — AddChainCommands, explorer/sync subcommands, core-chain binary 2026-03-09 16:21:42 +00:00

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

Build & Test

go test ./...
go test -race ./...
go vet ./...
go build ./...

Licence

European Union Public Licence 1.2 -- see LICENCE for details.