github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/types/store.go (about)

     1  package types
     2  
     3  import (
     4  	tmkv "github.com/fibonacci-chain/fbc/libs/tendermint/libs/kv"
     5  	"sync"
     6  
     7  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec"
     8  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store/types"
     9  )
    10  
    11  // nolint - reexport
    12  type (
    13  	PruningOptions = types.PruningOptions
    14  )
    15  
    16  // nolint - reexport
    17  type (
    18  	Store                     = types.Store
    19  	Committer                 = types.Committer
    20  	CommitStore               = types.CommitStore
    21  	Queryable                 = types.Queryable
    22  	MultiStore                = types.MultiStore
    23  	CacheMultiStore           = types.CacheMultiStore
    24  	CommitMultiStore          = types.CommitMultiStore
    25  	MultiStorePersistentCache = types.MultiStorePersistentCache
    26  	KVStore                   = types.KVStore
    27  	Iterator                  = types.Iterator
    28  )
    29  
    30  // StoreDecoderRegistry defines each of the modules store decoders. Used for ImportExport
    31  // simulation.
    32  type StoreDecoderRegistry map[string]func(cdc *codec.Codec, kvA, kvB tmkv.Pair) string
    33  
    34  // Iterator over all the keys with a certain prefix in ascending order
    35  func KVStorePrefixIterator(kvs KVStore, prefix []byte) Iterator {
    36  	return types.KVStorePrefixIterator(kvs, prefix)
    37  }
    38  
    39  // Iterator over all the keys with a certain prefix in descending order.
    40  func KVStoreReversePrefixIterator(kvs KVStore, prefix []byte) Iterator {
    41  	return types.KVStoreReversePrefixIterator(kvs, prefix)
    42  }
    43  
    44  // KVStorePrefixIteratorPaginated returns iterator over items in the selected page.
    45  // Items iterated and skipped in ascending order.
    46  func KVStorePrefixIteratorPaginated(kvs KVStore, prefix []byte, page, limit uint) Iterator {
    47  	return types.KVStorePrefixIteratorPaginated(kvs, prefix, page, limit)
    48  }
    49  
    50  // KVStoreReversePrefixIteratorPaginated returns iterator over items in the selected page.
    51  // Items iterated and skipped in descending order.
    52  func KVStoreReversePrefixIteratorPaginated(kvs KVStore, prefix []byte, page, limit uint) Iterator {
    53  	return types.KVStorePrefixIteratorPaginated(kvs, prefix, page, limit)
    54  }
    55  
    56  // DiffKVStores compares two KVstores and returns all the key/value pairs
    57  // that differ from one another. It also skips value comparison for a set of provided prefixes
    58  func DiffKVStores(a KVStore, b KVStore, prefixesToSkip [][]byte) (kvAs, kvBs []tmkv.Pair) {
    59  	return types.DiffKVStores(a, b, prefixesToSkip)
    60  }
    61  
    62  // nolint - reexport
    63  type (
    64  	CacheKVStore  = types.CacheKVStore
    65  	CommitKVStore = types.CommitKVStore
    66  	CacheWrap     = types.CacheWrap
    67  	CacheWrapper  = types.CacheWrapper
    68  	CommitID      = types.CommitID
    69  )
    70  
    71  // nolint - reexport
    72  type StoreType = types.StoreType
    73  
    74  // nolint - reexport
    75  const (
    76  	StoreTypeMulti     = types.StoreTypeMulti
    77  	StoreTypeDB        = types.StoreTypeDB
    78  	StoreTypeIAVL      = types.StoreTypeIAVL
    79  	StoreTypeTransient = types.StoreTypeTransient
    80  	StoreTypeMPT       = types.StoreTypeMPT
    81  	StoreTypeMemory    = types.StoreTypeMemory
    82  )
    83  
    84  // nolint - reexport
    85  type (
    86  	StoreKey          = types.StoreKey
    87  	KVStoreKey        = types.KVStoreKey
    88  	TransientStoreKey = types.TransientStoreKey
    89  	MemoryStoreKey    = types.MemoryStoreKey
    90  )
    91  
    92  // NewKVStoreKey returns a new pointer to a KVStoreKey.
    93  // Use a pointer so keys don't collide.
    94  func NewKVStoreKey(name string) *KVStoreKey {
    95  	return types.NewKVStoreKey(name)
    96  }
    97  
    98  // NewKVStoreKeys returns a map of new  pointers to KVStoreKey's.
    99  // Uses pointers so keys don't collide.
   100  func NewKVStoreKeys(names ...string) map[string]*KVStoreKey {
   101  	keys := make(map[string]*KVStoreKey)
   102  	for _, name := range names {
   103  		keys[name] = NewKVStoreKey(name)
   104  	}
   105  	return keys
   106  }
   107  
   108  // NewMemoryStoreKeys constructs a new map matching store key names to their
   109  // respective MemoryStoreKey references.
   110  func NewMemoryStoreKeys(names ...string) map[string]*MemoryStoreKey {
   111  	keys := make(map[string]*MemoryStoreKey)
   112  	for _, name := range names {
   113  		keys[name] = types.NewMemoryStoreKey(name)
   114  	}
   115  
   116  	return keys
   117  }
   118  
   119  // Constructs new TransientStoreKey
   120  // Must return a pointer according to the ocap principle
   121  func NewTransientStoreKey(name string) *TransientStoreKey {
   122  	return types.NewTransientStoreKey(name)
   123  }
   124  
   125  // NewTransientStoreKeys constructs a new map of TransientStoreKey's
   126  // Must return pointers according to the ocap principle
   127  func NewTransientStoreKeys(names ...string) map[string]*TransientStoreKey {
   128  	keys := make(map[string]*TransientStoreKey)
   129  	for _, name := range names {
   130  		keys[name] = NewTransientStoreKey(name)
   131  	}
   132  	return keys
   133  }
   134  
   135  // PrefixEndBytes returns the []byte that would end a
   136  // range query for all []byte with a certain prefix
   137  // Deals with last byte of prefix being FF without overflowing
   138  func PrefixEndBytes(prefix []byte) []byte {
   139  	return types.PrefixEndBytes(prefix)
   140  }
   141  
   142  // InclusiveEndBytes returns the []byte that would end a
   143  // range query such that the input would be included
   144  func InclusiveEndBytes(inclusiveBytes []byte) (exclusiveBytes []byte) {
   145  	return types.InclusiveEndBytes(inclusiveBytes)
   146  }
   147  
   148  //----------------------------------------
   149  
   150  // key-value result for iterator queries
   151  type KVPair = types.KVPair
   152  
   153  //----------------------------------------
   154  
   155  // TraceContext contains TraceKVStore context data. It will be written with
   156  // every trace operation.
   157  type TraceContext = types.TraceContext
   158  
   159  // --------------------------------------
   160  
   161  // nolint - reexport
   162  type (
   163  	Gas       = types.Gas
   164  	GasMeter  = types.GasMeter
   165  	GasConfig = types.GasConfig
   166  
   167  	ReusableGasMeter = types.ReusableGasMeter
   168  )
   169  
   170  // nolint - reexport
   171  func NewGasMeter(limit Gas) GasMeter {
   172  	return types.NewGasMeter(limit)
   173  }
   174  
   175  // nolint - reexport
   176  type (
   177  	ErrorOutOfGas    = types.ErrorOutOfGas
   178  	ErrorGasOverflow = types.ErrorGasOverflow
   179  )
   180  
   181  // nolint - reexport
   182  func NewInfiniteGasMeter() GasMeter {
   183  	return types.NewInfiniteGasMeter()
   184  }
   185  
   186  var resuableGasMeterPool = &sync.Pool{
   187  	New: func() interface{} {
   188  		return types.NewReusableInfiniteGasMeter()
   189  	},
   190  }
   191  
   192  // GetReusableInfiniteGasMeter returns a ReusableGasMeter from the pool.
   193  // you must call ReturnInfiniteGasMeter after you are done with the meter.
   194  func GetReusableInfiniteGasMeter() ReusableGasMeter {
   195  	gm := resuableGasMeterPool.Get().(ReusableGasMeter)
   196  	gm.Reset()
   197  	return gm
   198  }
   199  
   200  func ReturnInfiniteGasMeter(gm ReusableGasMeter) {
   201  	resuableGasMeterPool.Put(gm)
   202  }