mirror of
https://github.com/luxfi/node.git
synced 2026-10-30 15:24:05 +00:00
The module already called itself github.com/luxfi/node while containing no node in Go: cmd/luxd was twenty-one lines that printed the size of a few types, and the Go column of the matrix measured a VM plugin. A repo that fetches the thing it claims to be has not replaced it, so the Go sources move in — 1515 files, the daemon and everything under it — and the build reaches outside this module for nothing. Rust and C++ sit beside it unchanged and are still measured against it by the differential. That is the point of one repo: the reference implementation and the two ports are the same checkout, so parity is a thing you can run rather than a thing you assert. Verified: builds, and the closure carries no lux-private — checked at build time rather than believed. The daemon starts twelve chains on a local network (P X C Q Z A B G K M F, plus D through its plugin) and reports healthy.
62 lines
1.4 KiB
Go
62 lines
1.4 KiB
Go
// Copyright (C) 2019-2025, Lux Industries Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package archivedb
|
|
|
|
import "github.com/luxfi/database"
|
|
|
|
var _ database.KeyValueReader = (*Reader)(nil)
|
|
|
|
type Reader struct {
|
|
db *Database
|
|
height uint64
|
|
}
|
|
|
|
func (r *Reader) Has(key []byte) (bool, error) {
|
|
_, err := r.Get(key)
|
|
if err == database.ErrNotFound {
|
|
return false, nil
|
|
}
|
|
return true, err
|
|
}
|
|
|
|
func (r *Reader) Get(key []byte) ([]byte, error) {
|
|
value, _, exists, err := r.GetEntry(key)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if exists {
|
|
return value, nil
|
|
}
|
|
return value, database.ErrNotFound
|
|
}
|
|
|
|
// GetEntry retrieves the value of the provided key, the height it was last
|
|
// modified at, and a boolean to indicate if the last modification was an
|
|
// insertion. If the key has never been modified, ErrNotFound will be returned.
|
|
func (r *Reader) GetEntry(key []byte) ([]byte, uint64, bool, error) {
|
|
it := r.db.db.NewIteratorWithStartAndPrefix(newDBKeyFromUser(key, r.height))
|
|
defer it.Release()
|
|
|
|
next := it.Next()
|
|
if err := it.Error(); err != nil {
|
|
return nil, 0, false, err
|
|
}
|
|
|
|
// There is no available key with the requested prefix
|
|
if !next {
|
|
return nil, 0, false, database.ErrNotFound
|
|
}
|
|
|
|
_, height, err := parseDBKeyFromUser(it.Key())
|
|
if err != nil {
|
|
return nil, 0, false, err
|
|
}
|
|
|
|
value, exists := parseDBValue(it.Value())
|
|
if !exists {
|
|
return nil, height, false, nil
|
|
}
|
|
return value, height, true, nil
|
|
}
|