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>
Update go.mod module line, all require/replace directives, and every
.go import path from forge.lthn.ai/core/go-blockchain to
dappco.re/go/core/blockchain. Add replace directives to bridge
dappco.re paths to existing forge.lthn.ai registry during migration.
Update CLAUDE.md, README, and docs to reflect the new module path.
Co-Authored-By: Virgil <virgil@lethean.io>
Three bugs found by integration testing against the C++ testnet daemon:
1. NetworkIDMainnet/Testnet had byte 10 swapped — the C++ #ifndef TESTNET
branch (mainnet) sets P2P_NETWORK_ID_TESTNET_FLAG=1, and the #else
(testnet) sets it to 0. Counter-intuitive but matches compiled binaries.
2. ClientVersion format "Lethean/go-blockchain 0.1.0" was rejected by the
daemon's parse_client_version which expects "major.minor.rev.build[commit]".
Changed to "6.0.1.2[go-blockchain]".
3. RequestChain, RequestGetObjects, and ResponseGetObjects used StringArrayVal
for hash fields, but the C++ daemon uses KV_SERIALIZE_CONTAINER_POD_AS_BLOB
which packs all 32-byte hashes into a single concatenated blob. Also,
ResponseChainEntry.m_block_ids is an object array of block_context_info
(hash + cumulative size), not a simple hash list.
Co-Authored-By: Charon <charon@lethean.io>