No description
Find a file
Claude 6a3f8829cb
feat(wire): Phase 1 wire serialisation — bit-identical to C++ daemon
Add consensus-critical binary serialisation for blocks and transactions,
verified by computing the testnet genesis block hash and matching the C++
daemon output (cb9d5455...4963). Fixes Phase 0 type mismatches (variant
tags, field widths, missing fields) and adds encoder/decoder, tree hash,
and block/transaction hashing.

Key discovery: CryptoNote's get_object_hash(blobdata) prepends
varint(length) before hashing, so BlockHash = Keccak256(varint(len) || blob).

Co-Authored-By: Charon <charon@lethean.io>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 17:16:08 +00:00
config feat: Phase 0 scaffold -- config, types, wire, difficulty 2026-02-20 15:10:33 +00:00
difficulty feat: Phase 0 scaffold -- config, types, wire, difficulty 2026-02-20 15:10:33 +00:00
docs feat(wire): Phase 1 wire serialisation — bit-identical to C++ daemon 2026-02-20 17:16:08 +00:00
types feat(wire): Phase 1 wire serialisation — bit-identical to C++ daemon 2026-02-20 17:16:08 +00:00
wire feat(wire): Phase 1 wire serialisation — bit-identical to C++ daemon 2026-02-20 17:16:08 +00:00
CLAUDE.md docs: graduate Phase 0 into production documentation 2026-02-20 15:24:38 +00:00
go.mod feat: Phase 0 scaffold -- config, types, wire, difficulty 2026-02-20 15:10:33 +00:00
go.sum feat: Phase 0 scaffold -- config, types, wire, difficulty 2026-02-20 15:10:33 +00:00
README.md docs: graduate Phase 0 into production documentation 2026-02-20 15:24:38 +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.