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>
Replace all fmt.Errorf and errors.New in production code with
coreerr.E("Caller.Method", "message", err) from go-log. Replace
os.MkdirAll with coreio.Local.EnsureDir from go-io. Sentinel errors
(consensus/errors.go, wire/varint.go) intentionally kept as errors.New
for errors.Is compatibility.
270 error call sites converted across 38 files. Test files untouched.
crypto/ directory (CGO) untouched.
Co-Authored-By: Virgil <virgil@lethean.io>
Performs handshake, REQUEST_CHAIN with genesis hash, reads
RESPONSE_CHAIN_ENTRY, then REQUEST_GET_OBJECTS with the first block
hash and verifies RESPONSE_GET_OBJECTS returns a non-empty block blob.
Also fixes the existing handshake test return code check — the C++
daemon handler returns 1 (not 0) on success.
Co-Authored-By: Charon <charon@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>
Encode/decode for NOTIFY_REQUEST_GET_OBJECTS (2003) and
NOTIFY_RESPONSE_GET_OBJECTS (2004), including BlockCompleteEntry
for block + transaction blob pairs.
Co-Authored-By: Charon <charon@lethean.io>