Skip to content

Commit 0956d8b

Browse files
committed
Problem: type wrapping needs more allocations
Solution: use sdk types directly, avoid some wrappers in integration
1 parent d8127d9 commit 0956d8b

File tree

7 files changed

+51
-19
lines changed

7 files changed

+51
-19
lines changed

memdb.go

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ package block_stm
22

33
import (
44
"bytes"
5+
"io"
56

7+
"cosmossdk.io/store/cachekv"
8+
"cosmossdk.io/store/tracekv"
69
storetypes "cosmossdk.io/store/types"
710
"github.com/tidwall/btree"
811
)
@@ -22,7 +25,7 @@ type MemDB struct {
2225
btree.BTreeG[memdbItem]
2326
}
2427

25-
var _ KVStore = (*MemDB)(nil)
28+
var _ storetypes.KVStore = (*MemDB)(nil)
2629

2730
func NewMemDB() *MemDB {
2831
return &MemDB{*btree.NewBTreeG[memdbItem](KeyItemLess)}
@@ -114,14 +117,28 @@ func (db *MemDB) Equal(other *MemDB) bool {
114117
}
115118
}
116119

120+
func (db *MemDB) GetStoreType() storetypes.StoreType {
121+
return storetypes.StoreTypeIAVL
122+
}
123+
124+
// CacheWrap implements types.KVStore.
125+
func (db *MemDB) CacheWrap() storetypes.CacheWrap {
126+
return cachekv.NewStore(storetypes.KVStore(db))
127+
}
128+
129+
// CacheWrapWithTrace implements types.KVStore.
130+
func (db *MemDB) CacheWrapWithTrace(w io.Writer, tc storetypes.TraceContext) storetypes.CacheWrap {
131+
return cachekv.NewStore(tracekv.NewStore(db, w, tc))
132+
}
133+
117134
type MemDBIterator struct {
118135
BTreeIteratorG[memdbItem]
119136
}
120137

121138
var _ storetypes.Iterator = (*MemDBIterator)(nil)
122139

123140
func NewMemDBIterator(start, end Key, iter btree.IterG[memdbItem], ascending bool) *MemDBIterator {
124-
return &MemDBIterator{*NewBTreeIteratorG[memdbItem](
141+
return &MemDBIterator{*NewBTreeIteratorG(
125142
memdbItem{key: start},
126143
memdbItem{key: end},
127144
iter,
@@ -151,6 +168,6 @@ func (mmdb *MultiMemDB) GetDB(store storetypes.StoreKey) *MemDB {
151168
return mmdb.dbs[store]
152169
}
153170

154-
func (mmdb *MultiMemDB) GetKVStore(store storetypes.StoreKey) KVStore {
171+
func (mmdb *MultiMemDB) GetKVStore(store storetypes.StoreKey) storetypes.KVStore {
155172
return mmdb.GetDB(store)
156173
}

mock_block.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ func genRandomSignature() func() {
116116
}
117117
}
118118

119-
func increaseNonce(i int, sender string, store KVStore) error {
119+
func increaseNonce(i int, sender string, store storetypes.KVStore) error {
120120
nonceKey := []byte("nonce" + sender)
121121
var nonce uint64
122122
v := store.Get(nonceKey)
@@ -136,7 +136,7 @@ func increaseNonce(i int, sender string, store KVStore) error {
136136
return nil
137137
}
138138

139-
func bankTransfer(i int, sender, receiver string, amount uint64, store KVStore) error {
139+
func bankTransfer(i int, sender, receiver string, amount uint64, store storetypes.KVStore) error {
140140
senderKey := []byte("balance" + sender)
141141
receiverKey := []byte("balance" + receiver)
142142

multimvview.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func NewMultiMVMemoryView(
2525
}
2626
}
2727

28-
func (mv *MultiMVMemoryView) GetKVStore(name storetypes.StoreKey) KVStore {
28+
func (mv *MultiMVMemoryView) GetKVStore(name storetypes.StoreKey) storetypes.KVStore {
2929
return mv.views[name]
3030
}
3131

mvdata.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ func (d *MVData) getTree(key Key) *BTree[secondaryDataItem] {
2222
func (d *MVData) getTreeOrDefault(key Key) *BTree[secondaryDataItem] {
2323
return d.GetOrDefault(dataItem{Key: key}, func(item *dataItem) {
2424
if item.Tree == nil {
25-
item.Tree = NewBTree[secondaryDataItem](secondaryDataItemLess)
25+
item.Tree = NewBTree(secondaryDataItemLess)
2626
}
2727
}).Tree
2828
}

mvmemory.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ func (mv *MVMemory) WriteSnapshot(storage MultiStore) {
148148
}
149149
}
150150

151-
func WriteSnapshot(storage KVStore, snapshot []KVPair) {
151+
func WriteSnapshot(storage storetypes.KVStore, snapshot []KVPair) {
152152
for _, pair := range snapshot {
153153
if pair.Value == nil {
154154
storage.Delete(pair.Key)

mvview.go

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
package block_stm
22

3-
import storetypes "cosmossdk.io/store/types"
3+
import (
4+
"io"
5+
6+
"cosmossdk.io/store/cachekv"
7+
"cosmossdk.io/store/tracekv"
8+
storetypes "cosmossdk.io/store/types"
9+
)
410

511
// MVMemoryView wraps `MVMemory` for execution of a single transaction.
612
type MVMemoryView struct {
7-
storage KVStore
13+
storage storetypes.KVStore
814
mvMemory *MVMemory
915
scheduler *Scheduler
1016
store int
@@ -14,9 +20,9 @@ type MVMemoryView struct {
1420
writeSet WriteSet
1521
}
1622

17-
var _ KVStore = (*MVMemoryView)(nil)
23+
var _ storetypes.KVStore = (*MVMemoryView)(nil)
1824

19-
func NewMVMemoryView(store int, storage KVStore, mvMemory *MVMemory, schedule *Scheduler, txn TxnIndex) *MVMemoryView {
25+
func NewMVMemoryView(store int, storage storetypes.KVStore, mvMemory *MVMemory, schedule *Scheduler, txn TxnIndex) *MVMemoryView {
2026
return &MVMemoryView{
2127
store: store,
2228
storage: storage,
@@ -126,3 +132,18 @@ func (s *MVMemoryView) iterator(opts IteratorOptions) storetypes.Iterator {
126132
onClose,
127133
)
128134
}
135+
136+
// CacheWrap implements types.KVStore.
137+
func (s *MVMemoryView) CacheWrap() storetypes.CacheWrap {
138+
return cachekv.NewStore(storetypes.KVStore(s))
139+
}
140+
141+
// CacheWrapWithTrace implements types.KVStore.
142+
func (s *MVMemoryView) CacheWrapWithTrace(w io.Writer, tc storetypes.TraceContext) storetypes.CacheWrap {
143+
return cachekv.NewStore(tracekv.NewStore(s, w, tc))
144+
}
145+
146+
// GetStoreType implements types.KVStore.
147+
func (s *MVMemoryView) GetStoreType() storetypes.StoreType {
148+
return storetypes.StoreTypeIAVL
149+
}

types.go

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,6 @@ func KeyItemLess[T KeyItem](a, b T) bool {
7777
// TxExecutor executes transactions on top of a multi-version memory view.
7878
type TxExecutor func(TxnIndex, MultiStore)
7979

80-
type KVStore interface {
81-
storetypes.BasicKVStore
82-
Iterator(start, end []byte) storetypes.Iterator
83-
ReverseIterator(start, end []byte) storetypes.Iterator
84-
}
85-
8680
type MultiStore interface {
87-
GetKVStore(storetypes.StoreKey) KVStore
81+
GetKVStore(storetypes.StoreKey) storetypes.KVStore
8882
}

0 commit comments

Comments
 (0)