Documentation ¶
Overview ¶
Package merkledb is a generated GoMock package.
Index ¶
- Constants
- Variables
- type BranchFactor
- type ChangeOrRangeProof
- type ChangeProof
- type ChangeProofer
- type Config
- type KeyChange
- type KeyValue
- type MerkleDB
- type MerkleRootGetter
- type MockMerkleDB
- func (m *MockMerkleDB) Close() error
- func (m *MockMerkleDB) CommitChangeProof(arg0 context.Context, arg1 *ChangeProof) error
- func (m *MockMerkleDB) CommitRangeProof(arg0 context.Context, arg1, arg2 maybe.Maybe[[]uint8], arg3 *RangeProof) error
- func (m *MockMerkleDB) Compact(arg0, arg1 []byte) error
- func (m *MockMerkleDB) Delete(arg0 []byte) error
- func (m *MockMerkleDB) EXPECT() *MockMerkleDBMockRecorder
- func (m *MockMerkleDB) Get(arg0 []byte) ([]byte, error)
- func (m *MockMerkleDB) GetChangeProof(arg0 context.Context, arg1, arg2 ids.ID, arg3, arg4 maybe.Maybe[[]uint8], ...) (*ChangeProof, error)
- func (m *MockMerkleDB) GetMerkleRoot(arg0 context.Context) (ids.ID, error)
- func (m *MockMerkleDB) GetProof(arg0 context.Context, arg1 []byte) (*Proof, error)
- func (m *MockMerkleDB) GetRangeProof(arg0 context.Context, arg1, arg2 maybe.Maybe[[]uint8], arg3 int) (*RangeProof, error)
- func (m *MockMerkleDB) GetRangeProofAtRoot(arg0 context.Context, arg1 ids.ID, arg2, arg3 maybe.Maybe[[]uint8], arg4 int) (*RangeProof, error)
- func (m *MockMerkleDB) GetValue(arg0 context.Context, arg1 []byte) ([]byte, error)
- func (m *MockMerkleDB) GetValues(arg0 context.Context, arg1 [][]byte) ([][]byte, []error)
- func (m *MockMerkleDB) Has(arg0 []byte) (bool, error)
- func (m *MockMerkleDB) HealthCheck(arg0 context.Context) (interface{}, error)
- func (m *MockMerkleDB) NewBatch() database.Batch
- func (m *MockMerkleDB) NewIterator() database.Iterator
- func (m *MockMerkleDB) NewIteratorWithPrefix(arg0 []byte) database.Iterator
- func (m *MockMerkleDB) NewIteratorWithStart(arg0 []byte) database.Iterator
- func (m *MockMerkleDB) NewIteratorWithStartAndPrefix(arg0, arg1 []byte) database.Iterator
- func (m *MockMerkleDB) NewView(arg0 context.Context, arg1 ViewChanges) (TrieView, error)
- func (m *MockMerkleDB) Put(arg0, arg1 []byte) error
- func (m *MockMerkleDB) VerifyChangeProof(arg0 context.Context, arg1 *ChangeProof, arg2, arg3 maybe.Maybe[[]uint8], ...) error
- type MockMerkleDBMockRecorder
- func (mr *MockMerkleDBMockRecorder) Close() *gomock.Call
- func (mr *MockMerkleDBMockRecorder) CommitChangeProof(arg0, arg1 interface{}) *gomock.Call
- func (mr *MockMerkleDBMockRecorder) CommitRangeProof(arg0, arg1, arg2, arg3 interface{}) *gomock.Call
- func (mr *MockMerkleDBMockRecorder) Compact(arg0, arg1 interface{}) *gomock.Call
- func (mr *MockMerkleDBMockRecorder) Delete(arg0 interface{}) *gomock.Call
- func (mr *MockMerkleDBMockRecorder) Get(arg0 interface{}) *gomock.Call
- func (mr *MockMerkleDBMockRecorder) GetChangeProof(arg0, arg1, arg2, arg3, arg4, arg5 interface{}) *gomock.Call
- func (mr *MockMerkleDBMockRecorder) GetMerkleRoot(arg0 interface{}) *gomock.Call
- func (mr *MockMerkleDBMockRecorder) GetProof(arg0, arg1 interface{}) *gomock.Call
- func (mr *MockMerkleDBMockRecorder) GetRangeProof(arg0, arg1, arg2, arg3 interface{}) *gomock.Call
- func (mr *MockMerkleDBMockRecorder) GetRangeProofAtRoot(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call
- func (mr *MockMerkleDBMockRecorder) GetValue(arg0, arg1 interface{}) *gomock.Call
- func (mr *MockMerkleDBMockRecorder) GetValues(arg0, arg1 interface{}) *gomock.Call
- func (mr *MockMerkleDBMockRecorder) Has(arg0 interface{}) *gomock.Call
- func (mr *MockMerkleDBMockRecorder) HealthCheck(arg0 interface{}) *gomock.Call
- func (mr *MockMerkleDBMockRecorder) NewBatch() *gomock.Call
- func (mr *MockMerkleDBMockRecorder) NewIterator() *gomock.Call
- func (mr *MockMerkleDBMockRecorder) NewIteratorWithPrefix(arg0 interface{}) *gomock.Call
- func (mr *MockMerkleDBMockRecorder) NewIteratorWithStart(arg0 interface{}) *gomock.Call
- func (mr *MockMerkleDBMockRecorder) NewIteratorWithStartAndPrefix(arg0, arg1 interface{}) *gomock.Call
- func (mr *MockMerkleDBMockRecorder) NewView(arg0, arg1 interface{}) *gomock.Call
- func (mr *MockMerkleDBMockRecorder) Put(arg0, arg1 interface{}) *gomock.Call
- func (mr *MockMerkleDBMockRecorder) VerifyChangeProof(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call
- type Path
- func (p Path) Append(token byte) Path
- func (p Path) Bytes() []byte
- func (p Path) Extend(path Path) Path
- func (p Path) Greater(other Path) bool
- func (p Path) HasPrefix(prefix Path) bool
- func (p Path) HasStrictPrefix(prefix Path) bool
- func (p Path) Less(other Path) bool
- func (p Path) Skip(tokensToSkip int) Path
- func (p Path) Take(tokensToTake int) Path
- func (p Path) Token(index int) byte
- func (p Path) TokensLength() int
- type Proof
- type ProofGetter
- type ProofNode
- type RangeProof
- type RangeProofer
- type ReadOnlyTrie
- type TraceLevel
- type Trie
- type TrieView
- type ViewChanges
Constants ¶
const HashLength = 32
Variables ¶
var ( ErrInvalidProof = errors.New("proof obtained an invalid root ID") ErrInvalidMaxLength = errors.New("expected max length to be > 0") ErrNonIncreasingValues = errors.New("keys sent are not in increasing order") ErrStateFromOutsideOfRange = errors.New("state key falls outside of the start->end range") ErrNonIncreasingProofNodes = errors.New("each proof node key must be a strict prefix of the next") ErrExtraProofNodes = errors.New("extra proof nodes in path") ErrDataInMissingRootProof = errors.New("there should be no state or deleted keys in a change proof that had a missing root") ErrNoMerkleProof = errors.New("empty key response must include merkle proof") ErrShouldJustBeRoot = errors.New("end proof should only contain root") ErrNoStartProof = errors.New("no start proof") ErrNoEndProof = errors.New("no end proof") ErrNoProof = errors.New("proof has no nodes") ErrProofNodeNotForKey = errors.New("the provided node has a key that is not a prefix of the specified key") ErrProofValueDoesntMatch = errors.New("the provided value does not match the proof node for the provided key's value") ErrProofNodeHasUnincludedValue = errors.New("the provided proof has a value for a key within the range that is not present in the provided key/values") ErrInvalidMaybe = errors.New("maybe is nothing but has value") ErrInvalidChildIndex = errors.New("child index must be less than branch factor") ErrNilProofNode = errors.New("proof node is nil") ErrNilValueOrHash = errors.New("proof node's valueOrHash field is nil") ErrNilPath = errors.New("path is nil") ErrInvalidPathLength = errors.New("path length doesn't match bytes length, check specified branchFactor") ErrNilRangeProof = errors.New("range proof is nil") ErrNilChangeProof = errors.New("change proof is nil") ErrNilMaybeBytes = errors.New("maybe bytes is nil") ErrNilProof = errors.New("proof is nil") ErrNilValue = errors.New("value is nil") ErrUnexpectedEndProof = errors.New("end proof should be empty") ErrInconsistentBranchFactor = errors.New("all keys in proof nodes should have the same branch factor") )
var ( ErrCommitted = errors.New("view has been committed") ErrInvalid = errors.New("the trie this view was based on has changed, rendering this view invalid") ErrPartialByteLengthWithValue = errors.New( "the underlying db only supports whole number of byte keys, so cannot record changes with partial byte lengths", ) ErrGetPathToFailure = errors.New("GetPathTo failed to return the closest node") ErrStartAfterEnd = errors.New("start key > end key") ErrNoValidRoot = errors.New("a valid root was not provided to the trieView constructor") ErrParentNotDatabase = errors.New("parent trie is not database") ErrNodesAlreadyCalculated = errors.New("cannot modify the trie after the node changes have been calculated") )
var ErrInsufficientHistory = errors.New("insufficient history to generate proof")
Functions ¶
This section is empty.
Types ¶
type BranchFactor ¶ added in v1.10.12
type BranchFactor int
const ( BranchFactor2 BranchFactor = 2 BranchFactor4 BranchFactor = 4 BranchFactor16 BranchFactor = 16 BranchFactor256 BranchFactor = 256 )
func (BranchFactor) Valid ¶ added in v1.10.12
func (f BranchFactor) Valid() error
type ChangeOrRangeProof ¶ added in v1.10.9
type ChangeOrRangeProof struct { ChangeProof *ChangeProof RangeProof *RangeProof }
Exactly one of ChangeProof or RangeProof is non-nil.
type ChangeProof ¶
type ChangeProof struct { // A proof that the smallest key in the requested range does/doesn't // exist in the trie with the requested start root. // Empty if no lower bound on the requested range was given. // Note that this may not be an entire proof -- nodes are omitted if // they are also in [EndProof]. StartProof []ProofNode // If [KeyChanges] is non-empty, this is a proof of the largest key // in [KeyChanges]. // // If [KeyChanges] is empty and an upper range bound was given, // this is a proof of the upper range bound. // // If [KeyChanges] is empty and no upper range bound was given, // this is empty. EndProof []ProofNode // A subset of key-values that were added, removed, or had their values // modified between the requested start root (exclusive) and the requested // end root (inclusive). // Each key is in the requested range (inclusive). // The first key-value is the first key-value at/after the range start. // The key-value pairs are consecutive. That is, if keys k1 and k2 are // in [KeyChanges] then there is no k3 that was modified between the start and // end roots such that k1 < k3 < k2. // This is a subset of the requested key-value range, rather than the entire // range, because otherwise the proof may be too large. // Sorted by increasing key and with no duplicate keys. // // Example: Suppose that between the start root and the end root, the following // key-value pairs were added, removed, or modified: // // [kv1, kv2, kv3, kv4, kv5] // where start <= kv1 < ... < kv5 <= end. // // The following are possible values of [KeyChanges]: // // [] // [kv1] // [kv1, kv2] // [kv1, kv2, kv3] // [kv1, kv2, kv3, kv4] // [kv1, kv2, kv3, kv4, kv5] // // The following values of [KeyChanges] are always invalid, for example: // // [kv2] (Doesn't include kv1, the first key-value at/after the range start) // [kv1, kv3] (Doesn't include kv2, the key-value between kv1 and kv3) // [kv1, kv3, kv2] (Not sorted by increasing key) // [kv1, kv1] (Duplicate key-value pairs) // [kv0, kv1] (For some kv1 < start) // [kv1, kv2, kv3, kv4, kv5, kv6] (For some kv6 > end) KeyChanges []KeyChange }
A change proof proves that a set of key-value changes occurred between two trie roots, where each key-value pair's key is between some lower and upper bound (inclusive).
func (*ChangeProof) Empty ¶
func (proof *ChangeProof) Empty() bool
func (*ChangeProof) ToProto ¶ added in v1.10.3
func (proof *ChangeProof) ToProto() *pb.ChangeProof
func (*ChangeProof) UnmarshalProto ¶ added in v1.10.3
func (proof *ChangeProof) UnmarshalProto(pbProof *pb.ChangeProof, bf BranchFactor) error
type ChangeProofer ¶ added in v1.10.3
type ChangeProofer interface { // GetChangeProof returns a proof for a subset of the key/value changes in key range // [start, end] that occurred between [startRootID] and [endRootID]. // Returns at most [maxLength] key/value pairs. // Returns [ErrInsufficientHistory] if this node has insufficient history // to generate the proof. GetChangeProof( ctx context.Context, startRootID ids.ID, endRootID ids.ID, start maybe.Maybe[[]byte], end maybe.Maybe[[]byte], maxLength int, ) (*ChangeProof, error) // Returns nil iff all of the following hold: // - [start] <= [end]. // - [proof] is non-empty. // - All keys in [proof.KeyValues] and [proof.DeletedKeys] are in [start, end]. // If [start] is nothing, all keys are considered > [start]. // If [end] is nothing, all keys are considered < [end]. // - [proof.KeyValues] and [proof.DeletedKeys] are sorted in order of increasing key. // - [proof.StartProof] and [proof.EndProof] are well-formed. // - When the changes in [proof.KeyChanes] are applied, // the root ID of the database is [expectedEndRootID]. VerifyChangeProof( ctx context.Context, proof *ChangeProof, start maybe.Maybe[[]byte], end maybe.Maybe[[]byte], expectedEndRootID ids.ID, ) error // CommitChangeProof commits the key/value pairs within the [proof] to the db. CommitChangeProof(ctx context.Context, proof *ChangeProof) error }
type Config ¶
type Config struct { // BranchFactor determines the number of children each node can have. BranchFactor BranchFactor // RootGenConcurrency is the number of goroutines to use when // generating a new state root. // // If 0 is specified, [runtime.NumCPU] will be used. RootGenConcurrency uint // The number of bytes to write to disk when intermediate nodes are evicted // from their cache and written to disk. EvictionBatchSize uint // The number of changes to the database that we store in memory in order to // serve change proofs. HistoryLength uint // The number of bytes to cache nodes with values. ValueNodeCacheSize uint // The number of bytes to cache nodes without values. IntermediateNodeCacheSize uint // If [Reg] is nil, metrics are collected locally but not exported through // Prometheus. // This may be useful for testing. Reg prometheus.Registerer TraceLevel TraceLevel Tracer trace.Tracer }
type MerkleDB ¶ added in v1.10.2
type MerkleDB interface { database.Database Trie MerkleRootGetter ProofGetter ChangeProofer RangeProofer }
type MerkleRootGetter ¶ added in v1.10.3
type MockMerkleDB ¶ added in v1.10.2
type MockMerkleDB struct {
// contains filtered or unexported fields
}
MockMerkleDB is a mock of MerkleDB interface.
func NewMockMerkleDB ¶ added in v1.10.2
func NewMockMerkleDB(ctrl *gomock.Controller) *MockMerkleDB
NewMockMerkleDB creates a new mock instance.
func (*MockMerkleDB) Close ¶ added in v1.10.2
func (m *MockMerkleDB) Close() error
Close mocks base method.
func (*MockMerkleDB) CommitChangeProof ¶ added in v1.10.2
func (m *MockMerkleDB) CommitChangeProof(arg0 context.Context, arg1 *ChangeProof) error
CommitChangeProof mocks base method.
func (*MockMerkleDB) CommitRangeProof ¶ added in v1.10.2
func (m *MockMerkleDB) CommitRangeProof(arg0 context.Context, arg1, arg2 maybe.Maybe[[]uint8], arg3 *RangeProof) error
CommitRangeProof mocks base method.
func (*MockMerkleDB) Compact ¶ added in v1.10.2
func (m *MockMerkleDB) Compact(arg0, arg1 []byte) error
Compact mocks base method.
func (*MockMerkleDB) Delete ¶ added in v1.10.2
func (m *MockMerkleDB) Delete(arg0 []byte) error
Delete mocks base method.
func (*MockMerkleDB) EXPECT ¶ added in v1.10.2
func (m *MockMerkleDB) EXPECT() *MockMerkleDBMockRecorder
EXPECT returns an object that allows the caller to indicate expected use.
func (*MockMerkleDB) Get ¶ added in v1.10.2
func (m *MockMerkleDB) Get(arg0 []byte) ([]byte, error)
Get mocks base method.
func (*MockMerkleDB) GetChangeProof ¶ added in v1.10.2
func (m *MockMerkleDB) GetChangeProof(arg0 context.Context, arg1, arg2 ids.ID, arg3, arg4 maybe.Maybe[[]uint8], arg5 int) (*ChangeProof, error)
GetChangeProof mocks base method.
func (*MockMerkleDB) GetMerkleRoot ¶ added in v1.10.2
GetMerkleRoot mocks base method.
func (*MockMerkleDB) GetRangeProof ¶ added in v1.10.2
func (m *MockMerkleDB) GetRangeProof(arg0 context.Context, arg1, arg2 maybe.Maybe[[]uint8], arg3 int) (*RangeProof, error)
GetRangeProof mocks base method.
func (*MockMerkleDB) GetRangeProofAtRoot ¶ added in v1.10.2
func (m *MockMerkleDB) GetRangeProofAtRoot(arg0 context.Context, arg1 ids.ID, arg2, arg3 maybe.Maybe[[]uint8], arg4 int) (*RangeProof, error)
GetRangeProofAtRoot mocks base method.
func (*MockMerkleDB) Has ¶ added in v1.10.2
func (m *MockMerkleDB) Has(arg0 []byte) (bool, error)
Has mocks base method.
func (*MockMerkleDB) HealthCheck ¶ added in v1.10.2
func (m *MockMerkleDB) HealthCheck(arg0 context.Context) (interface{}, error)
HealthCheck mocks base method.
func (*MockMerkleDB) NewBatch ¶ added in v1.10.2
func (m *MockMerkleDB) NewBatch() database.Batch
NewBatch mocks base method.
func (*MockMerkleDB) NewIterator ¶ added in v1.10.2
func (m *MockMerkleDB) NewIterator() database.Iterator
NewIterator mocks base method.
func (*MockMerkleDB) NewIteratorWithPrefix ¶ added in v1.10.2
func (m *MockMerkleDB) NewIteratorWithPrefix(arg0 []byte) database.Iterator
NewIteratorWithPrefix mocks base method.
func (*MockMerkleDB) NewIteratorWithStart ¶ added in v1.10.2
func (m *MockMerkleDB) NewIteratorWithStart(arg0 []byte) database.Iterator
NewIteratorWithStart mocks base method.
func (*MockMerkleDB) NewIteratorWithStartAndPrefix ¶ added in v1.10.2
func (m *MockMerkleDB) NewIteratorWithStartAndPrefix(arg0, arg1 []byte) database.Iterator
NewIteratorWithStartAndPrefix mocks base method.
func (*MockMerkleDB) NewView ¶ added in v1.10.2
func (m *MockMerkleDB) NewView(arg0 context.Context, arg1 ViewChanges) (TrieView, error)
NewView mocks base method.
func (*MockMerkleDB) Put ¶ added in v1.10.2
func (m *MockMerkleDB) Put(arg0, arg1 []byte) error
Put mocks base method.
func (*MockMerkleDB) VerifyChangeProof ¶ added in v1.10.2
func (m *MockMerkleDB) VerifyChangeProof(arg0 context.Context, arg1 *ChangeProof, arg2, arg3 maybe.Maybe[[]uint8], arg4 ids.ID) error
VerifyChangeProof mocks base method.
type MockMerkleDBMockRecorder ¶ added in v1.10.2
type MockMerkleDBMockRecorder struct {
// contains filtered or unexported fields
}
MockMerkleDBMockRecorder is the mock recorder for MockMerkleDB.
func (*MockMerkleDBMockRecorder) Close ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) Close() *gomock.Call
Close indicates an expected call of Close.
func (*MockMerkleDBMockRecorder) CommitChangeProof ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) CommitChangeProof(arg0, arg1 interface{}) *gomock.Call
CommitChangeProof indicates an expected call of CommitChangeProof.
func (*MockMerkleDBMockRecorder) CommitRangeProof ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) CommitRangeProof(arg0, arg1, arg2, arg3 interface{}) *gomock.Call
CommitRangeProof indicates an expected call of CommitRangeProof.
func (*MockMerkleDBMockRecorder) Compact ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) Compact(arg0, arg1 interface{}) *gomock.Call
Compact indicates an expected call of Compact.
func (*MockMerkleDBMockRecorder) Delete ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) Delete(arg0 interface{}) *gomock.Call
Delete indicates an expected call of Delete.
func (*MockMerkleDBMockRecorder) Get ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) Get(arg0 interface{}) *gomock.Call
Get indicates an expected call of Get.
func (*MockMerkleDBMockRecorder) GetChangeProof ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) GetChangeProof(arg0, arg1, arg2, arg3, arg4, arg5 interface{}) *gomock.Call
GetChangeProof indicates an expected call of GetChangeProof.
func (*MockMerkleDBMockRecorder) GetMerkleRoot ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) GetMerkleRoot(arg0 interface{}) *gomock.Call
GetMerkleRoot indicates an expected call of GetMerkleRoot.
func (*MockMerkleDBMockRecorder) GetProof ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) GetProof(arg0, arg1 interface{}) *gomock.Call
GetProof indicates an expected call of GetProof.
func (*MockMerkleDBMockRecorder) GetRangeProof ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) GetRangeProof(arg0, arg1, arg2, arg3 interface{}) *gomock.Call
GetRangeProof indicates an expected call of GetRangeProof.
func (*MockMerkleDBMockRecorder) GetRangeProofAtRoot ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) GetRangeProofAtRoot(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call
GetRangeProofAtRoot indicates an expected call of GetRangeProofAtRoot.
func (*MockMerkleDBMockRecorder) GetValue ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) GetValue(arg0, arg1 interface{}) *gomock.Call
GetValue indicates an expected call of GetValue.
func (*MockMerkleDBMockRecorder) GetValues ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) GetValues(arg0, arg1 interface{}) *gomock.Call
GetValues indicates an expected call of GetValues.
func (*MockMerkleDBMockRecorder) Has ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) Has(arg0 interface{}) *gomock.Call
Has indicates an expected call of Has.
func (*MockMerkleDBMockRecorder) HealthCheck ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) HealthCheck(arg0 interface{}) *gomock.Call
HealthCheck indicates an expected call of HealthCheck.
func (*MockMerkleDBMockRecorder) NewBatch ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) NewBatch() *gomock.Call
NewBatch indicates an expected call of NewBatch.
func (*MockMerkleDBMockRecorder) NewIterator ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) NewIterator() *gomock.Call
NewIterator indicates an expected call of NewIterator.
func (*MockMerkleDBMockRecorder) NewIteratorWithPrefix ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) NewIteratorWithPrefix(arg0 interface{}) *gomock.Call
NewIteratorWithPrefix indicates an expected call of NewIteratorWithPrefix.
func (*MockMerkleDBMockRecorder) NewIteratorWithStart ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) NewIteratorWithStart(arg0 interface{}) *gomock.Call
NewIteratorWithStart indicates an expected call of NewIteratorWithStart.
func (*MockMerkleDBMockRecorder) NewIteratorWithStartAndPrefix ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) NewIteratorWithStartAndPrefix(arg0, arg1 interface{}) *gomock.Call
NewIteratorWithStartAndPrefix indicates an expected call of NewIteratorWithStartAndPrefix.
func (*MockMerkleDBMockRecorder) NewView ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) NewView(arg0, arg1 interface{}) *gomock.Call
NewView indicates an expected call of NewView.
func (*MockMerkleDBMockRecorder) Put ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) Put(arg0, arg1 interface{}) *gomock.Call
Put indicates an expected call of Put.
func (*MockMerkleDBMockRecorder) VerifyChangeProof ¶ added in v1.10.2
func (mr *MockMerkleDBMockRecorder) VerifyChangeProof(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call
VerifyChangeProof indicates an expected call of VerifyChangeProof.
type Path ¶ added in v1.10.12
type Path struct {
// contains filtered or unexported fields
}
func NewPath ¶ added in v1.10.12
func NewPath(p []byte, branchFactor BranchFactor) Path
NewPath returns [p] as a new path with the given [branchFactor]. Assumes [branchFactor] is valid.
func (Path) Append ¶ added in v1.10.12
Append returns a new Path that equals the current Path with [token] appended to the end.
func (Path) Bytes ¶ added in v1.10.12
Bytes returns the raw bytes of the Path Invariant: The returned value must not be modified.
func (Path) Extend ¶ added in v1.10.12
Extend returns a new Path that equals the passed Path appended to the current Path
func (Path) Greater ¶ added in v1.10.12
Greater returns true if current Path is greater than other Path
func (Path) HasPrefix ¶ added in v1.10.12
HasPrefix returns true iff [prefix] is a prefix of [p] or equal to it.
func (Path) HasStrictPrefix ¶ added in v1.10.12
HasStrictPrefix returns true iff [prefix] is a prefix of [p] but is not equal to it.
func (Path) Skip ¶ added in v1.10.12
Skip returns a new Path that contains the last p.length-tokensToSkip tokens of [p].
func (Path) Take ¶ added in v1.10.12
Take returns a new Path that contains the first tokensToTake tokens of the current Path
func (Path) TokensLength ¶ added in v1.10.12
TokensLength returns the number of tokens in [p].
type Proof ¶
type Proof struct { // Nodes in the proof path from root --> target key // (or node that would be where key is if it doesn't exist). // Must always be non-empty (i.e. have the root node). Path []ProofNode // This is a proof that [key] exists/doesn't exist. Key Path // Nothing if [Key] isn't in the trie. // Otherwise the value corresponding to [Key]. Value maybe.Maybe[[]byte] }
An inclusion/exclustion proof of a key.
func (*Proof) UnmarshalProto ¶ added in v1.10.3
func (proof *Proof) UnmarshalProto(pbProof *pb.Proof, bf BranchFactor) error
type ProofGetter ¶ added in v1.10.3
type ProofNode ¶
type ProofNode struct { KeyPath Path // Nothing if this is an intermediate node. // The value in this node if its length < [HashLen]. // The hash of the value in this node otherwise. ValueOrHash maybe.Maybe[[]byte] Children map[byte]ids.ID }
func (*ProofNode) UnmarshalProto ¶ added in v1.10.3
func (node *ProofNode) UnmarshalProto(pbNode *pb.ProofNode, bf BranchFactor) error
type RangeProof ¶
type RangeProof struct { // A proof that the smallest key in the requested range does/doesn't exist. // Note that this may not be an entire proof -- nodes are omitted if // they are also in [EndProof]. StartProof []ProofNode // If no upper range bound was given, [KeyValues] is empty, // and [StartProof] is non-empty, this is empty. // // If no upper range bound was given, [KeyValues] is empty, // and [StartProof] is empty, this is the root. // // If an upper range bound was given and [KeyValues] is empty, // this is a proof for the upper range bound. // // Otherwise, this is a proof for the largest key in [KeyValues]. EndProof []ProofNode // This proof proves that the key-value pairs in [KeyValues] are in the trie. // Sorted by increasing key. KeyValues []KeyValue }
A proof that a given set of key-value pairs are in a trie.
func (*RangeProof) ToProto ¶ added in v1.10.3
func (proof *RangeProof) ToProto() *pb.RangeProof
func (*RangeProof) UnmarshalProto ¶ added in v1.10.3
func (proof *RangeProof) UnmarshalProto(pbProof *pb.RangeProof, bf BranchFactor) error
func (*RangeProof) Verify ¶
func (proof *RangeProof) Verify( ctx context.Context, start maybe.Maybe[[]byte], end maybe.Maybe[[]byte], expectedRootID ids.ID, ) error
Verify returns nil iff all the following hold:
- The invariants of RangeProof hold.
- [start] <= [end].
- [proof] proves the key-value pairs in [proof.KeyValues] are in the trie whose root is [expectedRootID].
All keys in [proof.KeyValues] are in the range [start, end].
If [start] is Nothing, all keys are considered > [start]. If [end] is Nothing, all keys are considered < [end].
type RangeProofer ¶ added in v1.10.3
type RangeProofer interface { // GetRangeProofAtRoot returns a proof for the key/value pairs in this trie within the range // [start, end] when the root of the trie was [rootID]. // If [start] is Nothing, there's no lower bound on the range. // If [end] is Nothing, there's no upper bound on the range. GetRangeProofAtRoot( ctx context.Context, rootID ids.ID, start maybe.Maybe[[]byte], end maybe.Maybe[[]byte], maxLength int, ) (*RangeProof, error) // CommitRangeProof commits the key/value pairs within the [proof] to the db. // [start] is the smallest possible key in the range this [proof] covers. // [end] is the largest possible key in the range this [proof] covers. CommitRangeProof(ctx context.Context, start, end maybe.Maybe[[]byte], proof *RangeProof) error }
type ReadOnlyTrie ¶
type ReadOnlyTrie interface { MerkleRootGetter ProofGetter // GetValue gets the value associated with the specified key // database.ErrNotFound if the key is not present GetValue(ctx context.Context, key []byte) ([]byte, error) // GetValues gets the values associated with the specified keys // database.ErrNotFound if the key is not present GetValues(ctx context.Context, keys [][]byte) ([][]byte, []error) // GetRangeProof returns a proof of up to [maxLength] key-value pairs with // keys in range [start, end]. // If [start] is Nothing, there's no lower bound on the range. // If [end] is Nothing, there's no upper bound on the range. GetRangeProof(ctx context.Context, start maybe.Maybe[[]byte], end maybe.Maybe[[]byte], maxLength int) (*RangeProof, error) database.Iteratee // contains filtered or unexported methods }
type TraceLevel ¶ added in v1.10.10
type TraceLevel int
const ( DebugTrace TraceLevel = iota - 1 InfoTrace // Default NoTrace )
type Trie ¶
type Trie interface { ReadOnlyTrie // NewView returns a new view on top of this Trie where the passed changes // have been applied. NewView( ctx context.Context, changes ViewChanges, ) (TrieView, error) }