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 }