docs: Phase 5 chain storage and sync client documentation

Co-Authored-By: Charon <charon@lethean.io>
This commit is contained in:
Claude 2026-02-20 21:56:05 +00:00
parent ef4edd669a
commit c2e6b165e7
No known key found for this signature in database
GPG key ID: AF404715446AEB41
2 changed files with 58 additions and 4 deletions

View file

@ -19,6 +19,7 @@ difficulty/ PoW + PoS difficulty adjustment (LWMA variant)
crypto/ CGo bridge to vendored C++ libcryptonote (keys, signatures, proofs)
p2p/ CryptoNote P2P command types (handshake, sync, relay)
rpc/ Daemon JSON-RPC 2.0 client (10 endpoints)
chain/ Chain storage, indexing, and sync client (go-store backed)
```
### config/
@ -144,6 +145,36 @@ rather than `MAP_JON_RPC`.
daemon on `localhost:46941`. Verifies genesis block hash matches Phase 1
result (`cb9d5455...`).
### chain/
Stores and indexes the Lethean blockchain by syncing from a C++ daemon via RPC.
Uses go-store (pure-Go SQLite) for persistence with five storage groups mapping
to the C++ daemon's core containers.
**Storage schema:**
- `blocks` -- blocks by height (zero-padded key), JSON metadata + hex blob.
- `block_index` -- hash-to-height reverse index.
- `transactions` -- tx hash to JSON metadata + hex blob.
- `spent_keys` -- key image to block height (double-spend index).
- `outputs:{amount}` -- global output index per amount.
**Core operations:**
- `chain.go` -- `Chain` struct with `New()`, `Height()`, `TopBlock()`.
- `store.go` -- `PutBlock`, `GetBlockByHeight/Hash`, `PutTransaction`,
`GetTransaction`, `HasTransaction`.
- `index.go` -- `MarkSpent`, `IsSpent`, `PutOutput`, `GetOutput`, `OutputCount`.
- `validate.go` -- Header validation (previous block linkage, height sequence,
block size).
- `sync.go` -- `Sync(client)` blocking RPC poll loop. Fetches blocks in batches
of 10, decodes wire blobs, validates headers, indexes transactions/outputs/
key images, verifies block hashes.
**Testing:**
- Unit tests with go-store `:memory:` for all CRUD operations and validation.
- Mock RPC server sync tests.
- Build-tagged integration test (`//go:build integration`) syncing first 10
blocks from C++ testnet daemon on `localhost:46941`.
---
## Key Types

View file

@ -345,11 +345,34 @@ All passing with `-race` and `go vet`.
field outside the JSON-RPC result envelope. The client checks this after
successful JSON-RPC decode and returns an error for non-OK status values.
## Phase 5 -- Chain Storage and Validation (Planned)
## Phase 5 -- Chain Storage and Sync Client
Implement `chain/` with blockchain storage (using `go-store` for persistence),
block validation, transaction verification, and mempool management. UTXO set
tracking with output index.
Commit range: `8cb5cb4`..`23d337e`
Added `chain/` package implementing blockchain storage and RPC sync client.
Uses go-store (pure-Go SQLite) as the persistence backend with five storage
groups mapping to the C++ daemon's core containers.
**Files added:**
- `chain/meta.go` -- `BlockMeta`, `TxMeta`, `outputEntry` types
- `chain/chain.go` -- `Chain` struct, `New()`, `Height()`, `TopBlock()`
- `chain/store.go` -- Block and transaction storage/retrieval
- `chain/index.go` -- Key image and output index operations
- `chain/validate.go` -- Header validation (linkage, height, size)
- `chain/sync.go` -- RPC sync loop with block processing and indexing
- `chain/chain_test.go` -- Storage round-trip tests (6 tests)
- `chain/validate_test.go` -- Validation tests (5 tests)
- `chain/sync_test.go` -- Sync loop tests with mock RPC (2 tests)
- `chain/integration_test.go` -- C++ testnet integration test
**Storage schema:**
- `blocks` -- by height (zero-padded), JSON meta + hex blob
- `block_index` -- hash to height
- `transactions` -- tx hash to meta + blob
- `spent_keys` -- key image to height
- `outputs:{amount}` -- per-amount global output index
**Dependencies added:** `forge.lthn.ai/core/go-store` (local replace).
## Phase 6 -- Wallet Core (Planned)