diff --git a/node/consensus/data/peer_messaging.go b/node/consensus/data/peer_messaging.go index 8ff0faf..ed4cb34 100644 --- a/node/consensus/data/peer_messaging.go +++ b/node/consensus/data/peer_messaging.go @@ -428,7 +428,7 @@ func (e *DataClockConsensusEngine) handleMint( highestIncrement = previousIncrement } - txn, err := e.coinStore.NewTransaction() + txn, err := e.coinStore.NewTransaction(false) if err != nil { return nil, errors.Wrap(err, "handle mint") } diff --git a/node/consensus/data/token_handle_mint_test.go b/node/consensus/data/token_handle_mint_test.go index 26a073e..60af3e2 100644 --- a/node/consensus/data/token_handle_mint_test.go +++ b/node/consensus/data/token_handle_mint_test.go @@ -661,7 +661,7 @@ func TestHandlePreMidnightMint(t *testing.T) { assert.Len(t, success.Requests, 1) assert.Len(t, fail.Requests, 1) - txn, _ := app.CoinStore.NewTransaction() + txn, _ := app.CoinStore.NewTransaction(false) for i, o := range app.TokenOutputs.Outputs { switch e := o.Output.(type) { case *protobufs.TokenOutput_Coin: @@ -670,7 +670,7 @@ func TestHandlePreMidnightMint(t *testing.T) { err = app.CoinStore.PutCoin(txn, 1, a, e.Coin) assert.NoError(t, err) case *protobufs.TokenOutput_DeletedCoin: - c, err := app.CoinStore.GetCoinByAddress(txn, e.DeletedCoin.Address) + c, err := app.CoinStore.GetCoinByAddress(nil, e.DeletedCoin.Address) assert.NoError(t, err) err = app.CoinStore.DeleteCoin(txn, e.DeletedCoin.Address, c) assert.NoError(t, err) diff --git a/node/consensus/time/data_time_reel.go b/node/consensus/time/data_time_reel.go index a46e499..d0ee3f2 100644 --- a/node/consensus/time/data_time_reel.go +++ b/node/consensus/time/data_time_reel.go @@ -290,7 +290,7 @@ func (d *DataTimeReel) createGenesisFrame() ( panic(err) } - txn, err := d.clockStore.NewTransaction() + txn, err := d.clockStore.NewTransaction(false) if err != nil { panic(err) } @@ -311,7 +311,7 @@ func (d *DataTimeReel) createGenesisFrame() ( panic(err) } - txn, err = d.clockStore.NewTransaction() + txn, err = d.clockStore.NewTransaction(false) if err != nil { panic(err) } @@ -531,7 +531,7 @@ func (d *DataTimeReel) storePending( zap.String("distance", distance.Text(16)), ) - txn, err := d.clockStore.NewTransaction() + txn, err := d.clockStore.NewTransaction(false) if err != nil { panic(err) } @@ -638,7 +638,7 @@ func (d *DataTimeReel) setHead(frame *protobufs.ClockFrame, distance *big.Int) e zap.Uint64("head_number", d.head.FrameNumber), zap.String("head_output_tag", hex.EncodeToString(d.head.Output[:64])), ) - txn, err := d.clockStore.NewTransaction() + txn, err := d.clockStore.NewTransaction(false) if err != nil { panic(err) } @@ -933,7 +933,7 @@ func (d *DataTimeReel) forkChoice( rightReplaySelectors = rightReplaySelectors[1:] - txn, err := d.clockStore.NewTransaction() + txn, err := d.clockStore.NewTransaction(false) if err != nil { panic(err) } @@ -956,7 +956,7 @@ func (d *DataTimeReel) forkChoice( frameNumber++ } - txn, err := d.clockStore.NewTransaction() + txn, err := d.clockStore.NewTransaction(false) if err != nil { panic(err) } diff --git a/node/consensus/time/data_time_reel_test.go b/node/consensus/time/data_time_reel_test.go index cc7e46d..263e9dc 100644 --- a/node/consensus/time/data_time_reel_test.go +++ b/node/consensus/time/data_time_reel_test.go @@ -187,6 +187,7 @@ func TestDataTimeReel(t *testing.T) { }, pubKeys, true, + func() []*tries.RollingFrecencyCritbitTrie { return []*tries.RollingFrecencyCritbitTrie{} }, ) err = d.Start() diff --git a/node/consensus/time/master_time_reel.go b/node/consensus/time/master_time_reel.go index aec5833..4b67cad 100644 --- a/node/consensus/time/master_time_reel.go +++ b/node/consensus/time/master_time_reel.go @@ -164,7 +164,7 @@ func (m *MasterTimeReel) createGenesisFrame() *protobufs.ClockFrame { panic(err) } - txn, err := m.clockStore.NewTransaction() + txn, err := m.clockStore.NewTransaction(false) if err != nil { panic(err) } @@ -212,7 +212,7 @@ func (m *MasterTimeReel) runLoop() { continue } - txn, err := m.clockStore.NewTransaction() + txn, err := m.clockStore.NewTransaction(false) if err != nil { panic(err) } @@ -281,7 +281,7 @@ func (m *MasterTimeReel) processPending() { continue } - txn, err := m.clockStore.NewTransaction() + txn, err := m.clockStore.NewTransaction(false) if err != nil { panic(err) } diff --git a/node/execution/intrinsics/token/application/token_handle_prover_join_test.go b/node/execution/intrinsics/token/application/token_handle_prover_join_test.go index 521fbb9..0d40c49 100644 --- a/node/execution/intrinsics/token/application/token_handle_prover_join_test.go +++ b/node/execution/intrinsics/token/application/token_handle_prover_join_test.go @@ -83,7 +83,7 @@ func TestHandleProverJoin(t *testing.T) { [][]byte{bpub}, ) selbi, _ := gen.GetSelector() - txn, _ := app.ClockStore.NewTransaction() + txn, _ := app.ClockStore.NewTransaction(false) app.ClockStore.StageDataClockFrame(selbi.FillBytes(make([]byte, 32)), gen, txn) app.ClockStore.CommitDataClockFrame(gen.Filter, 0, selbi.FillBytes(make([]byte, 32)), app.Tries, txn, false) txn.Commit() @@ -115,7 +115,7 @@ func TestHandleProverJoin(t *testing.T) { assert.Len(t, fail.Requests, 0) app.Tries = append(app.Tries, &tries.RollingFrecencyCritbitTrie{}) app.Tries[1].Add(addr, 0) - txn, _ = app.ClockStore.NewTransaction() + txn, _ = app.ClockStore.NewTransaction(false) frame1, _ := wprover.ProveDataClockFrame(gen, [][]byte{}, []*protobufs.InclusionAggregateProof{}, bprivKey, time.Now().UnixMilli(), 10000) selbi, _ = frame1.GetSelector() app.ClockStore.StageDataClockFrame(selbi.FillBytes(make([]byte, 32)), frame1, txn) @@ -144,7 +144,7 @@ func TestHandleProverJoin(t *testing.T) { false, ) assert.Error(t, err) - txn, _ = app.ClockStore.NewTransaction() + txn, _ = app.ClockStore.NewTransaction(false) frame2, _ := wprover.ProveDataClockFrame(frame1, [][]byte{}, []*protobufs.InclusionAggregateProof{}, bprivKey, time.Now().UnixMilli(), 10000) selbi, _ = frame2.GetSelector() app.ClockStore.StageDataClockFrame(selbi.FillBytes(make([]byte, 32)), frame2, txn) @@ -205,7 +205,7 @@ func TestHandleProverJoin(t *testing.T) { assert.NoError(t, err) assert.Len(t, success.Requests, 1) assert.Len(t, app.TokenOutputs.Outputs, 1) - txn, _ = app.CoinStore.NewTransaction() + txn, _ = app.CoinStore.NewTransaction(false) for i, o := range app.TokenOutputs.Outputs { switch e := o.Output.(type) { case *protobufs.TokenOutput_Coin: @@ -233,7 +233,7 @@ func TestHandleProverJoin(t *testing.T) { } } err = txn.Commit() - txn, _ = app.ClockStore.NewTransaction() + txn, _ = app.ClockStore.NewTransaction(false) frame3, _ := wprover.ProveDataClockFrame(frame2, [][]byte{}, []*protobufs.InclusionAggregateProof{}, bprivKey, time.Now().UnixMilli(), 10000) selbi, _ = frame3.GetSelector() app.ClockStore.StageDataClockFrame(selbi.FillBytes(make([]byte, 32)), frame3, txn) diff --git a/node/execution/intrinsics/token/token_execution_engine.go b/node/execution/intrinsics/token/token_execution_engine.go index b8ce7ca..eab5303 100644 --- a/node/execution/intrinsics/token/token_execution_engine.go +++ b/node/execution/intrinsics/token/token_execution_engine.go @@ -185,7 +185,7 @@ func NewTokenExecutionEngine( panic(err) } - txn, err := clockStore.NewTransaction() + txn, err := clockStore.NewTransaction(false) if err != nil { panic(err) } @@ -249,7 +249,7 @@ func NewTokenExecutionEngine( panic(err) } - txn, err := clockStore.NewTransaction() + txn, err := clockStore.NewTransaction(false) if err != nil { panic(err) } @@ -559,7 +559,7 @@ func (e *TokenExecutionEngine) ProcessFrame( return nil, errors.Wrap(err, "process frame") } case *protobufs.TokenOutput_DeletedCoin: - coin, err := e.coinStore.GetCoinByAddress(txn, o.DeletedCoin.Address) + coin, err := e.coinStore.GetCoinByAddress(nil, o.DeletedCoin.Address) if err != nil { txn.Abort() return nil, errors.Wrap(err, "process frame") diff --git a/node/execution/intrinsics/token/token_genesis.go b/node/execution/intrinsics/token/token_genesis.go index 35f8a6c..b7d2e71 100644 --- a/node/execution/intrinsics/token/token_genesis.go +++ b/node/execution/intrinsics/token/token_genesis.go @@ -848,7 +848,7 @@ func CreateGenesisState( totalExecutions, ), ) - txn, err := coinStore.NewTransaction() + txn, err := coinStore.NewTransaction(false) for _, output := range genesisState.Outputs { if err != nil { panic(err) @@ -872,7 +872,7 @@ func CreateGenesisState( panic(err) } - txn, err = clockStore.NewTransaction() + txn, err = clockStore.NewTransaction(false) if err != nil { panic(err) } @@ -989,7 +989,7 @@ func CreateGenesisState( }) logger.Info("serializing execution state to store") - txn, err := coinStore.NewTransaction() + txn, err := coinStore.NewTransaction(false) for _, output := range genesisState.Outputs { if err != nil { panic(err) diff --git a/node/main.go b/node/main.go index cef6c13..84a5c91 100644 --- a/node/main.go +++ b/node/main.go @@ -598,14 +598,14 @@ func RunForkRepairIfNeeded( if bytes.Equal(badFrameSelector, compareSel.FillBytes(make([]byte, 32))) { logger.Info("performing fork repair") - txn, _ := coinStore.NewTransaction() + txn, _ := coinStore.NewTransaction(false) _, outs, _ := application.GetOutputsFromClockFrame(frame) logger.Info("removing invalid frame at position 48995") for i, output := range outs.Outputs { switch o := output.Output.(type) { case *protobufs.TokenOutput_Coin: address, _ := token.GetAddressOfCoin(o.Coin, frame.FrameNumber, uint64(i)) - coin, err := coinStore.GetCoinByAddress(txn, address) + coin, err := coinStore.GetCoinByAddress(nil, address) if err != nil { fmt.Println(err) return @@ -656,7 +656,7 @@ func RunForkRepairIfNeeded( return } - txn, _ := clockStore.NewTransaction() + txn, _ := clockStore.NewTransaction(false) if err := overrideHead( txn, clockStore, diff --git a/node/store/clock.go b/node/store/clock.go index 8b2f4cf..c9a70f3 100644 --- a/node/store/clock.go +++ b/node/store/clock.go @@ -18,7 +18,7 @@ import ( ) type ClockStore interface { - NewTransaction() (Transaction, error) + NewTransaction(indexed bool) (Transaction, error) GetLatestMasterClockFrame(filter []byte) (*protobufs.ClockFrame, error) GetEarliestMasterClockFrame(filter []byte) (*protobufs.ClockFrame, error) GetMasterClockFrame( @@ -453,8 +453,8 @@ func clockDataSeniorityKey( return key } -func (p *PebbleClockStore) NewTransaction() (Transaction, error) { - return p.db.NewBatch(), nil +func (p *PebbleClockStore) NewTransaction(indexed bool) (Transaction, error) { + return p.db.NewBatch(indexed), nil } // GetEarliestMasterClockFrame implements ClockStore. @@ -746,7 +746,7 @@ func (p *PebbleClockStore) saveAggregateProofs( shouldClose := false if txn == nil { var err error - txn, err = p.NewTransaction() + txn, err = p.NewTransaction(false) if err != nil { return err } @@ -1050,7 +1050,7 @@ func (p *PebbleClockStore) DeleteDataClockFrameRange( fromFrameNumber uint64, toFrameNumber uint64, ) error { - txn, err := p.NewTransaction() + txn, err := p.NewTransaction(false) if err != nil { return errors.Wrap(err, "delete data clock frame range") } diff --git a/node/store/coin.go b/node/store/coin.go index a5da8c7..d337a8f 100644 --- a/node/store/coin.go +++ b/node/store/coin.go @@ -14,7 +14,7 @@ import ( ) type CoinStore interface { - NewTransaction() (Transaction, error) + NewTransaction(indexed bool) (Transaction, error) GetCoinsForOwner(owner []byte) ([]uint64, [][]byte, []*protobufs.Coin, error) GetPreCoinProofsForOwner(owner []byte) ( []uint64, @@ -117,8 +117,8 @@ func genesisSeedKey() []byte { return []byte{COIN, GENESIS} } -func (p *PebbleCoinStore) NewTransaction() (Transaction, error) { - return p.db.NewBatch(), nil +func (p *PebbleCoinStore) NewTransaction(indexed bool) (Transaction, error) { + return p.db.NewBatch(indexed), nil } func (p *PebbleCoinStore) GetCoinsForOwner( @@ -415,7 +415,7 @@ func (p *PebbleCoinStore) SetMigrationVersion( return errors.Wrap(err, "migrate") } - txn, err := p.NewTransaction() + txn, err := p.NewTransaction(false) if err != nil { return nil } @@ -493,7 +493,7 @@ func (p *PebbleCoinStore) internalMigrate( panic(err) } - txn, err := p.NewTransaction() + txn, err := p.NewTransaction(false) if err != nil { return nil } @@ -537,7 +537,7 @@ func (p *PebbleCoinStore) Migrate(filter []byte, genesisSeedHex string) error { return errors.Wrap(err, "migrate") } - txn, err := p.NewTransaction() + txn, err := p.NewTransaction(false) if err != nil { return nil } diff --git a/node/store/data_proof.go b/node/store/data_proof.go index 94644a9..b2c6336 100644 --- a/node/store/data_proof.go +++ b/node/store/data_proof.go @@ -122,7 +122,7 @@ func dataTimeProofLatestKey(peerId []byte) []byte { } func (p *PebbleDataProofStore) NewTransaction() (Transaction, error) { - return p.db.NewBatch(), nil + return p.db.NewBatch(false), nil } func internalGetAggregateProof( diff --git a/node/store/inmem.go b/node/store/inmem.go index 81c2a16..558595c 100644 --- a/node/store/inmem.go +++ b/node/store/inmem.go @@ -363,7 +363,7 @@ func (d *InMemKVDB) Delete(key []byte) error { return nil } -func (d *InMemKVDB) NewBatch() Transaction { +func (d *InMemKVDB) NewBatch(indexed bool) Transaction { if !d.open { return nil } diff --git a/node/store/key.go b/node/store/key.go index 0031e3c..1169430 100644 --- a/node/store/key.go +++ b/node/store/key.go @@ -217,7 +217,7 @@ func keyBundleEarliestKey(provingKey []byte) []byte { } func (p *PebbleKeyStore) NewTransaction() (Transaction, error) { - return p.db.NewBatch(), nil + return p.db.NewBatch(false), nil } // Stages a proving key for later inclusion on proof of meaningful work. diff --git a/node/store/kvdb.go b/node/store/kvdb.go index 4143d3a..61422da 100644 --- a/node/store/kvdb.go +++ b/node/store/kvdb.go @@ -8,7 +8,7 @@ type KVDB interface { Get(key []byte) ([]byte, io.Closer, error) Set(key, value []byte) error Delete(key []byte) error - NewBatch() Transaction + NewBatch(indexed bool) Transaction NewIter(lowerBound []byte, upperBound []byte) (Iterator, error) Compact(start, end []byte, parallelize bool) error CompactAll() error diff --git a/node/store/pebble.go b/node/store/pebble.go index cd793d3..6e497be 100644 --- a/node/store/pebble.go +++ b/node/store/pebble.go @@ -33,9 +33,15 @@ func (p *PebbleDB) Delete(key []byte) error { return p.db.Delete(key, &pebble.WriteOptions{Sync: true}) } -func (p *PebbleDB) NewBatch() Transaction { - return &PebbleTransaction{ - b: p.db.NewIndexedBatch(), +func (p *PebbleDB) NewBatch(indexed bool) Transaction { + if indexed { + return &PebbleTransaction{ + b: p.db.NewIndexedBatch(), + } + } else { + return &PebbleTransaction{ + b: p.db.NewBatch(), + } } } diff --git a/node/store/peerstore.go b/node/store/peerstore.go index 712a002..c59e260 100644 --- a/node/store/peerstore.go +++ b/node/store/peerstore.go @@ -180,7 +180,7 @@ func (d *PeerstoreDatastore) Close() (err error) { func (d *PeerstoreDatastore) Batch(ctx context.Context) (ds.Batch, error) { return &batch{ - b: &transaction{tx: d.db.NewBatch()}, + b: &transaction{tx: d.db.NewBatch(false)}, db: d.db, }, nil } @@ -189,7 +189,7 @@ func (d *PeerstoreDatastore) NewTransaction( ctx context.Context, readOnly bool, ) (ds.Txn, error) { - tx := d.db.NewBatch() + tx := d.db.NewBatch(false) return &transaction{tx}, nil }