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>
53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
// Copyright (c) 2017-2026 Lethean (https://lt.hn)
|
|
//
|
|
// Licensed under the European Union Public Licence (EUPL) version 1.2.
|
|
// SPDX-License-Identifier: EUPL-1.2
|
|
|
|
// Package chain stores and indexes the Lethean blockchain by syncing from
|
|
// a C++ daemon via RPC.
|
|
package chain
|
|
|
|
import (
|
|
"dappco.re/go/core/blockchain/types"
|
|
coreerr "dappco.re/go/core/log"
|
|
store "dappco.re/go/core/store"
|
|
)
|
|
|
|
// Chain manages blockchain storage and indexing.
|
|
type Chain struct {
|
|
store *store.Store
|
|
}
|
|
|
|
// New creates a Chain backed by the given store.
|
|
//
|
|
// s, _ := store.New("~/.lethean/chain/chain.db")
|
|
// blockchain := chain.New(s)
|
|
func New(s *store.Store) *Chain {
|
|
return &Chain{store: s}
|
|
}
|
|
|
|
// Height returns the number of stored blocks (0 if empty).
|
|
//
|
|
// h, err := blockchain.Height()
|
|
func (c *Chain) Height() (uint64, error) {
|
|
n, err := c.store.Count(groupBlocks)
|
|
if err != nil {
|
|
return 0, coreerr.E("Chain.Height", "chain: height", err)
|
|
}
|
|
return uint64(n), nil
|
|
}
|
|
|
|
// TopBlock returns the highest stored block and its metadata.
|
|
// Returns an error if the chain is empty.
|
|
//
|
|
// blk, meta, err := blockchain.TopBlock()
|
|
func (c *Chain) TopBlock() (*types.Block, *BlockMeta, error) {
|
|
h, err := c.Height()
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
if h == 0 {
|
|
return nil, nil, coreerr.E("Chain.TopBlock", "chain: no blocks stored", nil)
|
|
}
|
|
return c.GetBlockByHeight(h - 1)
|
|
}
|