Skip to content

Commit a03272f

Browse files
committed
Revert "add merkle db for state"
This reverts commit 9c7abf113efb686c740f1c98e310064211b1214a.
1 parent a845ee8 commit a03272f

File tree

18 files changed

+90
-326
lines changed

18 files changed

+90
-326
lines changed

vms/avm/block/builder/builder_test.go

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import (
1616
"github.com/ava-labs/avalanchego/codec"
1717
"github.com/ava-labs/avalanchego/codec/codecmock"
1818
"github.com/ava-labs/avalanchego/database/memdb"
19-
"github.com/ava-labs/avalanchego/database/prefixdb"
2019
"github.com/ava-labs/avalanchego/database/versiondb"
2120
"github.com/ava-labs/avalanchego/ids"
2221
"github.com/ava-labs/avalanchego/snow"
@@ -37,7 +36,6 @@ import (
3736
"github.com/ava-labs/avalanchego/vms/avm/txs/txsmock"
3837
"github.com/ava-labs/avalanchego/vms/components/avax"
3938
"github.com/ava-labs/avalanchego/vms/secp256k1fx"
40-
"github.com/ava-labs/avalanchego/x/merkledb"
4139

4240
blkexecutor "github.com/ava-labs/avalanchego/vms/avm/block/executor"
4341
txexecutor "github.com/ava-labs/avalanchego/vms/avm/txs/executor"
@@ -516,24 +514,8 @@ func TestBlockBuilderAddLocalTx(t *testing.T) {
516514
}
517515

518516
baseDB := versiondb.New(memdb.New())
519-
metadataDB := prefixdb.New([]byte("metadata"), baseDB)
520-
stateDB, err := merkledb.New(
521-
context.Background(),
522-
prefixdb.New([]byte("state"), baseDB),
523-
merkledb.NewConfig(),
524-
"",
525-
)
526-
require.NoError(err)
527-
state, err := state.New(
528-
context.Background(),
529-
baseDB,
530-
stateDB,
531-
metadataDB,
532-
parser,
533-
registerer,
534-
trackChecksums,
535-
merkledb.NewConfig(),
536-
)
517+
518+
state, err := state.New(baseDB, parser, registerer, trackChecksums)
537519
require.NoError(err)
538520

539521
clk := &mockable.Clock{}

vms/avm/block/executor/block.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ func (b *Block) Verify(context.Context) error {
201201
return nil
202202
}
203203

204-
func (b *Block) Accept(ctx context.Context) error {
204+
func (b *Block) Accept(context.Context) error {
205205
blkID := b.ID()
206206
defer b.manager.free(blkID)
207207

@@ -246,11 +246,7 @@ func (b *Block) Accept(ctx context.Context) error {
246246
return err
247247
}
248248

249-
txChecksum, utxoChecksum, err := b.manager.state.Checksums(ctx)
250-
if err != nil {
251-
return fmt.Errorf("failed to get checksums: %w", err)
252-
}
253-
249+
txChecksum, utxoChecksum := b.manager.state.Checksums()
254250
b.manager.backend.Ctx.Log.Trace(
255251
"accepted block",
256252
zap.Stringer("blkID", blkID),

vms/avm/block/executor/block_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -749,7 +749,7 @@ func TestBlockAccept(t *testing.T) {
749749
// because we mock the call to shared memory
750750
mockManagerState.EXPECT().CommitBatch().Return(nil, nil)
751751
mockManagerState.EXPECT().Abort()
752-
mockManagerState.EXPECT().Checksums(gomock.Any()).Return(ids.Empty, ids.Empty, nil)
752+
mockManagerState.EXPECT().Checksums().Return(ids.Empty, ids.Empty)
753753

754754
mockSharedMemory := atomicmock.NewSharedMemory(ctrl)
755755
mockSharedMemory.EXPECT().Apply(gomock.Any(), gomock.Any()).Return(nil)

vms/avm/index_test.go

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,9 @@ func TestIndexTransaction_Ordered(t *testing.T) {
5959

6060
// for each tx check its indexed at right index
6161
for i, tx := range txs {
62-
assertIndexedTX(t, env.vm.metadataDB, uint64(i), addr, txAssetID.ID, tx.ID())
62+
assertIndexedTX(t, env.vm.db, uint64(i), addr, txAssetID.ID, tx.ID())
6363
}
64-
assertLatestIdx(t, env.vm.metadataDB, addr, txAssetID.ID, 5)
64+
assertLatestIdx(t, env.vm.db, addr, txAssetID.ID, 5)
6565
}
6666

6767
func TestIndexTransaction_MultipleTransactions(t *testing.T) {
@@ -102,8 +102,8 @@ func TestIndexTransaction_MultipleTransactions(t *testing.T) {
102102

103103
// for each *UniqueTx check its indexed at right index for the right address
104104
for addr, tx := range addressTxMap {
105-
assertIndexedTX(t, env.vm.metadataDB, 0, addr, txAssetID.ID, tx.ID())
106-
assertLatestIdx(t, env.vm.metadataDB, addr, txAssetID.ID, 1)
105+
assertIndexedTX(t, env.vm.db, 0, addr, txAssetID.ID, tx.ID())
106+
assertLatestIdx(t, env.vm.db, addr, txAssetID.ID, 1)
107107
}
108108
}
109109

@@ -141,8 +141,8 @@ func TestIndexTransaction_MultipleAddresses(t *testing.T) {
141141

142142
env.vm.ctx.Lock.Lock()
143143

144-
assertIndexedTX(t, env.vm.metadataDB, 0, addr, txAssetID.ID, tx.ID())
145-
assertLatestIdx(t, env.vm.metadataDB, addr, txAssetID.ID, 1)
144+
assertIndexedTX(t, env.vm.db, 0, addr, txAssetID.ID, tx.ID())
145+
assertLatestIdx(t, env.vm.db, addr, txAssetID.ID, 1)
146146
}
147147

148148
func TestIndexer_Read(t *testing.T) {
@@ -156,7 +156,7 @@ func TestIndexer_Read(t *testing.T) {
156156
addr := ids.GenerateTestShortID()
157157

158158
// setup some fake txs under the above generated address and asset IDs
159-
testTxs := initTestTxIndex(t, env.vm.metadataDB, addr, assetID, 25)
159+
testTxs := initTestTxIndex(t, env.vm.db, addr, assetID, 25)
160160
require.Len(testTxs, 25)
161161

162162
// read the pages, 5 items at a time
@@ -275,10 +275,9 @@ func buildTX(chainID ids.ID, utxoID avax.UTXOID, txAssetID avax.Asset, address .
275275
}}
276276
}
277277

278-
func assertLatestIdx(t *testing.T, baseDB database.Database, sourceAddress ids.ShortID, assetID ids.ID, expectedIdx uint64) {
278+
func assertLatestIdx(t *testing.T, db database.Database, sourceAddress ids.ShortID, assetID ids.ID, expectedIdx uint64) {
279279
require := require.New(t)
280280

281-
db := prefixdb.New(dbPrefixIndexer, baseDB)
282281
addressDB := prefixdb.New(sourceAddress[:], db)
283282
assetDB := prefixdb.New(assetID[:], addressDB)
284283

@@ -288,17 +287,9 @@ func assertLatestIdx(t *testing.T, baseDB database.Database, sourceAddress ids.S
288287
require.Equal(expectedIdxBytes, idxBytes)
289288
}
290289

291-
func assertIndexedTX(
292-
t *testing.T,
293-
metadataDB database.Database,
294-
index uint64,
295-
sourceAddress ids.ShortID,
296-
assetID ids.ID,
297-
transactionID ids.ID,
298-
) {
290+
func assertIndexedTX(t *testing.T, db database.Database, index uint64, sourceAddress ids.ShortID, assetID ids.ID, transactionID ids.ID) {
299291
require := require.New(t)
300292

301-
db := prefixdb.New(dbPrefixIndexer, metadataDB)
302293
addressDB := prefixdb.New(sourceAddress[:], db)
303294
assetDB := prefixdb.New(assetID[:], addressDB)
304295

@@ -316,24 +307,26 @@ func assertIndexedTX(
316307
// - "idx": 2
317308
// - 0: txID1
318309
// - 1: txID1
319-
func initTestTxIndex(t *testing.T, baseDB database.Database, address ids.ShortID, assetID ids.ID, txCount int) []ids.ID {
310+
func initTestTxIndex(t *testing.T, db *versiondb.Database, address ids.ShortID, assetID ids.ID, txCount int) []ids.ID {
320311
require := require.New(t)
321312

322313
testTxs := make([]ids.ID, txCount)
323314
for i := 0; i < txCount; i++ {
324315
testTxs[i] = ids.GenerateTestID()
325316
}
326317

327-
db := prefixdb.New(dbPrefixIndexer, baseDB)
328318
addressPrefixDB := prefixdb.New(address[:], db)
329319
assetPrefixDB := prefixdb.New(assetID[:], addressPrefixDB)
330320

331321
for i, txID := range testTxs {
332322
idxBytes := database.PackUInt64(uint64(i))
333323
require.NoError(assetPrefixDB.Put(idxBytes, txID[:]))
334324
}
325+
_, err := db.CommitBatch()
326+
require.NoError(err)
335327

336328
idxBytes := database.PackUInt64(uint64(len(testTxs)))
337329
require.NoError(assetPrefixDB.Put([]byte("idx"), idxBytes))
330+
require.NoError(db.Commit())
338331
return testTxs
339332
}

vms/avm/service_test.go

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import (
1818
"github.com/ava-labs/avalanchego/chains/atomic"
1919
"github.com/ava-labs/avalanchego/codec"
2020
"github.com/ava-labs/avalanchego/database"
21-
"github.com/ava-labs/avalanchego/database/prefixdb"
2221
"github.com/ava-labs/avalanchego/ids"
2322
"github.com/ava-labs/avalanchego/snow"
2423
"github.com/ava-labs/avalanchego/snow/choices"
@@ -262,13 +261,7 @@ func TestServiceGetTxs(t *testing.T) {
262261
service := &Service{vm: env.vm}
263262

264263
var err error
265-
env.vm.addressTxsIndexer, err = index.NewIndexer(
266-
prefixdb.New(dbPrefixIndexer, env.vm.metadataDB),
267-
env.vm.ctx.Log,
268-
"",
269-
prometheus.NewRegistry(),
270-
false,
271-
)
264+
env.vm.addressTxsIndexer, err = index.NewIndexer(env.vm.db, env.vm.ctx.Log, "", prometheus.NewRegistry(), false)
272265
require.NoError(err)
273266

274267
assetID := ids.GenerateTestID()
@@ -277,7 +270,7 @@ func TestServiceGetTxs(t *testing.T) {
277270
require.NoError(err)
278271

279272
testTxCount := 25
280-
testTxs := initTestTxIndex(t, env.vm.metadataDB, addr, assetID, testTxCount)
273+
testTxs := initTestTxIndex(t, env.vm.db, addr, assetID, testTxCount)
281274

282275
env.vm.ctx.Lock.Unlock()
283276

vms/avm/state/state.go

Lines changed: 16 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
package state
55

66
import (
7-
"context"
87
"errors"
98
"fmt"
109
"time"
@@ -20,7 +19,6 @@ import (
2019
"github.com/ava-labs/avalanchego/vms/avm/block"
2120
"github.com/ava-labs/avalanchego/vms/avm/txs"
2221
"github.com/ava-labs/avalanchego/vms/components/avax"
23-
"github.com/ava-labs/avalanchego/x/merkledb"
2422
)
2523

2624
const (
@@ -40,8 +38,7 @@ var (
4038
timestampKey = []byte{0x01}
4139
lastAcceptedKey = []byte{0x02}
4240

43-
_ State = (*state)(nil)
44-
_ avax.UTXOState = (*utxoState)(nil)
41+
_ State = (*state)(nil)
4542
)
4643

4744
type ReadOnlyChain interface {
@@ -93,7 +90,7 @@ type State interface {
9390
CommitBatch() (database.Batch, error)
9491

9592
// Checksums returns the current TxChecksum and UTXOChecksum.
96-
Checksums(ctx context.Context) (txChecksum ids.ID, utxoChecksum ids.ID, err error)
93+
Checksums() (txChecksum ids.ID, utxoChecksum ids.ID)
9794

9895
Close() error
9996
}
@@ -114,10 +111,8 @@ type State interface {
114111
* '-- lastAcceptedKey -> lastAccepted
115112
*/
116113
type state struct {
117-
parser block.Parser
118-
db *versiondb.Database
119-
metadataDB database.Database
120-
stateDB merkledb.MerkleDB
114+
parser block.Parser
115+
db *versiondb.Database
121116

122117
modifiedUTXOs map[ids.ID]*avax.UTXO // map of modified UTXOID -> *UTXO if the UTXO is nil, it has been removed
123118
utxoDB database.Database
@@ -145,29 +140,16 @@ type state struct {
145140
}
146141

147142
func New(
148-
ctx context.Context,
149-
versionDB *versiondb.Database,
150-
stateDB merkledb.MerkleDB,
151-
metadataDB database.Database,
143+
db *versiondb.Database,
152144
parser block.Parser,
153145
metrics prometheus.Registerer,
154146
trackChecksums bool,
155-
merkleDBConfig merkledb.Config,
156147
) (State, error) {
157-
utxoDB, err := merkledb.New(
158-
ctx,
159-
prefixdb.New(utxoPrefix, stateDB),
160-
merkleDBConfig,
161-
"utxo_db",
162-
)
163-
if err != nil {
164-
return nil, fmt.Errorf("failed to initialize utxo db: %w", err)
165-
}
166-
167-
txDB := prefixdb.New(txPrefix, metadataDB)
168-
blockIDDB := prefixdb.New(blockIDPrefix, metadataDB)
169-
blockDB := prefixdb.New(blockPrefix, metadataDB)
170-
singletonDB := prefixdb.New(singletonPrefix, metadataDB)
148+
utxoDB := prefixdb.New(utxoPrefix, db)
149+
txDB := prefixdb.New(txPrefix, db)
150+
blockIDDB := prefixdb.New(blockIDPrefix, db)
151+
blockDB := prefixdb.New(blockPrefix, db)
152+
singletonDB := prefixdb.New(singletonPrefix, db)
171153

172154
txCache, err := metercacher.New[ids.ID, *txs.Tx](
173155
"tx_cache",
@@ -196,28 +178,18 @@ func New(
196178
return nil, err
197179
}
198180

199-
avaxUTXOState, err := avax.NewMeteredUTXOState(
200-
utxoDB,
201-
parser.Codec(),
202-
metrics,
203-
trackChecksums,
204-
)
181+
utxoState, err := avax.NewMeteredUTXOState(utxoDB, parser.Codec(), metrics, trackChecksums)
205182
if err != nil {
206183
return nil, err
207184
}
208185

209186
s := &state{
210-
parser: parser,
211-
db: versionDB,
212-
metadataDB: metadataDB,
213-
stateDB: stateDB,
187+
parser: parser,
188+
db: db,
214189

215190
modifiedUTXOs: make(map[ids.ID]*avax.UTXO),
216191
utxoDB: utxoDB,
217-
utxoState: utxoState{
218-
UTXOState: avaxUTXOState,
219-
db: utxoDB,
220-
},
192+
utxoState: utxoState,
221193

222194
addedTxs: make(map[ids.ID]*txs.Tx),
223195
txCache: txCache,
@@ -442,8 +414,6 @@ func (s *state) Close() error {
442414
s.blockIDDB.Close(),
443415
s.blockDB.Close(),
444416
s.singletonDB.Close(),
445-
s.stateDB.Close(),
446-
s.metadataDB.Close(),
447417
s.db.Close(),
448418
)
449419
}
@@ -530,13 +500,8 @@ func (s *state) writeMetadata() error {
530500
return nil
531501
}
532502

533-
func (s *state) Checksums(ctx context.Context) (ids.ID, ids.ID, error) {
534-
utxoChecksum, err := s.utxoState.Checksum(ctx)
535-
if err != nil {
536-
return ids.ID{}, ids.ID{}, err
537-
}
538-
539-
return s.txChecksum, utxoChecksum, nil
503+
func (s *state) Checksums() (ids.ID, ids.ID) {
504+
return s.txChecksum, s.utxoState.Checksum()
540505
}
541506

542507
func (s *state) initTxChecksum() error {
@@ -568,12 +533,3 @@ func (s *state) updateTxChecksum(modifiedID ids.ID) {
568533

569534
s.txChecksum = s.txChecksum.XOR(modifiedID)
570535
}
571-
572-
type utxoState struct {
573-
avax.UTXOState
574-
db merkledb.MerkleDB
575-
}
576-
577-
func (u utxoState) Checksum(ctx context.Context) (ids.ID, error) {
578-
return u.db.GetMerkleRoot(ctx)
579-
}

0 commit comments

Comments
 (0)