No description
Find a file
Virgil 21c5d49ef9
Some checks are pending
Security Scan / security (push) Waiting to run
Test / Test (push) Waiting to run
fix(sync): validate peers and persist HTLC spends
Centralise handshake response validation so outbound sync checks both network identity and minimum peer build version through the p2p layer. Also record HTLC key images as spent during block processing, matching the HF1 input semantics and preventing those spends from being omitted from chain state.

Co-Authored-By: Charon <charon@lethean.io>
2026-04-04 19:01:07 +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(sync): validate peers and persist HTLC spends 2026-04-04 19:01:07 +00:00
cmd/core-chain refactor: migrate module path to dappco.re/go/core/blockchain 2026-03-22 01:49:26 +00:00
config feat(config): add HardforkActivationHeight helper 2026-03-16 20:51:54 +00:00
consensus feat(consensus): enforce block version in chain sync 2026-04-04 18:56:36 +00:00
crypto feat(crypto): add generic double-Schnorr bridge 2026-04-04 18:26:33 +00:00
difficulty refactor: migrate module path to dappco.re/go/core/blockchain 2026-03-22 01:49:26 +00:00
docs refactor: migrate module path to dappco.re/go/core/blockchain 2026-03-22 01:49:26 +00:00
mining refactor: migrate module path to dappco.re/go/core/blockchain 2026-03-22 01:49:26 +00:00
p2p fix(sync): validate peers and persist HTLC spends 2026-04-04 19:01:07 +00:00
rpc refactor: migrate module path to dappco.re/go/core/blockchain 2026-03-22 01:49:26 +00:00
testdata feat(consensus): V2 Zarcanum signature and proof verification 2026-02-22 00:06:10 +00:00
tui refactor: migrate module path to dappco.re/go/core/blockchain 2026-03-22 01:49:26 +00:00
types feat(consensus): enforce hf5 tx version and add asset descriptors 2026-04-04 18:34:49 +00:00
wallet refactor: migrate module path to dappco.re/go/core/blockchain 2026-03-22 01:49:26 +00:00
wire refactor: migrate module path to dappco.re/go/core/blockchain 2026-03-22 01:49:26 +00:00
.gitignore refactor: migrate module path to dappco.re/go/core/blockchain 2026-03-22 01:49:26 +00:00
chain_commands.go refactor(blockchain): spell out command sync names 2026-04-04 04:18:37 +00:00
CLAUDE.md refactor: migrate module path to dappco.re/go/core/blockchain 2026-03-22 01:49:26 +00:00
commands_test.go feat: modernise CLI — AddChainCommands, explorer/sync subcommands, core-chain binary 2026-03-09 16:21:42 +00:00
explorer_command.go refactor(blockchain): spell out command sync names 2026-04-04 04:18:37 +00:00
go.mod refactor: migrate module path to dappco.re/go/core/blockchain 2026-03-22 01:49:26 +00:00
go.sum refactor: migrate module path to dappco.re/go/core/blockchain 2026-03-22 01:49:26 +00:00
README.md refactor: migrate module path to dappco.re/go/core/blockchain 2026-03-22 01:49:26 +00:00
sync_command.go refactor(blockchain): spell out command sync names 2026-04-04 04:18:37 +00:00
sync_loop.go fix(sync): validate peers and persist HTLC spends 2026-04-04 19:01:07 +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: dappco.re/go/core/blockchain Licence: EUPL-1.2 Language: Go 1.25

Quick Start

import (
    "dappco.re/go/core/blockchain/config"
    "dappco.re/go/core/blockchain/types"
    "dappco.re/go/core/blockchain/wire"
    "dappco.re/go/core/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.