Skip to content

Commit

Permalink
Prune MaxTxNums table (#11664)
Browse files Browse the repository at this point in the history
Main change is as follow that we can customize the seek in
`TxNumsReader` now, so if you have a block reader you can inject it and
use that instead than having the index in DB for antiquated snapshots. I
did not implement live pruning for this yet as it is probably growing
really slowly

---------

Co-authored-by: alex.sharov <AskAlexSharov@gmail.com>
  • Loading branch information
Giulio2002 and AskAlexSharov committed Aug 24, 2024
1 parent f4b4cf3 commit e854d10
Show file tree
Hide file tree
Showing 60 changed files with 994 additions and 557 deletions.
3 changes: 2 additions & 1 deletion cmd/devnet/services/polygon/proofgenerator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import (
"github.com/erigontech/erigon-lib/common/hexutility"
"github.com/erigontech/erigon-lib/kv"
"github.com/erigontech/erigon-lib/kv/memdb"
"github.com/erigontech/erigon-lib/kv/rawdbv3"
"github.com/erigontech/erigon-lib/log/v3"
"github.com/erigontech/erigon/accounts/abi/bind"
"github.com/erigontech/erigon/cmd/devnet/blocks"
Expand Down Expand Up @@ -153,7 +154,7 @@ func (rg *requestGenerator) GetTransactionReceipt(ctx context.Context, hash libc
}
defer tx.Rollback()

_, _, _, ibs, _, err := transactions.ComputeTxEnv(ctx, engine, block, chainConfig, reader, tx, 0)
_, _, _, ibs, _, err := transactions.ComputeTxEnv(ctx, engine, block, chainConfig, reader, rawdbv3.TxNums, tx, 0)

if err != nil {
return nil, err
Expand Down
3 changes: 2 additions & 1 deletion cmd/evm/internal/t8ntool/transition.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import (
"github.com/urfave/cli/v2"

"github.com/erigontech/erigon-lib/common/datadir"
"github.com/erigontech/erigon-lib/kv/rawdbv3"
"github.com/erigontech/erigon-lib/kv/temporal/temporaltest"
"github.com/erigontech/erigon-lib/log/v3"
"github.com/erigontech/erigon/eth/consensuschain"
Expand Down Expand Up @@ -344,7 +345,7 @@ func Main(ctx *cli.Context) error {
body, _ := rlp.EncodeToBytes(txs)
collector := make(Alloc)

dumper := state.NewDumper(tx, prestate.Env.Number)
dumper := state.NewDumper(tx, rawdbv3.TxNums, prestate.Env.Number)
dumper.DumpToCollector(collector, false, false, libcommon.Address{}, 0)
return dispatchOutput(ctx, baseDir, result, collector, body)
}
Expand Down
3 changes: 2 additions & 1 deletion cmd/evm/runner.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import (
common2 "github.com/erigontech/erigon-lib/common/dbg"
"github.com/erigontech/erigon-lib/common/hexutility"
"github.com/erigontech/erigon-lib/kv/memdb"
"github.com/erigontech/erigon-lib/kv/rawdbv3"
"github.com/erigontech/erigon-lib/log/v3"
state2 "github.com/erigontech/erigon-lib/state"

Expand Down Expand Up @@ -313,7 +314,7 @@ func runCmd(ctx *cli.Context) error {
fmt.Println("Could not commit state: ", err)
os.Exit(1)
}
fmt.Println(string(state.NewDumper(tx, 0).DefaultDump()))
fmt.Println(string(state.NewDumper(tx, rawdbv3.TxNums, 0).DefaultDump()))
}

if memProfilePath := ctx.String(MemProfileFlag.Name); memProfilePath != "" {
Expand Down
3 changes: 2 additions & 1 deletion cmd/evm/staterunner.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import (
"github.com/erigontech/erigon-lib/common/datadir"
"github.com/erigontech/erigon-lib/config3"
"github.com/erigontech/erigon-lib/kv/mdbx"
"github.com/erigontech/erigon-lib/kv/rawdbv3"
"github.com/erigontech/erigon-lib/kv/temporal"
"github.com/erigontech/erigon-lib/log/v3"
libstate "github.com/erigontech/erigon-lib/state"
Expand Down Expand Up @@ -143,7 +144,7 @@ func aggregateResultsFromStateTests(
MustOpen()
defer _db.Close()

cr := rawdb.NewCanonicalReader()
cr := rawdb.NewCanonicalReader(rawdbv3.TxNums)
agg, err := libstate.NewAggregator(context.Background(), dirs, config3.HistoryV3AggregationStep, _db, cr, log.New())
if err != nil {
return nil, err
Expand Down
3 changes: 1 addition & 2 deletions cmd/integration/commands/reset_state.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,9 +140,8 @@ func printStages(tx kv.Tx, snapshots *freezeblocks.RoSnapshots, borSn *freezeblo
fmt.Fprintf(w, "blocks: segments=%d, indices=%d\n", snapshots.SegmentsMax(), snapshots.IndicesMax())
fmt.Fprintf(w, "blocks.bor: segments=%d, indices=%d\n\n", borSn.SegmentsMax(), borSn.IndicesMax())

_, lastBlockInHistSnap, _ := rawdbv3.TxNums.FindBlockNum(tx, agg.EndTxNumMinimax())
_lb, _lt, _ := rawdbv3.TxNums.Last(tx)
fmt.Fprintf(w, "state.history: idx steps: %.02f, lastBlockInSnap=%d, TxNums_Index(%d,%d), filesAmount: %d\n\n", rawdbhelpers.IdxStepsCountV3(tx), lastBlockInHistSnap, _lb, _lt, agg.FilesAmount())
fmt.Fprintf(w, "state.history: idx steps: %.02f, TxNums_Index(%d,%d), filesAmount: %d\n\n", rawdbhelpers.IdxStepsCountV3(tx), _lb, _lt, agg.FilesAmount())
ethTxSequence, err := tx.ReadSequence(kv.EthTx)
if err != nil {
return err
Expand Down
6 changes: 4 additions & 2 deletions cmd/integration/commands/stages.go
Original file line number Diff line number Diff line change
Expand Up @@ -1270,7 +1270,9 @@ func allSnapshots(ctx context.Context, db kv.RoDB, logger log.Logger) (*freezebl
_allSnapshotsSingleton = freezeblocks.NewRoSnapshots(snapCfg, dirs.Snap, 0, logger)
_allBorSnapshotsSingleton = freezeblocks.NewBorRoSnapshots(snapCfg, dirs.Snap, 0, logger)
var err error
cr := rawdb.NewCanonicalReader()
blockReader := freezeblocks.NewBlockReader(_allSnapshotsSingleton, _allBorSnapshotsSingleton)

cr := rawdb.NewCanonicalReader(rawdbv3.TxNums.WithCustomReadTxNumFunc(freezeblocks.ReadTxNumFuncFromBlockReader(ctx, blockReader)))
_aggSingleton, err = libstate.NewAggregator(ctx, dirs, config3.HistoryV3AggregationStep, db, cr, logger)
if err != nil {
panic(err)
Expand Down Expand Up @@ -1322,7 +1324,7 @@ func allSnapshots(ctx context.Context, db kv.RoDB, logger log.Logger) (*freezebl
ac := _aggSingleton.BeginFilesRo()
defer ac.Close()
ac.LogStats(tx, func(endTxNumMinimax uint64) (uint64, error) {
_, histBlockNumProgress, err := rawdbv3.TxNums.FindBlockNum(tx, endTxNumMinimax)
_, histBlockNumProgress, err := rawdbv3.TxNums.WithCustomReadTxNumFunc(freezeblocks.ReadTxNumFuncFromBlockReader(ctx, blockReader)).FindBlockNum(tx, endTxNumMinimax)
return histBlockNumProgress, err
})
return nil
Expand Down
10 changes: 6 additions & 4 deletions cmd/rpcdaemon/cli/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ import (
"github.com/erigontech/erigon/turbo/rpchelper"
"github.com/erigontech/erigon/turbo/services"
"github.com/erigontech/erigon/turbo/snapshotsync/freezeblocks"

// Force-load native and js packages, to trigger registration
_ "github.com/erigontech/erigon/eth/tracers/js"
_ "github.com/erigontech/erigon/eth/tracers/native"
Expand Down Expand Up @@ -394,8 +395,10 @@ func RemoteServices(ctx context.Context, cfg *httpcfg.HttpCfg, logger log.Logger
allBorSnapshots.OptimisticalyReopenWithDB(db)
allSnapshots.LogStat("remote")
allBorSnapshots.LogStat("bor:remote")
blockReader = freezeblocks.NewBlockReader(allSnapshots, allBorSnapshots)
txNumsReader := rawdbv3.TxNums.WithCustomReadTxNumFunc(freezeblocks.ReadTxNumFuncFromBlockReader(ctx, blockReader))

cr := rawdb.NewCanonicalReader()
cr := rawdb.NewCanonicalReader(txNumsReader)
agg, err := libstate.NewAggregator(ctx, cfg.Dirs, config3.HistoryV3AggregationStep, db, cr, logger)
if err != nil {
return nil, nil, nil, nil, nil, nil, nil, ff, fmt.Errorf("create aggregator: %w", err)
Expand All @@ -406,7 +409,7 @@ func RemoteServices(ctx context.Context, cfg *httpcfg.HttpCfg, logger log.Logger
aggTx := agg.BeginFilesRo()
defer aggTx.Close()
aggTx.LogStats(tx, func(endTxNumMinimax uint64) (uint64, error) {
_, histBlockNumProgress, err := rawdbv3.TxNums.FindBlockNum(tx, endTxNumMinimax)
_, histBlockNumProgress, err := txNumsReader.FindBlockNum(tx, endTxNumMinimax)
return histBlockNumProgress, err
})
return nil
Expand Down Expand Up @@ -437,7 +440,7 @@ func RemoteServices(ctx context.Context, cfg *httpcfg.HttpCfg, logger log.Logger
ac := agg.BeginFilesRo()
defer ac.Close()
ac.LogStats(tx, func(endTxNumMinimax uint64) (uint64, error) {
_, histBlockNumProgress, err := rawdbv3.TxNums.FindBlockNum(tx, endTxNumMinimax)
_, histBlockNumProgress, err := txNumsReader.FindBlockNum(tx, endTxNumMinimax)
return histBlockNumProgress, err
})
return nil
Expand All @@ -446,7 +449,6 @@ func RemoteServices(ctx context.Context, cfg *httpcfg.HttpCfg, logger log.Logger
}()
}
onNewSnapshot()
blockReader = freezeblocks.NewBlockReader(allSnapshots, allBorSnapshots)

db, err = temporal.New(rwKv, agg)
if err != nil {
Expand Down
3 changes: 3 additions & 0 deletions cmd/rpcdaemon/rpcservices/eth_backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,9 @@ func (back *RemoteBackend) AllTypes() []snaptype.Type { panic("not i
func (back *RemoteBackend) FrozenBlocks() uint64 { return back.blockReader.FrozenBlocks() }
func (back *RemoteBackend) FrozenBorBlocks() uint64 { return back.blockReader.FrozenBorBlocks() }
func (back *RemoteBackend) FrozenFiles() (list []string) { return back.blockReader.FrozenFiles() }
func (back *RemoteBackend) CanonicalBodyForStorage(ctx context.Context, tx kv.Getter, blockNum uint64) (body *types.BodyForStorage, err error) {
return back.blockReader.CanonicalBodyForStorage(ctx, tx, blockNum)
}
func (back *RemoteBackend) FreezingCfg() ethconfig.BlocksFreezing {
return back.blockReader.FreezingCfg()
}
Expand Down
4 changes: 3 additions & 1 deletion cmd/state/commands/opcode_tracer.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import (
libcommon "github.com/erigontech/erigon-lib/common"
"github.com/erigontech/erigon-lib/kv"
"github.com/erigontech/erigon-lib/kv/mdbx"
"github.com/erigontech/erigon-lib/kv/rawdbv3"

"github.com/erigontech/erigon/common/debug"
"github.com/erigontech/erigon/consensus"
Expand Down Expand Up @@ -594,7 +595,8 @@ func OpcodeTracer(genesis *types.Genesis, blockNum uint64, chaindata string, num
ot.fsumWriter = bufio.NewWriter(fsum)
}

dbstate, err := rpchelper.CreateHistoryStateReader(historyTx, block.NumberU64(), 0, chainConfig.ChainName)
dbstate, err := rpchelper.CreateHistoryStateReader(historyTx, rawdbv3.TxNums.WithCustomReadTxNumFunc(freezeblocks.ReadTxNumFuncFromBlockReader(context.TODO(), blockReader)),
block.NumberU64(), 0, chainConfig.ChainName)
if err != nil {
return err
}
Expand Down
9 changes: 6 additions & 3 deletions cmd/state/exec3/historical_trace_worker.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import (
"github.com/erigontech/erigon/eth/ethconfig/estimate"
"github.com/erigontech/erigon/ethdb/prune"
"github.com/erigontech/erigon/turbo/services"
"github.com/erigontech/erigon/turbo/snapshotsync/freezeblocks"
)

type HistoricalTraceWorker struct {
Expand Down Expand Up @@ -376,11 +377,13 @@ func CustomTraceMapReduce(fromBlock, toBlock uint64, consumer TraceConsumer, ctx
return h
}

fromTxNum, err := rawdbv3.TxNums.Min(tx, fromBlock)
txNumsReader := rawdbv3.TxNums.WithCustomReadTxNumFunc(freezeblocks.ReadTxNumFuncFromBlockReader(ctx, cfg.BlockReader))

fromTxNum, err := txNumsReader.Min(tx, fromBlock)
if err != nil {
return err
}
toTxNum, err := rawdbv3.TxNums.Max(tx, toBlock)
toTxNum, err := txNumsReader.Max(tx, toBlock)
if err != nil {
return err
}
Expand All @@ -406,7 +409,7 @@ func CustomTraceMapReduce(fromBlock, toBlock uint64, consumer TraceConsumer, ctx
workersExited.Store(true)
}()

inputTxNum, err := rawdbv3.TxNums.Min(tx, fromBlock)
inputTxNum, err := txNumsReader.Min(tx, fromBlock)
if err != nil {
return err
}
Expand Down
3 changes: 2 additions & 1 deletion core/genesis_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import (
libcommon "github.com/erigontech/erigon-lib/common"
"github.com/erigontech/erigon-lib/common/datadir"
"github.com/erigontech/erigon-lib/kv"
"github.com/erigontech/erigon-lib/kv/rawdbv3"
"github.com/erigontech/erigon-lib/kv/temporal/temporaltest"
"github.com/erigontech/erigon/core"
"github.com/erigontech/erigon/crypto"
Expand Down Expand Up @@ -152,7 +153,7 @@ func TestAllocConstructor(t *testing.T) {
defer tx.Rollback()

//TODO: support historyV3
reader, err := rpchelper.CreateHistoryStateReader(tx, 1, 0, genSpec.Config.ChainName)
reader, err := rpchelper.CreateHistoryStateReader(tx, rawdbv3.TxNums, 1, 0, genSpec.Config.ChainName)
require.NoError(err)
state := state.New(reader)
balance := state.GetBalance(address)
Expand Down
4 changes: 2 additions & 2 deletions core/genesis_write.go
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ func write(tx kv.RwTx, g *types.Genesis, dirs datadir.Dirs, logger log.Logger) (
if err := rawdb.WriteTd(tx, block.Hash(), block.NumberU64(), g.Difficulty); err != nil {
return nil, nil, err
}
if err := rawdbv3.TxNums.WriteForGenesis(tx, uint64(block.Transactions().Len()+1)); err != nil {
if err := rawdbv3.TxNums.ForcedWrite(tx, 0, uint64(block.Transactions().Len()+1)); err != nil {
return nil, nil, err
}

Expand Down Expand Up @@ -509,7 +509,7 @@ func GenesisToBlock(g *types.Genesis, dirs datadir.Dirs, logger log.Logger) (*ty
genesisTmpDB := mdbx.NewMDBX(logger).InMem(dirs.DataDir).MapSize(2 * datasize.GB).GrowthStep(1 * datasize.MB).MustOpen()
defer genesisTmpDB.Close()

cr := rawdb.NewCanonicalReader()
cr := rawdb.NewCanonicalReader(rawdbv3.TxNums)
agg, err := state2.NewAggregator(context.Background(), dirs, config3.HistoryV3AggregationStep, genesisTmpDB, cr, logger)
if err != nil {
return err
Expand Down
35 changes: 19 additions & 16 deletions core/rawdb/accessors_canonical_reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,17 +41,20 @@ type CanonicalTxnIds struct {
currentTxNum int
hasNext bool
endOfCurrentBlock uint64

txNumsReader rawdbv3.TxNumsReader
}
type CanonicalReader struct {
txNumsReader rawdbv3.TxNumsReader
}

func NewCanonicalReader() *CanonicalReader {
return &CanonicalReader{}
func NewCanonicalReader(txNumsReader rawdbv3.TxNumsReader) *CanonicalReader {
return &CanonicalReader{txNumsReader: txNumsReader}
}
func (*CanonicalReader) TxnIdsOfCanonicalBlocks(tx kv.Tx, fromTxNum, toTxNum int, asc order.By, limit int) (stream.U64, error) {
return TxnIdsOfCanonicalBlocks(tx, fromTxNum, toTxNum, asc, limit)
func (c *CanonicalReader) TxnIdsOfCanonicalBlocks(tx kv.Tx, fromTxNum, toTxNum int, asc order.By, limit int) (stream.U64, error) {
return TxnIdsOfCanonicalBlocks(tx, c.txNumsReader, fromTxNum, toTxNum, asc, limit)
}
func (*CanonicalReader) TxNum2ID(tx kv.Tx, blockNum uint64, blockHash common2.Hash, txNum uint64) (kv.TxnId, error) {
func (c *CanonicalReader) TxNum2ID(tx kv.Tx, blockNum uint64, blockHash common2.Hash, txNum uint64) (kv.TxnId, error) {
if blockNum == 0 {
return kv.TxnId(txNum), nil
}
Expand All @@ -60,11 +63,11 @@ func (*CanonicalReader) TxNum2ID(tx kv.Tx, blockNum uint64, blockHash common2.Ha
return 0, err
}
if b == nil { // freezed and pruned
_min, err := rawdbv3.TxNums.Min(tx, blockNum)
_min, err := c.txNumsReader.Min(tx, blockNum)
if err != nil {
return 0, err
}
_max, err := rawdbv3.TxNums.Max(tx, blockNum)
_max, err := c.txNumsReader.Max(tx, blockNum)
if err != nil {
return 0, err
}
Expand All @@ -76,7 +79,7 @@ func (*CanonicalReader) TxNum2ID(tx kv.Tx, blockNum uint64, blockHash common2.Ha
return kv.TxnId(b.BaseTxnID), nil
}

func (*CanonicalReader) BaseTxnID(tx kv.Tx, blockNum uint64, blockHash common2.Hash) (kv.TxnId, error) {
func (c *CanonicalReader) BaseTxnID(tx kv.Tx, blockNum uint64, blockHash common2.Hash) (kv.TxnId, error) {
if blockNum == 0 {
return kv.TxnId(0), nil
}
Expand All @@ -87,7 +90,7 @@ func (*CanonicalReader) BaseTxnID(tx kv.Tx, blockNum uint64, blockHash common2.H
return 0, err
}
if b == nil { // freezed and pruned
_min, err := rawdbv3.TxNums.Min(tx, blockNum)
_min, err := c.txNumsReader.Min(tx, blockNum)
if err != nil {
return 0, err
}
Expand All @@ -96,19 +99,19 @@ func (*CanonicalReader) BaseTxnID(tx kv.Tx, blockNum uint64, blockHash common2.H
return kv.TxnId(b.BaseTxnID), nil
}

func (*CanonicalReader) LastFrozenTxNum(tx kv.Tx) (kv.TxnId, error) {
func (c *CanonicalReader) LastFrozenTxNum(tx kv.Tx) (kv.TxnId, error) {
n, ok, err := ReadFirstNonGenesisHeaderNumber(tx)
if err != nil {
return 0, err
}
if !ok {
//seq, err := tx.ReadSequence(kv.EthTx)
//seq-1
_, _lastTxNumInFiles, err := rawdbv3.TxNums.Last(tx)
_, _lastTxNumInFiles, err := c.txNumsReader.Last(tx)
return kv.TxnId(_lastTxNumInFiles), err

}
_max, err := rawdbv3.TxNums.Max(tx, n)
_max, err := c.txNumsReader.Max(tx, n)
if err != nil {
return 0, err
}
Expand All @@ -119,15 +122,15 @@ func (*CanonicalReader) LastFrozenTxNum(tx kv.Tx) (kv.TxnId, error) {
// [fromTxNum, toTxNum)
// To get all canonical blocks, use fromTxNum=0, toTxNum=-1
// For reverse iteration use order.Desc and fromTxNum=-1, toTxNum=-1
func TxnIdsOfCanonicalBlocks(tx kv.Tx, fromTxNum, toTxNum int, asc order.By, limit int) (stream.U64, error) {
func TxnIdsOfCanonicalBlocks(tx kv.Tx, txNumsReader rawdbv3.TxNumsReader, fromTxNum, toTxNum int, asc order.By, limit int) (stream.U64, error) {
if asc && fromTxNum > 0 && toTxNum > 0 && fromTxNum >= toTxNum {
return nil, fmt.Errorf("fromTxNum >= toTxNum: %d, %d", fromTxNum, toTxNum)
}
if !asc && fromTxNum > 0 && toTxNum > 0 && fromTxNum <= toTxNum {
return nil, fmt.Errorf("fromTxNum <= toTxNum: %d, %d", fromTxNum, toTxNum)
}

it := &CanonicalTxnIds{tx: tx, fromTxNum: fromTxNum, toTxNum: toTxNum, orderAscend: asc, limit: limit, currentTxNum: -1}
it := &CanonicalTxnIds{tx: tx, txNumsReader: txNumsReader, fromTxNum: fromTxNum, toTxNum: toTxNum, orderAscend: asc, limit: limit, currentTxNum: -1}
if err := it.init(); err != nil {
it.Close() //it's responsibility of constructor (our) to close resource on error
return nil, err
Expand All @@ -143,7 +146,7 @@ func (s *CanonicalTxnIds) init() (err error) {
tx := s.tx
var from, to []byte
if s.fromTxNum >= 0 {
ok, blockFrom, err := rawdbv3.TxNums.FindBlockNum(tx, uint64(s.fromTxNum))
ok, blockFrom, err := s.txNumsReader.FindBlockNum(tx, uint64(s.fromTxNum))
if err != nil {
return err
}
Expand All @@ -153,7 +156,7 @@ func (s *CanonicalTxnIds) init() (err error) {
}

if s.toTxNum >= 0 {
ok, blockTo, err := rawdbv3.TxNums.FindBlockNum(tx, uint64(s.toTxNum))
ok, blockTo, err := s.txNumsReader.FindBlockNum(tx, uint64(s.toTxNum))
if err != nil {
return err
}
Expand Down
9 changes: 5 additions & 4 deletions core/rawdb/accessors_canonical_reader_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
libcommon "github.com/erigontech/erigon-lib/common"
"github.com/erigontech/erigon-lib/common/u256"
"github.com/erigontech/erigon-lib/kv/order"
"github.com/erigontech/erigon-lib/kv/rawdbv3"
"github.com/erigontech/erigon-lib/kv/stream"
"github.com/erigontech/erigon/core/rawdb"
"github.com/erigontech/erigon/core/types"
Expand Down Expand Up @@ -66,7 +67,7 @@ func TestCanonicalIter(t *testing.T) {
_, err = rawdb.WriteRawBodyIfNotExists(tx, libcommon.Hash{22}, 2, b)
require.NoError(err)

it, err := rawdb.TxnIdsOfCanonicalBlocks(tx, 0, -1, order.Asc, -1)
it, err := rawdb.TxnIdsOfCanonicalBlocks(tx, rawdbv3.TxNums, 0, -1, order.Asc, -1)
require.NoError(err)
require.Equal(true, it.HasNext())

Expand All @@ -91,21 +92,21 @@ func TestCanonicalIter(t *testing.T) {
return res
}

it, err = rawdb.TxnIdsOfCanonicalBlocks(tx, 0, 2+len(b.Transactions)+2, order.Asc, -1)
it, err = rawdb.TxnIdsOfCanonicalBlocks(tx, rawdbv3.TxNums, 0, 2+len(b.Transactions)+2, order.Asc, -1)
require.NoError(err)
require.Equal(true, it.HasNext())
exp := txNumsOfBlock(0)
t.Logf("expected full block 0: %v", exp)
require.Equal(exp, stream.ToArrU64Must(it))

it, err = rawdb.TxnIdsOfCanonicalBlocks(tx, 0, -1, order.Asc, -1)
it, err = rawdb.TxnIdsOfCanonicalBlocks(tx, rawdbv3.TxNums, 0, -1, order.Asc, -1)
require.NoError(err)
require.Equal(true, it.HasNext())
exp = append(append(txNumsOfBlock(0), txNumsOfBlock(2)...), txNumsOfBlock(4)...)
t.Logf("expected %v", exp)
require.Equal(exp, stream.ToArrU64Must(it))

rit, err := rawdb.TxnIdsOfCanonicalBlocks(tx, -1, -1, order.Desc, -1)
rit, err := rawdb.TxnIdsOfCanonicalBlocks(tx, rawdbv3.TxNums, -1, -1, order.Desc, -1)
require.NoError(err)
require.Equal(true, rit.HasNext())
sort.Slice(exp, func(i, j int) bool { return exp[i] > exp[j] })
Expand Down
Loading

0 comments on commit e854d10

Please sign in to comment.