No description
Add readExtraAliasEntryOld (tag 20) and readExtraAliasEntry (tag 33) wire readers so the node can deserialise blocks containing alias registrations. Without these readers, mainnet sync would fail on any block with an alias transaction. Three round-trip tests validate the new readers. Also apply AX-2 (comments as usage examples) across 12 files: add concrete usage-example comments to exported functions in config/, types/, wire/, chain/, difficulty/, and consensus/. Fix stale doc in consensus/doc.go that incorrectly referenced *config.ChainConfig. Co-Authored-By: Virgil <virgil@lethean.io> |
||
|---|---|---|
| .core | ||
| .forgejo/workflows | ||
| chain | ||
| cmd/core-chain | ||
| config | ||
| consensus | ||
| crypto | ||
| difficulty | ||
| docs | ||
| mining | ||
| p2p | ||
| rpc | ||
| testdata | ||
| tui | ||
| types | ||
| wallet | ||
| wire | ||
| .gitignore | ||
| chain_commands.go | ||
| CLAUDE.md | ||
| commands_test.go | ||
| explorer_command.go | ||
| go.mod | ||
| go.sum | ||
| README.md | ||
| sync_command.go | ||
| sync_loop.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: 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
- 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.