71 lines
2.0 KiB
Go
71 lines
2.0 KiB
Go
package root
|
|
|
|
import (
|
|
corestore "cosmossdk.io/core/store"
|
|
|
|
"cosmossdk.io/store/v2"
|
|
)
|
|
|
|
var _ corestore.Reader = (*Reader)(nil)
|
|
var _ corestore.ReaderMap = (*ReaderMap)(nil)
|
|
|
|
// ReaderMap defines an adapter around a RootStore that only exposes read-only
|
|
// operations. This is useful for exposing a read-only view of the RootStore at
|
|
// a specific version in history, which could also be the latest state.
|
|
type ReaderMap struct {
|
|
rootStore store.RootStore
|
|
version uint64
|
|
}
|
|
|
|
func NewReaderMap(v uint64, rs store.RootStore) *ReaderMap {
|
|
return &ReaderMap{
|
|
rootStore: rs,
|
|
version: v,
|
|
}
|
|
}
|
|
|
|
func (roa *ReaderMap) GetReader(actor []byte) (corestore.Reader, error) {
|
|
return NewReader(roa.version, roa.rootStore, actor), nil
|
|
}
|
|
|
|
// Reader represents a read-only adapter for accessing data from the root store.
|
|
type Reader struct {
|
|
version uint64 // The version of the data.
|
|
rootStore store.RootStore // The root store to read data from.
|
|
actor []byte // The actor associated with the data.
|
|
}
|
|
|
|
func NewReader(v uint64, rs store.RootStore, actor []byte) *Reader {
|
|
return &Reader{
|
|
version: v,
|
|
rootStore: rs,
|
|
actor: actor,
|
|
}
|
|
}
|
|
|
|
func (roa *Reader) Has(key []byte) (bool, error) {
|
|
val, err := roa.rootStore.GetStateStorage().Has(string(roa.actor), roa.version, key) // TODO: move storekeys to []byte
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
return val, nil
|
|
}
|
|
|
|
func (roa *Reader) Get(key []byte) ([]byte, error) {
|
|
result, err := roa.rootStore.GetStateStorage().Get(string(roa.actor), roa.version, key) // TODO: move storekeys to []byte
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return result, nil
|
|
}
|
|
|
|
func (roa *Reader) Iterator(start, end []byte) (corestore.Iterator, error) {
|
|
return roa.rootStore.GetStateStorage().Iterator(string(roa.actor), roa.version, start, end)
|
|
}
|
|
|
|
func (roa *Reader) ReverseIterator(start, end []byte) (corestore.Iterator, error) {
|
|
return roa.rootStore.GetStateStorage().ReverseIterator(string(roa.actor), roa.version, start, end)
|
|
}
|