GasKVStore WIP
This commit is contained in:
parent
ca4ef9a2fc
commit
c410ceb155
|
@ -0,0 +1,80 @@
|
||||||
|
package store
|
||||||
|
|
||||||
|
import (
|
||||||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
// gasKVStore applies gas tracking to an underlying kvstore
|
||||||
|
type gasKVStore struct {
|
||||||
|
gasMeter sdk.GasMeter
|
||||||
|
parent KVStore
|
||||||
|
}
|
||||||
|
|
||||||
|
// nolint
|
||||||
|
func NewGasKVStore(gasMeter sdk.GasMeter, parent KVStore) *gasKVStore {
|
||||||
|
kvs := &gasKVStore{
|
||||||
|
gasMeter: gasMeter,
|
||||||
|
parent: parent,
|
||||||
|
}
|
||||||
|
return kvs
|
||||||
|
}
|
||||||
|
|
||||||
|
// Implements Store.
|
||||||
|
func (gi *gasKVStore) GetStoreType() StoreType {
|
||||||
|
return gi.parent.GetStoreType()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Implements KVStore.
|
||||||
|
func (gi *gasKVStore) Get(key []byte) (value []byte) {
|
||||||
|
return gi.parent.Get(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Implements KVStore.
|
||||||
|
func (gi *gasKVStore) Set(key []byte, value []byte) {
|
||||||
|
gi.parent.Set(key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Implements KVStore.
|
||||||
|
func (gi *gasKVStore) Has(key []byte) bool {
|
||||||
|
return gi.parent.Has(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Implements KVStore.
|
||||||
|
func (gi *gasKVStore) Delete(key []byte) {
|
||||||
|
gi.parent.Delete(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Implements KVStore.
|
||||||
|
func (gi *gasKVStore) Iterator(start, end []byte) Iterator {
|
||||||
|
return gi.iterator(start, end, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Implements KVStore.
|
||||||
|
func (gi *gasKVStore) ReverseIterator(start, end []byte) Iterator {
|
||||||
|
return gi.iterator(start, end, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Implements KVStore.
|
||||||
|
func (gi *gasKVStore) SubspaceIterator(prefix []byte) Iterator {
|
||||||
|
return gi.iterator(prefix, sdk.PrefixEndBytes(prefix), true)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Implements KVStore.
|
||||||
|
func (gi *gasKVStore) ReverseSubspaceIterator(prefix []byte) Iterator {
|
||||||
|
return gi.iterator(prefix, sdk.PrefixEndBytes(prefix), false)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Implements KVStore.
|
||||||
|
func (gi *gasKVStore) CacheWrap() CacheWrap {
|
||||||
|
return gi.parent.CacheWrap() // TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gi *gasKVStore) iterator(start, end []byte, ascending bool) Iterator {
|
||||||
|
var parent Iterator
|
||||||
|
if ascending {
|
||||||
|
parent = gi.parent.Iterator(start, end)
|
||||||
|
} else {
|
||||||
|
parent = gi.parent.ReverseIterator(start, end)
|
||||||
|
}
|
||||||
|
return parent // TODO
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
package store
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
dbm "github.com/tendermint/tmlibs/db"
|
||||||
|
)
|
||||||
|
|
||||||
|
func newGasKVStore() KVStore {
|
||||||
|
meter := sdk.NewGasMeter(1000)
|
||||||
|
mem := dbStoreAdapter{dbm.NewMemDB()}
|
||||||
|
return NewGasKVStore(meter, mem)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGasKVStore(t *testing.T) {
|
||||||
|
mem := dbStoreAdapter{dbm.NewMemDB()}
|
||||||
|
meter := sdk.NewGasMeter(1000)
|
||||||
|
st := NewGasKVStore(meter, mem)
|
||||||
|
|
||||||
|
require.Empty(t, st.Get(keyFmt(1)), "Expected `key1` to be empty")
|
||||||
|
|
||||||
|
mem.Set(keyFmt(1), valFmt(1))
|
||||||
|
st.Set(keyFmt(1), valFmt(1))
|
||||||
|
require.Equal(t, valFmt(1), st.Get(keyFmt(1)))
|
||||||
|
}
|
Loading…
Reference in New Issue