From ac2543068fadf2e9f3f7633b6d39e5da892e88ac Mon Sep 17 00:00:00 2001 From: tjayrush Date: Wed, 29 Nov 2023 16:03:08 -0500 Subject: [PATCH 01/25] First attempt at arrayOfMaps approach --- .../chifra/internal/export/handle_show.go | 59 +++++++----- .../internal/transactions/handle_show.go | 94 ++++++++++--------- src/apps/chifra/pkg/identifiers/app_map.go | 52 ++++++++++ src/apps/chifra/pkg/monitor/monitor_read.go | 34 ++++++- 4 files changed, 168 insertions(+), 71 deletions(-) diff --git a/src/apps/chifra/internal/export/handle_show.go b/src/apps/chifra/internal/export/handle_show.go index dcac73665f..d37f12b97f 100644 --- a/src/apps/chifra/internal/export/handle_show.go +++ b/src/apps/chifra/internal/export/handle_show.go @@ -36,8 +36,8 @@ func (opts *ExportOptions) HandleShow(monitorArray []monitor.Monitor) error { for _, mon := range monitorArray { var cnt int var err error - var appMap map[types.SimpleAppearance]*types.SimpleTransaction - if appMap, cnt, err = monitor.AsMap[types.SimpleTransaction](&mon, filter); err != nil { + var appMap []map[types.SimpleAppearance]*types.SimpleTransaction + if appMap, cnt, err = monitor.AsMap2[types.SimpleTransaction](&mon, filter); err != nil { errorChan <- err return } else if !opts.NoZero || cnt > 0 { @@ -47,33 +47,40 @@ func (opts *ExportOptions) HandleShow(monitorArray []monitor.Monitor) error { Total: mon.Count(), }) - if err := opts.readTransactions(appMap, filter, bar, false /* readTraces */); err != nil { - errorChan <- err - return - } - - items := make([]*types.SimpleTransaction, 0, len(appMap)) - for _, tx := range appMap { - if opts.Articulate { - if err = abiCache.ArticulateTransaction(tx); err != nil { - errorChan <- err // continue even on error - } + for _, thisMap := range appMap { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(types.SimpleTransaction) } - items = append(items, tx) - } - sort.Slice(items, func(i, j int) bool { - if opts.Reversed { - i, j = j, i + + if err := opts.readTransactions(thisMap, filter, bar, false /* readTraces */); err != nil { + errorChan <- err + return } - if items[i].BlockNumber == items[j].BlockNumber { - return items[i].TransactionIndex < items[j].TransactionIndex + + items := make([]*types.SimpleTransaction, 0, len(thisMap)) + for _, tx := range thisMap { + if opts.Articulate { + if err = abiCache.ArticulateTransaction(tx); err != nil { + errorChan <- err // continue even on error + } + } + items = append(items, tx) } - return items[i].BlockNumber < items[j].BlockNumber - }) - for _, item := range items { - item := item - if !item.BlockHash.IsZero() { - modelChan <- item + sort.Slice(items, func(i, j int) bool { + if opts.Reversed { + i, j = j, i + } + if items[i].BlockNumber == items[j].BlockNumber { + return items[i].TransactionIndex < items[j].TransactionIndex + } + return items[i].BlockNumber < items[j].BlockNumber + }) + for _, item := range items { + item := item + if !item.BlockHash.IsZero() { + modelChan <- item + } } } diff --git a/src/apps/chifra/internal/transactions/handle_show.go b/src/apps/chifra/internal/transactions/handle_show.go index 17daa17dbf..cccafe2a99 100644 --- a/src/apps/chifra/internal/transactions/handle_show.go +++ b/src/apps/chifra/internal/transactions/handle_show.go @@ -21,68 +21,74 @@ func (opts *TransactionsOptions) HandleShow() (err error) { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawTransaction], errorChan chan error) { - // var cnt int + var cnt int var err error - var appMap map[types.SimpleAppearance]*types.SimpleTransaction - if appMap, _, err = identifiers.AsMap[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { + var appMap []map[types.SimpleAppearance]*types.SimpleTransaction + if appMap, cnt, err = identifiers.AsMap2[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { errorChan <- err cancel() } else { bar := logger.NewBar(logger.BarOptions{ Enabled: !opts.Globals.TestMode, - Total: int64(len(appMap)), + Total: int64(cnt), }) - iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { - a := &types.RawAppearance{ - BlockNumber: uint32(app.BlockNumber), - TransactionIndex: uint32(app.TransactionIndex), + for _, thisMap := range appMap { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(types.SimpleTransaction) } - if tx, err := opts.Conn.GetTransactionByAppearance(a, opts.Traces /* needsTraces */); err != nil { - return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) - } else if tx == nil { - return fmt.Errorf("transaction at %s has no logs", app.Orig()) - } else { - if opts.Articulate && tx.ArticulatedTx == nil { - if err = abiCache.ArticulateTransaction(tx); err != nil { - errorChan <- err // continue even with an error + + iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { + a := &types.RawAppearance{ + BlockNumber: uint32(app.BlockNumber), + TransactionIndex: uint32(app.TransactionIndex), + } + if tx, err := opts.Conn.GetTransactionByAppearance(a, opts.Traces /* needsTraces */); err != nil { + return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) + } else if tx == nil { + return fmt.Errorf("transaction at %s has no logs", app.Orig()) + } else { + if opts.Articulate && tx.ArticulatedTx == nil { + if err = abiCache.ArticulateTransaction(tx); err != nil { + errorChan <- err // continue even with an error + } } + *value = *tx + bar.Tick() + return nil } - *value = *tx - bar.Tick() - return nil } - } - iterErrorChan := make(chan error) - iterCtx, iterCancel := context.WithCancel(context.Background()) - defer iterCancel() - go utils.IterateOverMap(iterCtx, iterErrorChan, appMap, iterFunc) - for err := range iterErrorChan { - if !testMode || nErrors == 0 { - errorChan <- err - nErrors++ + iterErrorChan := make(chan error) + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + go utils.IterateOverMap(iterCtx, iterErrorChan, thisMap, iterFunc) + for err := range iterErrorChan { + if !testMode || nErrors == 0 { + errorChan <- err + nErrors++ + } } - } - bar.Finish(true) - items := make([]types.SimpleTransaction, 0, len(appMap)) - for _, tx := range appMap { - items = append(items, *tx) - } - sort.Slice(items, func(i, j int) bool { - if items[i].BlockNumber == items[j].BlockNumber { - return items[i].TransactionIndex < items[j].TransactionIndex + items := make([]types.SimpleTransaction, 0, len(thisMap)) + for _, tx := range thisMap { + items = append(items, *tx) } - return items[i].BlockNumber < items[j].BlockNumber - }) - - for _, item := range items { - item := item - if !item.BlockHash.IsZero() { - modelChan <- &item + sort.Slice(items, func(i, j int) bool { + if items[i].BlockNumber == items[j].BlockNumber { + return items[i].TransactionIndex < items[j].TransactionIndex + } + return items[i].BlockNumber < items[j].BlockNumber + }) + for _, item := range items { + item := item + if !item.BlockHash.IsZero() { + modelChan <- &item + } } } + bar.Finish(true) } } diff --git a/src/apps/chifra/pkg/identifiers/app_map.go b/src/apps/chifra/pkg/identifiers/app_map.go index 25d1aaa83c..b08bdda831 100644 --- a/src/apps/chifra/pkg/identifiers/app_map.go +++ b/src/apps/chifra/pkg/identifiers/app_map.go @@ -1,6 +1,7 @@ package identifiers import ( + "sort" "strings" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" @@ -47,3 +48,54 @@ func AsMap[T mappedType](chain string, ids []Identifier) (map[types.SimpleAppear return ret, len(ret), nil } + +func AsMap2[T mappedType](chain string, ids []Identifier) ([]map[types.SimpleAppearance]*T, int, error) { + ret := make([]types.SimpleAppearance, 0, 100 /* good guess */) + for index, rng := range ids { + if rawIds, err := rng.ResolveTxs(chain); err != nil { + if blockIds, err := rng.ResolveBlocks(chain); err != nil { + return nil, 0, err + } else { + for _, raw := range blockIds { + s := types.SimpleAppearance{ + BlockNumber: uint32(raw), + Reason: strings.Replace(ids[index].Orig, "-", ".", -1), + } + ret = append(ret, s) + } + } + } else { + for _, raw := range rawIds { + s := types.SimpleAppearance{ + BlockNumber: uint32(raw.BlockNumber), + TransactionIndex: uint32(raw.TransactionIndex), + Reason: strings.Replace(ids[index].Orig, "-", ".", -1), + } + ret = append(ret, s) + } + } + } + + sort.Slice(ret, func(i, j int) bool { + if ret[i].BlockNumber == ret[j].BlockNumber { + return ret[i].TransactionIndex < ret[j].TransactionIndex + } + return ret[i].BlockNumber < ret[j].BlockNumber + }) + + arrayOfMaps := make([]map[types.SimpleAppearance]*T, 0, len(ret)) + curMap := make(map[types.SimpleAppearance]*T) + for i := 0; i < len(ret); i++ { + if len(curMap) == 10 { + arrayOfMaps = append(arrayOfMaps, curMap) + curMap = make(map[types.SimpleAppearance]*T) + } + curMap[ret[i]] = nil + } + + if len(curMap) > 0 { + arrayOfMaps = append(arrayOfMaps, curMap) + } + + return arrayOfMaps, len(ret), nil +} diff --git a/src/apps/chifra/pkg/monitor/monitor_read.go b/src/apps/chifra/pkg/monitor/monitor_read.go index 33f6b93773..b084f88033 100644 --- a/src/apps/chifra/pkg/monitor/monitor_read.go +++ b/src/apps/chifra/pkg/monitor/monitor_read.go @@ -9,6 +9,7 @@ import ( "fmt" "io" "os" + "sort" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/file" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/filter" @@ -64,7 +65,7 @@ func (mon *Monitor) ReadAppearanceAt(idx int64, app *index.AppearanceRecord) (er } // AsMap reads all appearances from the monitor and returns a map of the appearances to the given type. -func AsMap[T any](mon *Monitor, filter *filter.AppearanceFilter) (theMap map[types.SimpleAppearance]*T, cnt int, err error) { +func AsMap[T any](mon *Monitor, filter *filter.AppearanceFilter) (map[types.SimpleAppearance]*T, int, error) { if apps, cnt, err := mon.ReadAndFilterAppearances(filter); err != nil { return nil, 0, err } else if cnt == 0 { @@ -85,3 +86,34 @@ func AsMap[T any](mon *Monitor, filter *filter.AppearanceFilter) (theMap map[typ return m, len(m), nil } } + +func AsMap2[T any](mon *Monitor, filter *filter.AppearanceFilter) ([]map[types.SimpleAppearance]*T, int, error) { + if ret, cnt, err := mon.ReadAndFilterAppearances(filter); err != nil { + return nil, 0, err + } else if cnt == 0 { + return nil, 0, nil + } else { + sort.Slice(ret, func(i, j int) bool { + if ret[i].BlockNumber == ret[j].BlockNumber { + return ret[i].TransactionIndex < ret[j].TransactionIndex + } + return ret[i].BlockNumber < ret[j].BlockNumber + }) + + arrayOfMaps := make([]map[types.SimpleAppearance]*T, 0, len(ret)) + curMap := make(map[types.SimpleAppearance]*T) + for i := 0; i < len(ret); i++ { + if len(curMap) == 10 { + arrayOfMaps = append(arrayOfMaps, curMap) + curMap = make(map[types.SimpleAppearance]*T) + } + curMap[ret[i]] = nil + } + + if len(curMap) > 0 { + arrayOfMaps = append(arrayOfMaps, curMap) + } + + return arrayOfMaps, len(ret), nil + } +} From e5d8223556f3fd80d566e9425ba4792664965b1c Mon Sep 17 00:00:00 2001 From: tjayrush Date: Thu, 30 Nov 2023 20:29:05 -0500 Subject: [PATCH 02/25] Changes interface to rpc.GetTrans to use SimpleAppearance --- .../internal/export/handle_accounting.go | 9 +-- .../internal/export/iterate_transactions.go | 7 +-- src/apps/chifra/internal/logs/handle_show.go | 6 +- .../chifra/internal/receipts/handle_show.go | 6 +- .../chifra/internal/traces/handle_counts.go | 7 +-- .../chifra/internal/traces/handle_show.go | 7 +-- .../transactions/handle_accountfor.go | 6 +- .../internal/transactions/handle_logs.go | 6 +- .../internal/transactions/handle_show.go | 6 +- .../internal/transactions/handle_uniq.go | 7 ++- src/apps/chifra/pkg/ledger/stmnt_from_app.go | 2 +- src/apps/chifra/pkg/rpc/get_transaction.go | 61 ++++++++++--------- 12 files changed, 54 insertions(+), 76 deletions(-) diff --git a/src/apps/chifra/internal/export/handle_accounting.go b/src/apps/chifra/internal/export/handle_accounting.go index cb1966a90b..8282dac16e 100644 --- a/src/apps/chifra/internal/export/handle_accounting.go +++ b/src/apps/chifra/internal/export/handle_accounting.go @@ -39,12 +39,7 @@ func (opts *ExportOptions) HandleAccounting(monitorArray []monitor.Monitor) erro ctx := context.Background() fetchData := func(modelChan chan types.Modeler[types.RawTransaction], errorChan chan error) { visitAppearance := func(app *types.SimpleAppearance) error { - raw := types.RawAppearance{ - Address: app.Address.Hex(), - BlockNumber: app.BlockNumber, - TransactionIndex: app.TransactionIndex, - } - if tx, err := opts.Conn.GetTransactionByAppearance(&raw, false); err != nil { + if tx, err := opts.Conn.GetTransactionByAppearance(app, false); err != nil { errorChan <- err return nil } else { @@ -57,7 +52,7 @@ func (opts *ExportOptions) HandleAccounting(monitorArray []monitor.Monitor) erro } if opts.Accounting { - if statements, err := ledgers.GetStatementsFromAppearance(opts.Conn, filter, &raw); err != nil { + if statements, err := ledgers.GetStatementsFromAppearance(opts.Conn, filter, app); err != nil { errorChan <- err } else { tx.Statements = &statements diff --git a/src/apps/chifra/internal/export/iterate_transactions.go b/src/apps/chifra/internal/export/iterate_transactions.go index c35e9a4519..4e1a3c173f 100644 --- a/src/apps/chifra/internal/export/iterate_transactions.go +++ b/src/apps/chifra/internal/export/iterate_transactions.go @@ -16,12 +16,7 @@ func (opts *ExportOptions) readTransactions( readTraces bool, ) error { iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { - raw := types.RawAppearance{ - Address: app.Address.Hex(), - BlockNumber: app.BlockNumber, - TransactionIndex: app.TransactionIndex, - } - if tx, err := opts.Conn.GetTransactionByAppearance(&raw, readTraces); err != nil { + if tx, err := opts.Conn.GetTransactionByAppearance(&app, readTraces); err != nil { return err } else { passes, _ := filt.ApplyTxFilters(tx) diff --git a/src/apps/chifra/internal/logs/handle_show.go b/src/apps/chifra/internal/logs/handle_show.go index bf4437bfab..ffb3a35414 100644 --- a/src/apps/chifra/internal/logs/handle_show.go +++ b/src/apps/chifra/internal/logs/handle_show.go @@ -34,11 +34,7 @@ func (opts *LogsOptions) HandleShow() error { }) iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { - a := &types.RawAppearance{ - BlockNumber: uint32(app.BlockNumber), - TransactionIndex: uint32(app.TransactionIndex), - } - if tx, err := opts.Conn.GetTransactionByAppearance(a, false /* needsTraces */); err != nil { + if tx, err := opts.Conn.GetTransactionByAppearance(&app, false /* needsTraces */); err != nil { return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) } else if tx == nil || tx.Receipt == nil { return fmt.Errorf("transaction at %s has no logs", app.Orig()) diff --git a/src/apps/chifra/internal/receipts/handle_show.go b/src/apps/chifra/internal/receipts/handle_show.go index 3f5912a7f9..a8ef8ad36a 100644 --- a/src/apps/chifra/internal/receipts/handle_show.go +++ b/src/apps/chifra/internal/receipts/handle_show.go @@ -34,11 +34,7 @@ func (opts *ReceiptsOptions) HandleShow() error { }) iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { - a := &types.RawAppearance{ - BlockNumber: uint32(app.BlockNumber), - TransactionIndex: uint32(app.TransactionIndex), - } - if tx, err := opts.Conn.GetTransactionByAppearance(a, false /* needsTraces */); err != nil { + if tx, err := opts.Conn.GetTransactionByAppearance(&app, false /* needsTraces */); err != nil { return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) } else if tx == nil || tx.Receipt == nil { return fmt.Errorf("transaction at %s has no logs", app.Orig()) diff --git a/src/apps/chifra/internal/traces/handle_counts.go b/src/apps/chifra/internal/traces/handle_counts.go index a3a02043a2..f5e01eeedb 100644 --- a/src/apps/chifra/internal/traces/handle_counts.go +++ b/src/apps/chifra/internal/traces/handle_counts.go @@ -36,12 +36,7 @@ func (opts *TracesOptions) HandleCounts() error { }) iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { - a := &types.RawAppearance{ - BlockNumber: uint32(app.BlockNumber), - TransactionIndex: uint32(app.TransactionIndex), - } - - if tx, err := opts.Conn.GetTransactionByAppearance(a, true); err != nil { + if tx, err := opts.Conn.GetTransactionByAppearance(&app, true); err != nil { errorChan <- fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) return nil diff --git a/src/apps/chifra/internal/traces/handle_show.go b/src/apps/chifra/internal/traces/handle_show.go index 3eab990d87..bff1ddbd2a 100644 --- a/src/apps/chifra/internal/traces/handle_show.go +++ b/src/apps/chifra/internal/traces/handle_show.go @@ -38,12 +38,7 @@ func (opts *TracesOptions) HandleShow() error { }) iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { - a := &types.RawAppearance{ - BlockNumber: uint32(app.BlockNumber), - TransactionIndex: uint32(app.TransactionIndex), - } - - if tx, err := opts.Conn.GetTransactionByAppearance(a, true); err != nil { + if tx, err := opts.Conn.GetTransactionByAppearance(&app, true); err != nil { errorChan <- fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) return nil diff --git a/src/apps/chifra/internal/transactions/handle_accountfor.go b/src/apps/chifra/internal/transactions/handle_accountfor.go index db4cca3375..8e32d5491c 100644 --- a/src/apps/chifra/internal/transactions/handle_accountfor.go +++ b/src/apps/chifra/internal/transactions/handle_accountfor.go @@ -48,7 +48,11 @@ func (opts *TransactionsOptions) HandleAccounting() (err error) { cancel() } - for _, app := range txIds { + for _, raw := range txIds { + app := types.SimpleAppearance{ + BlockNumber: raw.BlockNumber, + TransactionIndex: raw.TransactionIndex, + } if statements, err := ledgers.GetStatementsFromAppearance(opts.Conn, filter, &app); err != nil { errorChan <- err } else { diff --git a/src/apps/chifra/internal/transactions/handle_logs.go b/src/apps/chifra/internal/transactions/handle_logs.go index ac19cec7fe..714d8ffdbe 100644 --- a/src/apps/chifra/internal/transactions/handle_logs.go +++ b/src/apps/chifra/internal/transactions/handle_logs.go @@ -52,11 +52,7 @@ func (opts *TransactionsOptions) HandleLogs() error { }) iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { - a := &types.RawAppearance{ - BlockNumber: uint32(app.BlockNumber), - TransactionIndex: uint32(app.TransactionIndex), - } - if tx, err := opts.Conn.GetTransactionByAppearance(a, opts.Traces /* needsTraces */); err != nil { + if tx, err := opts.Conn.GetTransactionByAppearance(&app, opts.Traces /* needsTraces */); err != nil { return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) } else if tx == nil { return fmt.Errorf("transaction at %s has no logs", app.Orig()) diff --git a/src/apps/chifra/internal/transactions/handle_show.go b/src/apps/chifra/internal/transactions/handle_show.go index cccafe2a99..2e2896c0bb 100644 --- a/src/apps/chifra/internal/transactions/handle_show.go +++ b/src/apps/chifra/internal/transactions/handle_show.go @@ -40,11 +40,7 @@ func (opts *TransactionsOptions) HandleShow() (err error) { } iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { - a := &types.RawAppearance{ - BlockNumber: uint32(app.BlockNumber), - TransactionIndex: uint32(app.TransactionIndex), - } - if tx, err := opts.Conn.GetTransactionByAppearance(a, opts.Traces /* needsTraces */); err != nil { + if tx, err := opts.Conn.GetTransactionByAppearance(&app, opts.Traces /* needsTraces */); err != nil { return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) } else if tx == nil { return fmt.Errorf("transaction at %s has no logs", app.Orig()) diff --git a/src/apps/chifra/internal/transactions/handle_uniq.go b/src/apps/chifra/internal/transactions/handle_uniq.go index c6c5daa449..d8f16e037e 100644 --- a/src/apps/chifra/internal/transactions/handle_uniq.go +++ b/src/apps/chifra/internal/transactions/handle_uniq.go @@ -34,7 +34,12 @@ func (opts *TransactionsOptions) HandleUniq() (err error) { cancel() } - for _, app := range txIds { + for _, raw := range txIds { + app := types.SimpleAppearance{ + BlockNumber: raw.BlockNumber, + TransactionIndex: raw.TransactionIndex, + } + bn := uint64(app.BlockNumber) ts := opts.Conn.GetBlockTimestamp(bn) addrMap := make(uniq.AddressBooleanMap) diff --git a/src/apps/chifra/pkg/ledger/stmnt_from_app.go b/src/apps/chifra/pkg/ledger/stmnt_from_app.go index bea0715e8c..f8d58fe9f7 100644 --- a/src/apps/chifra/pkg/ledger/stmnt_from_app.go +++ b/src/apps/chifra/pkg/ledger/stmnt_from_app.go @@ -10,7 +10,7 @@ import ( func (l *Ledger) GetStatementsFromAppearance( conn *rpc.Connection, filter *filter.AppearanceFilter, - app *types.RawAppearance, + app *types.SimpleAppearance, ) (statements []types.SimpleStatement, err error) { var tx *types.SimpleTransaction if tx, err = conn.GetTransactionByAppearance(app, false); err != nil { diff --git a/src/apps/chifra/pkg/rpc/get_transaction.go b/src/apps/chifra/pkg/rpc/get_transaction.go index afde59653e..46061c5d37 100644 --- a/src/apps/chifra/pkg/rpc/get_transaction.go +++ b/src/apps/chifra/pkg/rpc/get_transaction.go @@ -48,9 +48,14 @@ func (conn *Connection) GetTransactionByNumberAndId(bn base.Blknum, txid uint64) // TODO: See #3361 -func (conn *Connection) GetTransactionByAppearance(appearance *types.RawAppearance, fetchTraces bool) (tx *types.SimpleTransaction, err error) { - bn := uint64(appearance.BlockNumber) - txid := uint64(appearance.TransactionIndex) +func (conn *Connection) GetTransactionByAppearance(app *types.SimpleAppearance, fetchTraces bool) (tx *types.SimpleTransaction, err error) { + raw := types.RawAppearance{ + Address: app.Address.Hex(), + BlockNumber: app.BlockNumber, + TransactionIndex: app.TransactionIndex, + } + bn := uint64(raw.BlockNumber) + txid := uint64(raw.TransactionIndex) if conn.StoreReadable() { tx = &types.SimpleTransaction{ @@ -73,19 +78,19 @@ func (conn *Connection) GetTransactionByAppearance(appearance *types.RawAppearan tx = nil if bn == 0 { - if tx, err = conn.GetTransactionPrefundByApp(appearance); err != nil { + if tx, err = conn.GetTransactionPrefundByApp(&raw); err != nil { return nil, err } } else if txid == types.BlockReward || txid == types.MisconfigReward || txid == types.ExternalReward { - if tx, err = conn.GetTransactionRewardByTypeAndApp(types.BlockReward, appearance); err != nil { + if tx, err = conn.GetTransactionRewardByTypeAndApp(types.BlockReward, &raw); err != nil { return nil, err } } else if txid == types.UncleReward { - if tx, err = conn.GetTransactionRewardByTypeAndApp(types.UncleReward, appearance); err != nil { + if tx, err = conn.GetTransactionRewardByTypeAndApp(types.UncleReward, &raw); err != nil { return nil, err } } else if txid == types.Withdrawal { - if tx, err = conn.GetTransactionRewardByTypeAndApp(types.Withdrawal, appearance); err != nil { + if tx, err = conn.GetTransactionRewardByTypeAndApp(types.Withdrawal, &raw); err != nil { return nil, err } } @@ -190,7 +195,7 @@ func (conn *Connection) GetTransactionHashByHashAndID(hash string, txId uint64) } } -func (conn *Connection) GetTransactionPrefundByApp(appearance *types.RawAppearance) (tx *types.SimpleTransaction, err error) { +func (conn *Connection) GetTransactionPrefundByApp(raw *types.RawAppearance) (tx *types.SimpleTransaction, err error) { // TODO: performance - This loads and then drops the file every time it's called. Quite slow. // TODO: performance - in the old C++ we stored these values in a pre fundAddrMap so that given a txid in block zero // TODO: performance - we knew which address was granted allocation at that transaction. @@ -207,15 +212,15 @@ func (conn *Connection) GetTransactionPrefundByApp(appearance *types.RawAppearan ts = block.Timestamp } - entry := (*prefundMap)[base.HexToAddress(appearance.Address)] - if entry.Address.Hex() == appearance.Address { + entry := (*prefundMap)[base.HexToAddress(raw.Address)] + if entry.Address.Hex() == raw.Address { ret := types.SimpleTransaction{ BlockHash: blockHash, - BlockNumber: uint64(appearance.BlockNumber), - TransactionIndex: uint64(appearance.TransactionIndex), + BlockNumber: uint64(raw.BlockNumber), + TransactionIndex: uint64(raw.TransactionIndex), Timestamp: ts, From: base.PrefundSender, - To: base.HexToAddress(appearance.Address), + To: base.HexToAddress(raw.Address), Value: entry.Prefund, } return &ret, nil @@ -226,22 +231,22 @@ func (conn *Connection) GetTransactionPrefundByApp(appearance *types.RawAppearan // TODO: This is not cross-chain correct nor does it work properly for post-merge -func (conn *Connection) GetTransactionRewardByTypeAndApp(rt base.Txnum, appearance *types.RawAppearance) (*types.SimpleTransaction, error) { - if block, err := conn.GetBlockBodyByNumber(uint64(appearance.BlockNumber)); err != nil { +func (conn *Connection) GetTransactionRewardByTypeAndApp(rt base.Txnum, raw *types.RawAppearance) (*types.SimpleTransaction, error) { + if block, err := conn.GetBlockBodyByNumber(uint64(raw.BlockNumber)); err != nil { return nil, err } else { if rt == types.Withdrawal { tx := &types.SimpleTransaction{ - BlockNumber: uint64(appearance.BlockNumber), - TransactionIndex: uint64(appearance.TransactionIndex), + BlockNumber: uint64(raw.BlockNumber), + TransactionIndex: uint64(raw.TransactionIndex), Timestamp: block.Timestamp, From: base.WithdrawalSender, - To: base.HexToAddress(appearance.Address), + To: base.HexToAddress(raw.Address), } return tx, nil } - if uncles, err := conn.GetUncleBodiesByNumber(uint64(appearance.BlockNumber)); err != nil { + if uncles, err := conn.GetUncleBodiesByNumber(uint64(raw.BlockNumber)); err != nil { return nil, err } else { var blockReward = big.NewInt(0) @@ -249,12 +254,12 @@ func (conn *Connection) GetTransactionRewardByTypeAndApp(rt base.Txnum, appearan var feeReward = big.NewInt(0) var uncleReward = big.NewInt(0) - sender := base.HexToAddress(appearance.Address) - bn := uint64(appearance.BlockNumber) + sender := base.HexToAddress(raw.Address) + bn := uint64(raw.BlockNumber) blockReward = conn.getBlockReward(bn) switch rt { case types.BlockReward: - if block.Miner.Hex() == appearance.Address { + if block.Miner.Hex() == raw.Address { sender = base.BlockRewardSender nUncles := len(uncles) if nUncles > 0 { @@ -271,7 +276,7 @@ func (conn *Connection) GetTransactionRewardByTypeAndApp(rt base.Txnum, appearan } case types.UncleReward: for _, uncle := range uncles { - if uncle.Miner.Hex() == appearance.Address { + if uncle.Miner.Hex() == raw.Address { sender = base.UncleRewardSender if bn < uncle.BlockNumber+6 { diff := (uncle.BlockNumber + 8 - bn) // positive since +6 < bn @@ -280,10 +285,10 @@ func (conn *Connection) GetTransactionRewardByTypeAndApp(rt base.Txnum, appearan } } } - if block.Miner.Hex() == appearance.Address { + if block.Miner.Hex() == raw.Address { sender = base.BlockRewardSender // if it's both, it's the block reward // The uncle miner may also have been the miner of the block - if minerTx, err := conn.GetTransactionRewardByTypeAndApp(types.BlockReward, appearance); err != nil { + if minerTx, err := conn.GetTransactionRewardByTypeAndApp(types.BlockReward, raw); err != nil { return nil, err } else { blockReward = &minerTx.Rewards.Block @@ -303,12 +308,12 @@ func (conn *Connection) GetTransactionRewardByTypeAndApp(rt base.Txnum, appearan rewards, total := types.NewReward(blockReward, nephewReward, feeReward, uncleReward) tx := &types.SimpleTransaction{ - BlockNumber: uint64(appearance.BlockNumber), - TransactionIndex: uint64(appearance.TransactionIndex), + BlockNumber: uint64(raw.BlockNumber), + TransactionIndex: uint64(raw.TransactionIndex), BlockHash: block.Hash, Timestamp: block.Timestamp, From: sender, - To: base.HexToAddress(appearance.Address), + To: base.HexToAddress(raw.Address), Value: total, Rewards: &rewards, } From 0e6c9a45035391ea694ec83a1faea113c2c0989a Mon Sep 17 00:00:00 2001 From: tjayrush Date: Thu, 30 Nov 2023 20:37:46 -0500 Subject: [PATCH 03/25] Adds some test cases and cleans a bit --- .../chifra/internal/export/handle_show.go | 2 +- .../internal/transactions/handle_show.go | 2 +- .../internal/transactions/handle_uniq.go | 2 - src/apps/chifra/pkg/identifiers/app_map.go | 2 +- src/apps/chifra/pkg/monitor/monitor_read.go | 2 +- .../testRunner/testCases/apps/acctExport.csv | 2 +- .../testRunner/testCases/tools/getBlocks.csv | 4 + .../acctExport_transfer_no_topics.txt | 4 +- .../acctExport_transfer_no_topics.txt | 2 +- .../api_tests/cacheStatus_items_logs.txt | 34 +- .../api_tests/cacheStatus_mode_all.txt | 9 +- .../api_tests/cacheStatus_mode_logs.txt | 41 +- .../cacheStatus/cacheStatus_items_logs.txt | 30 +- .../apps/cacheStatus/cacheStatus_mode_all.txt | 9 +- .../cacheStatus/cacheStatus_mode_logs.txt | 37 +- .../api_tests/getBlocks_with_logs_decache.txt | 18 + .../getBlocks_with_logs_into_cache.txt | 521 ++++++++++++++++++ .../getBlocks_with_logs_into_cache2.txt | 521 ++++++++++++++++++ .../getBlocks_with_logs_outof_cache.txt | 521 ++++++++++++++++++ .../getBlocks/getBlocks_with_logs_decache.txt | 13 + .../getBlocks_with_logs_into_cache.txt | 517 +++++++++++++++++ .../getBlocks_with_logs_into_cache2.txt | 517 +++++++++++++++++ .../getBlocks_with_logs_outof_cache.txt | 515 +++++++++++++++++ 23 files changed, 3298 insertions(+), 27 deletions(-) create mode 100644 test/gold/tools/getBlocks/api_tests/getBlocks_with_logs_decache.txt create mode 100644 test/gold/tools/getBlocks/api_tests/getBlocks_with_logs_into_cache.txt create mode 100644 test/gold/tools/getBlocks/api_tests/getBlocks_with_logs_into_cache2.txt create mode 100644 test/gold/tools/getBlocks/api_tests/getBlocks_with_logs_outof_cache.txt create mode 100644 test/gold/tools/getBlocks/getBlocks_with_logs_decache.txt create mode 100644 test/gold/tools/getBlocks/getBlocks_with_logs_into_cache.txt create mode 100644 test/gold/tools/getBlocks/getBlocks_with_logs_into_cache2.txt create mode 100644 test/gold/tools/getBlocks/getBlocks_with_logs_outof_cache.txt diff --git a/src/apps/chifra/internal/export/handle_show.go b/src/apps/chifra/internal/export/handle_show.go index d37f12b97f..1872e3bb1c 100644 --- a/src/apps/chifra/internal/export/handle_show.go +++ b/src/apps/chifra/internal/export/handle_show.go @@ -37,7 +37,7 @@ func (opts *ExportOptions) HandleShow(monitorArray []monitor.Monitor) error { var cnt int var err error var appMap []map[types.SimpleAppearance]*types.SimpleTransaction - if appMap, cnt, err = monitor.AsMap2[types.SimpleTransaction](&mon, filter); err != nil { + if appMap, cnt, err = monitor.SliceOfMaps_AsMaps[types.SimpleTransaction](&mon, filter); err != nil { errorChan <- err return } else if !opts.NoZero || cnt > 0 { diff --git a/src/apps/chifra/internal/transactions/handle_show.go b/src/apps/chifra/internal/transactions/handle_show.go index 2e2896c0bb..aa010114fe 100644 --- a/src/apps/chifra/internal/transactions/handle_show.go +++ b/src/apps/chifra/internal/transactions/handle_show.go @@ -24,7 +24,7 @@ func (opts *TransactionsOptions) HandleShow() (err error) { var cnt int var err error var appMap []map[types.SimpleAppearance]*types.SimpleTransaction - if appMap, cnt, err = identifiers.AsMap2[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { + if appMap, cnt, err = identifiers.SliceOfMaps_AsMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { errorChan <- err cancel() } else { diff --git a/src/apps/chifra/internal/transactions/handle_uniq.go b/src/apps/chifra/internal/transactions/handle_uniq.go index d8f16e037e..d14e325800 100644 --- a/src/apps/chifra/internal/transactions/handle_uniq.go +++ b/src/apps/chifra/internal/transactions/handle_uniq.go @@ -39,11 +39,9 @@ func (opts *TransactionsOptions) HandleUniq() (err error) { BlockNumber: raw.BlockNumber, TransactionIndex: raw.TransactionIndex, } - bn := uint64(app.BlockNumber) ts := opts.Conn.GetBlockTimestamp(bn) addrMap := make(uniq.AddressBooleanMap) - if trans, err := opts.Conn.GetTransactionByAppearance(&app, true); err != nil { errorChan <- err } else { diff --git a/src/apps/chifra/pkg/identifiers/app_map.go b/src/apps/chifra/pkg/identifiers/app_map.go index b08bdda831..7118ad71bb 100644 --- a/src/apps/chifra/pkg/identifiers/app_map.go +++ b/src/apps/chifra/pkg/identifiers/app_map.go @@ -49,7 +49,7 @@ func AsMap[T mappedType](chain string, ids []Identifier) (map[types.SimpleAppear return ret, len(ret), nil } -func AsMap2[T mappedType](chain string, ids []Identifier) ([]map[types.SimpleAppearance]*T, int, error) { +func SliceOfMaps_AsMaps[T mappedType](chain string, ids []Identifier) ([]map[types.SimpleAppearance]*T, int, error) { ret := make([]types.SimpleAppearance, 0, 100 /* good guess */) for index, rng := range ids { if rawIds, err := rng.ResolveTxs(chain); err != nil { diff --git a/src/apps/chifra/pkg/monitor/monitor_read.go b/src/apps/chifra/pkg/monitor/monitor_read.go index b084f88033..3917e9d27f 100644 --- a/src/apps/chifra/pkg/monitor/monitor_read.go +++ b/src/apps/chifra/pkg/monitor/monitor_read.go @@ -87,7 +87,7 @@ func AsMap[T any](mon *Monitor, filter *filter.AppearanceFilter) (map[types.Simp } } -func AsMap2[T any](mon *Monitor, filter *filter.AppearanceFilter) ([]map[types.SimpleAppearance]*T, int, error) { +func SliceOfMaps_AsMaps[T any](mon *Monitor, filter *filter.AppearanceFilter) ([]map[types.SimpleAppearance]*T, int, error) { if ret, cnt, err := mon.ReadAndFilterAppearances(filter); err != nil { return nil, 0, err } else if cnt == 0 { diff --git a/src/dev_tools/testRunner/testCases/apps/acctExport.csv b/src/dev_tools/testRunner/testCases/apps/acctExport.csv index 0a5eab03ab..17dc5ee129 100644 --- a/src/dev_tools/testRunner/testCases/apps/acctExport.csv +++ b/src/dev_tools/testRunner/testCases/apps/acctExport.csv @@ -185,7 +185,7 @@ on ,both ,fast ,export ,apps/acctExport ,not_logs_topic_fail ,y on ,both ,fast ,export ,apps/acctExport ,not_logs_relevant_fail ,y ,addrs = 0xf503017d7baf7fbc0fff7492b751025c6a78179b & relevant on ,both ,fast ,export ,apps/acctExport ,invalid_emitter_fail ,y ,addrs = 0xf503017d7baf7fbc0fff7492b751025c6a78179b & logs & emitter = 0x7d655c57f71464b6f83811c55d84009cd9f5221 on ,both ,fast ,export ,apps/acctExport ,invalid_topic_fail ,y ,addrs = 0xf503017d7baf7fbc0fff7492b751025c6a78179b & logs & topic = 0x7d655c57f71464b6f83811c55d84009cd9f5221c -on ,both ,fast ,export ,apps/acctExport ,transfer_no_topics ,y ,addrs = 0xff9387a9aae1f5daab1cd8eb0e92113ea9d19ca3 & logs & max_records = 3 +on ,both ,fast ,export ,apps/acctExport ,transfer_no_topics ,y ,addrs = 0xff9387a9aae1f5daab1cd8eb0e92113ea9d19ca3 & logs & max_records = 3 & cache on ,both ,fast ,export ,apps/acctExport ,transfer_topics ,y ,addrs = 0xff9387a9aae1f5daab1cd8eb0e92113ea9d19ca3 & logs & topics = 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef & max_records = 4 on ,both ,fast ,export ,apps/acctExport ,export_logs ,y ,addrs = 0xbb9bc244d798123fde783fcc1c72d3bb8c189413 & logs & first_block = 1429283 & last_block = 1429468 & fmt = json diff --git a/src/dev_tools/testRunner/testCases/tools/getBlocks.csv b/src/dev_tools/testRunner/testCases/tools/getBlocks.csv index 242200a2dd..b3f4aeae1a 100644 --- a/src/dev_tools/testRunner/testCases/tools/getBlocks.csv +++ b/src/dev_tools/testRunner/testCases/tools/getBlocks.csv @@ -74,6 +74,10 @@ on ,both ,fast ,blocks ,tools/getBlocks ,with_logs_topic ,y ,bloc on ,both ,fast ,blocks ,tools/getBlocks ,with_logs_topic2 ,y ,blocks = 4012000-4012001 & logs & topic = 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef & topic = 0x0000000000000000000000008d71cd37bc1c715f6d4e9b5d68aa17a8b42cac87 on ,both ,fast ,blocks ,tools/getBlocks ,with_logs_emitter ,y ,blocks = 4012000-4012001 & logs & emitter = 0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0 on ,both ,fast ,blocks ,tools/getBlocks ,with_logs_both ,y ,blocks = 4012000-4012001 & logs & topic = 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef & emitter = 0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0 +on ,both ,fast ,blocks ,tools/getBlocks ,with_logs_into_cache ,y ,blocks = 4012000-4012001 & logs & cache +on ,both ,fast ,blocks ,tools/getBlocks ,with_logs_outof_cache ,y ,blocks = 4012000-4012001 & logs +on ,both ,fast ,blocks ,tools/getBlocks ,with_logs_decache ,y ,blocks = 4012000-4012001 & logs & decache +on ,both ,fast ,blocks ,tools/getBlocks ,with_logs_into_cache2 ,y ,blocks = 4012000-4012001 & logs & cache on ,both ,fast ,blocks ,tools/getBlocks ,no_uniq_uncles ,y ,blocks = 4012000-4012001 & uniq & uncles on ,both ,fast ,blocks ,tools/getBlocks ,no_cache_uncles ,y ,blocks = 4012000-4012001 & cache & uncles diff --git a/test/gold/apps/acctExport/acctExport_transfer_no_topics.txt b/test/gold/apps/acctExport/acctExport_transfer_no_topics.txt index c42f793383..4de60c6b2e 100644 --- a/test/gold/apps/acctExport/acctExport_transfer_no_topics.txt +++ b/test/gold/apps/acctExport/acctExport_transfer_no_topics.txt @@ -1,7 +1,9 @@ -chifra export 0xff9387a9aae1f5daab1cd8eb0e92113ea9d19ca3 --logs --max_records 3 +chifra export 0xff9387a9aae1f5daab1cd8eb0e92113ea9d19ca3 --logs --max_records 3 --cache TEST[DATE|TIME] Addrs: [0xff9387a9aae1f5daab1cd8eb0e92113ea9d19ca3] TEST[DATE|TIME] Logs: true TEST[DATE|TIME] MaxRecords: 3 +TEST[DATE|TIME] Enabled: transactions +TEST[DATE|TIME] Cache: true TEST[DATE|TIME] Caps: cache,decache,ether TEST[DATE|TIME] Format: txt blockNumber transactionIndex logIndex blockHash transactionHash timestamp date address topic0 topic1 topic2 topic3 data diff --git a/test/gold/apps/acctExport/api_tests/acctExport_transfer_no_topics.txt b/test/gold/apps/acctExport/api_tests/acctExport_transfer_no_topics.txt index 821b69b4d0..73364149f5 100644 --- a/test/gold/apps/acctExport/api_tests/acctExport_transfer_no_topics.txt +++ b/test/gold/apps/acctExport/api_tests/acctExport_transfer_no_topics.txt @@ -1,4 +1,4 @@ -export?addrs=0xff9387a9aae1f5daab1cd8eb0e92113ea9d19ca3&logs&maxRecords=3 +export?addrs=0xff9387a9aae1f5daab1cd8eb0e92113ea9d19ca3&logs&maxRecords=3&cache { "data": [ { diff --git a/test/gold/apps/cacheStatus/api_tests/cacheStatus_items_logs.txt b/test/gold/apps/cacheStatus/api_tests/cacheStatus_items_logs.txt index d4b096257b..d4824c94a0 100644 --- a/test/gold/apps/cacheStatus/api_tests/cacheStatus_items_logs.txt +++ b/test/gold/apps/cacheStatus/api_tests/cacheStatus_items_logs.txt @@ -1,6 +1,33 @@ status?modes=logs&maxRecords=100 { - "data": [], + "data": [ + { + "cachePath": "--paths--", + "caches": [ + { + "items": [], + "lastCached": "--lastCached--", + "nFiles": 123, + "nFolders": 456, + "path": "--paths--", + "sizeInBytes": 789, + "type": "logsCache" + } + ], + "chainConfig": "--paths--", + "clientVersion": "Client version", + "hasEsKey": true, + "hasPinKey": false, + "indexPath": "--paths--", + "isApi": true, + "isArchive": true, + "isTesting": true, + "isTracing": true, + "rootConfig": "--paths--", + "rpcProvider": "--providers--", + "trueblocksVersion": "GHC-TrueBlocks//vers-beta--git-hash---git-ts-" + } + ], "meta": { "client": "0xdeadbeef", "finalized": "0xdeadbeef", @@ -10,8 +37,5 @@ status?modes=logs&maxRecords=100 "chainId": 1, "networkId": 1, "chain": "mainnet" - }, - "errors": [ - "no files were found in the [logs] caches" - ] + } } diff --git a/test/gold/apps/cacheStatus/api_tests/cacheStatus_mode_all.txt b/test/gold/apps/cacheStatus/api_tests/cacheStatus_mode_all.txt index 3118d4c9d1..774b51d4f9 100644 --- a/test/gold/apps/cacheStatus/api_tests/cacheStatus_mode_all.txt +++ b/test/gold/apps/cacheStatus/api_tests/cacheStatus_mode_all.txt @@ -177,7 +177,14 @@ status?modes=all&verbose&maxRecords=2 "type": "resultsCache" }, { - "items": [], + "items": [ + { + "fileDate": "--fileDate--", + "filename": "$cachePath/data-model/file.bin", + "itemType": "logsCacheItem", + "sizeInBytes": 123456789 + } + ], "lastCached": "--lastCached--", "nFiles": 123, "nFolders": 456, diff --git a/test/gold/apps/cacheStatus/api_tests/cacheStatus_mode_logs.txt b/test/gold/apps/cacheStatus/api_tests/cacheStatus_mode_logs.txt index c5a64ae6b8..913d307170 100644 --- a/test/gold/apps/cacheStatus/api_tests/cacheStatus_mode_logs.txt +++ b/test/gold/apps/cacheStatus/api_tests/cacheStatus_mode_logs.txt @@ -1,6 +1,40 @@ status?modes=logs&verbose&maxRecords=2 { - "data": [], + "data": [ + { + "cachePath": "--paths--", + "caches": [ + { + "items": [ + { + "fileDate": "--fileDate--", + "filename": "$cachePath/data-model/file.bin", + "itemType": "logsCacheItem", + "sizeInBytes": 123456789 + } + ], + "lastCached": "--lastCached--", + "nFiles": 123, + "nFolders": 456, + "path": "--paths--", + "sizeInBytes": 789, + "type": "logsCache" + } + ], + "chainConfig": "--paths--", + "clientVersion": "Client version", + "hasEsKey": true, + "hasPinKey": false, + "indexPath": "--paths--", + "isApi": true, + "isArchive": true, + "isTesting": true, + "isTracing": true, + "rootConfig": "--paths--", + "rpcProvider": "--providers--", + "trueblocksVersion": "GHC-TrueBlocks//vers-beta--git-hash---git-ts-" + } + ], "meta": { "client": "0xdeadbeef", "finalized": "0xdeadbeef", @@ -10,8 +44,5 @@ status?modes=logs&verbose&maxRecords=2 "chainId": 1, "networkId": 1, "chain": "mainnet" - }, - "errors": [ - "no files were found in the [logs] caches" - ] + } } diff --git a/test/gold/apps/cacheStatus/cacheStatus_items_logs.txt b/test/gold/apps/cacheStatus/cacheStatus_items_logs.txt index d653aafa72..150ffd2070 100644 --- a/test/gold/apps/cacheStatus/cacheStatus_items_logs.txt +++ b/test/gold/apps/cacheStatus/cacheStatus_items_logs.txt @@ -3,8 +3,32 @@ TEST[DATE|TIME] Modes: [logs] TEST[DATE|TIME] MaxRecords: 100 TEST[DATE|TIME] Format: json { - "data": [], - "errors": [ - "no files were found in the [logs] caches" + "data": [ + { + "cachePath": "--paths--", + "caches": [ + { + "items": [], + "lastCached": "--lastCached--", + "nFiles": 123, + "nFolders": 456, + "path": "--paths--", + "sizeInBytes": 789, + "type": "logsCache" + } + ], + "chainConfig": "--paths--", + "clientVersion": "Client version", + "hasEsKey": true, + "hasPinKey": false, + "indexPath": "--paths--", + "isApi": false, + "isArchive": true, + "isTesting": true, + "isTracing": true, + "rootConfig": "--paths--", + "rpcProvider": "--providers--", + "trueblocksVersion": "GHC-TrueBlocks//vers-beta--git-hash---git-ts-" + } ] } diff --git a/test/gold/apps/cacheStatus/cacheStatus_mode_all.txt b/test/gold/apps/cacheStatus/cacheStatus_mode_all.txt index 9e65a85fa8..d4c183e8e5 100644 --- a/test/gold/apps/cacheStatus/cacheStatus_mode_all.txt +++ b/test/gold/apps/cacheStatus/cacheStatus_mode_all.txt @@ -181,7 +181,14 @@ TEST[DATE|TIME] Format: json "type": "resultsCache" }, { - "items": [], + "items": [ + { + "fileDate": "--fileDate--", + "filename": "$cachePath/data-model/file.bin", + "itemType": "logsCacheItem", + "sizeInBytes": 123456789 + } + ], "lastCached": "--lastCached--", "nFiles": 123, "nFolders": 456, diff --git a/test/gold/apps/cacheStatus/cacheStatus_mode_logs.txt b/test/gold/apps/cacheStatus/cacheStatus_mode_logs.txt index e3bf28ced6..285c5ab13d 100644 --- a/test/gold/apps/cacheStatus/cacheStatus_mode_logs.txt +++ b/test/gold/apps/cacheStatus/cacheStatus_mode_logs.txt @@ -4,8 +4,39 @@ TEST[DATE|TIME] MaxRecords: 2 TEST[DATE|TIME] Verbose: true TEST[DATE|TIME] Format: json { - "data": [], - "errors": [ - "no files were found in the [logs] caches" + "data": [ + { + "cachePath": "--paths--", + "caches": [ + { + "items": [ + { + "fileDate": "--fileDate--", + "filename": "$cachePath/data-model/file.bin", + "itemType": "logsCacheItem", + "sizeInBytes": 123456789 + } + ], + "lastCached": "--lastCached--", + "nFiles": 123, + "nFolders": 456, + "path": "--paths--", + "sizeInBytes": 789, + "type": "logsCache" + } + ], + "chainConfig": "--paths--", + "clientVersion": "Client version", + "hasEsKey": true, + "hasPinKey": false, + "indexPath": "--paths--", + "isApi": false, + "isArchive": true, + "isTesting": true, + "isTracing": true, + "rootConfig": "--paths--", + "rpcProvider": "--providers--", + "trueblocksVersion": "GHC-TrueBlocks//vers-beta--git-hash---git-ts-" + } ] } diff --git a/test/gold/tools/getBlocks/api_tests/getBlocks_with_logs_decache.txt b/test/gold/tools/getBlocks/api_tests/getBlocks_with_logs_decache.txt new file mode 100644 index 0000000000..2ca7d6a907 --- /dev/null +++ b/test/gold/tools/getBlocks/api_tests/getBlocks_with_logs_decache.txt @@ -0,0 +1,18 @@ +blocks?blocks=4012000-4012001&logs&decache +{ + "data": [ + { + "msg": "1 items totaling 12642 bytes were removed from the logs cache." + } + ], + "meta": { + "client": "0xdeadbeef", + "finalized": "0xdeadbeef", + "staging": "0xdeadbeef", + "ripe": "0xdeadbeef", + "unripe": "0xdeadbeef", + "chainId": 1, + "networkId": 1, + "chain": "mainnet" + } +} diff --git a/test/gold/tools/getBlocks/api_tests/getBlocks_with_logs_into_cache.txt b/test/gold/tools/getBlocks/api_tests/getBlocks_with_logs_into_cache.txt new file mode 100644 index 0000000000..38eef84c1e --- /dev/null +++ b/test/gold/tools/getBlocks/api_tests/getBlocks_with_logs_into_cache.txt @@ -0,0 +1,521 @@ +blocks?blocks=4012000-4012001&logs&cache +{ + "data": [ + { + "address": "0xfca47962d45adfdfd1ab2d972315db4ce7ccf094", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000002c9a03c7a00", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 0, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000004315706f57b388b3a0f6489f6f678bc181bfe9f3" + ], + "transactionHash": "0x31b220e225f2d23d33582eea571481b5ea19187988bae0f7b9772d60f79fd138", + "transactionIndex": 8 + }, + { + "address": "0x4038e930ad78c53dc885a6b3a7d9db0d317c8662", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000015af1d78b58c40000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 1, + "timestamp": 1499861689, + "topics": [ + "0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c", + "0x00000000000000000000000098ee18d7a1f7510b78b36f5a16471c7cd0c1c531" + ], + "transactionHash": "0x31b220e225f2d23d33582eea571481b5ea19187988bae0f7b9772d60f79fd138", + "transactionIndex": 8 + }, + { + "address": "0x98ee18d7a1f7510b78b36f5a16471c7cd0c1c531", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000004315706f57b388b3a0f6489f6f678bc181bfe9f30000000000000000000000000000000000000000000000015af1d78b58c40000000000000000000000000000000000000000000000000000000002c9a03c7a0000000000000000000000000000000000348e59900ac844eaaebe7dda411bbabf", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 2, + "timestamp": 1499861689, + "topics": [ + "0x0396f60aaad038749091d273dc13aaabc63db6e2271c7bad442d5cf25cc43350" + ], + "transactionHash": "0x31b220e225f2d23d33582eea571481b5ea19187988bae0f7b9772d60f79fd138", + "transactionIndex": 8 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000044a9059cbb000000000000000000000000abfadddc8e8c557e9adc473e83f5c8701a013e0100000000000000000000000000000000000000000000000da8193a8b128e2000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 3, + "timestamp": 1499861689, + "topics": [ + "0xa9059cbb00000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x000000000000000000000000abfadddc8e8c557e9adc473e83f5c8701a013e01", + "0x00000000000000000000000000000000000000000000000da8193a8b128e2000" + ], + "transactionHash": "0xc2ed44113c8e316ac6bb135256bc25ab1369db846b6ad736487f609601c7f6a3", + "transactionIndex": 12 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000da8193a8b128e2000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 4, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x000000000000000000000000abfadddc8e8c557e9adc473e83f5c8701a013e01" + ], + "transactionHash": "0xc2ed44113c8e316ac6bb135256bc25ab1369db846b6ad736487f609601c7f6a3", + "transactionIndex": 12 + }, + { + "address": "0x7c5a0ce9267ed19b22f8cae653f198e3e8daf098", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000001b1ae4d6e2ef500000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 5, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000059452cff9d54acf1820c10ae994ce4253c9eccfd", + "0x0000000000000000000000005e575279bf9f4acf0a130c186861454247394c06" + ], + "transactionHash": "0xfcc4c9ea238a31e91ad8f166799f221ad71832b3bfde66a622762adc30f5864e", + "transactionIndex": 15 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000df8475800", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 6, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000002cf26e61790c11e1f104eb03511cb28fe1fa1b16", + "0x000000000000000000000000cd463946a100039e1a17cdbc42d9c1a593db4092" + ], + "transactionHash": "0x3128e19803354bdedb51ac9dcdb57cbbf45bd52e4e439e1d6db9537d461ea7f7", + "transactionIndex": 17 + }, + { + "address": "0xd26114cd6ee289accf82350c8d8487fedb8a0c07", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000152d02c7e14af6800000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 7, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000002b1a1898e2f986b88c9a75e41786f4949567ced", + "0x00000000000000000000000066b68ebda88280ce5c821a9ccc38df078c3fd989" + ], + "transactionHash": "0x81a880554a332b38c41be5052323ec1d97a75d3b2d0dee673eaa6120247d54d1", + "transactionIndex": 21 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a66ef4506f20000000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a00000000000000000000000000000000000000000000000000000009c765240000000000000000000000000000000000000000000000000000000000003d5eb300000000000000000000000000000000000000000000000000000000aea9858b0000000000000000000000008379fc96ef046ec38ce6b71fe9e0936681e44a72000000000000000000000000000000000000000000000000000000000000001c0e4d37c4d245115ea647572d1d34d981fdc985bdc49d06f827732c4e390e43113e871de31ababe1b656e9f7bdb1f82fa109e4c72fcf0d0660c031c808b2d341a", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 8, + "timestamp": 1499861689, + "topics": [ + "0x1e0b760c386003e9cb9bcf4fcf3997886042859d9b6ed6320e804597fcdb28b0" + ], + "transactionHash": "0x289054720de7cff214940b84df5e1772cfbd7797180132dd395c14f87bdc4eeb", + "transactionIndex": 22 + }, + { + "address": "0xfca47962d45adfdfd1ab2d972315db4ce7ccf094", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000011407cf4d80", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 9, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000ae2f15a44ffac4e7b15212ac00807f76b05a445" + ], + "transactionHash": "0x2c452cc171214decaa0ffd9c8627dfa3c2cfb626f281334213f6a4e476524607", + "transactionIndex": 23 + }, + { + "address": "0x4038e930ad78c53dc885a6b3a7d9db0d317c8662", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000008632bdc422070000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 10, + "timestamp": 1499861689, + "topics": [ + "0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c", + "0x00000000000000000000000098ee18d7a1f7510b78b36f5a16471c7cd0c1c531" + ], + "transactionHash": "0x2c452cc171214decaa0ffd9c8627dfa3c2cfb626f281334213f6a4e476524607", + "transactionIndex": 23 + }, + { + "address": "0x98ee18d7a1f7510b78b36f5a16471c7cd0c1c531", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000ae2f15a44ffac4e7b15212ac00807f76b05a4450000000000000000000000000000000000000000000000008632bdc4220700000000000000000000000000000000000000000000000000000000011407cf4d8000000000000000000000000000000000969765d676504abc96781f4ab155e83d", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 11, + "timestamp": 1499861689, + "topics": [ + "0x0396f60aaad038749091d273dc13aaabc63db6e2271c7bad442d5cf25cc43350" + ], + "transactionHash": "0x2c452cc171214decaa0ffd9c8627dfa3c2cfb626f281334213f6a4e476524607", + "transactionIndex": 23 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000988c1ee48354ce70000000000000000000000004470bb87d77b963a013db939be332f927f2b992e000000000000000000000000000000000000000000000000000000000069e37c000000000000000000000000b3f9ab81045e9693dbe8f7735c862193f9977eea000000000000000000000000e929710c5ece52427ed70451cf21458fecedd7b4", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 12, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0x5c907700987753586d126ff8af65a312a3ac05f1006e2de8005ff51393c7a9fb", + "transactionIndex": 24 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d5231444cd6800000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a000000000000000000000000000000000000000000000000000000001213fda000000000000000000000000056795205d90ed2141c490a027d1874f2bff4aa860000000000000000000000002990bf9615b3db074f1d4fe288b8beb13cf3b34f", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 13, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0x6c86fd5465bb13a0e3e647575ea45667e972550d1b1807bd1df5a228d9745b73", + "transactionIndex": 25 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000125ce463496f28400000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a00000000000000000000000000000000000000000000000000000018cf07a5ab0000000000000000000000008c16c8fe98a50b515cf8268090bcb8886b2419080000000000000000000000002a1105fba173688fb698a05ae4e5c5f72b5c92c5", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 14, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0x767c71601f0ad49b2da9352f1ef2ddafef4a3bd41a229fcebc3dc0f9a4d34a75", + "transactionIndex": 26 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000000000000a29deb14", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 15, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819", + "0x0000000000000000000000004df6c50c4ff072bda0a7618e544b3c17aa6e0b35" + ], + "transactionHash": "0x79e2328c19ef160aaa362c135f694b35d885fa96811aae1ca30800cc8650f65c", + "transactionIndex": 27 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a0000000000000000000000004df6c50c4ff072bda0a7618e544b3c17aa6e0b3500000000000000000000000000000000000000000000000000000000a29deb140000000000000000000000000000000000000000000000000000000000000000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 16, + "timestamp": 1499861689, + "topics": [ + "0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567" + ], + "transactionHash": "0x79e2328c19ef160aaa362c135f694b35d885fa96811aae1ca30800cc8650f65c", + "transactionIndex": 27 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000005f5e100", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 17, + "timestamp": 1499861689, + "topics": [ + "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", + "0x0000000000000000000000008d71cd37bc1c715f6d4e9b5d68aa17a8b42cac87", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819" + ], + "transactionHash": "0xa75bed6b3e4a832270ab5a164fc84c1d02eda8a6ecf35ee4023eecbbb75e6fe8", + "transactionIndex": 30 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000030524ce0", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 18, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819", + "0x0000000000000000000000009095b24ee684b232207153137da257beac85aaf1" + ], + "transactionHash": "0xacdd6f6ff9da1631d0e10947085b3b4318384f7cd132595532684004a76af7ea", + "transactionIndex": 31 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a0000000000000000000000009095b24ee684b232207153137da257beac85aaf10000000000000000000000000000000000000000000000000000000030524ce0000000000000000000000000000000000000000000000000000000000000b870", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 19, + "timestamp": 1499861689, + "topics": [ + "0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567" + ], + "transactionHash": "0xacdd6f6ff9da1631d0e10947085b3b4318384f7cd132595532684004a76af7ea", + "transactionIndex": 31 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fddc06e314380c09da9455287b6fb7dcca4bf2bb000000000000000000000000000000000000000000000000526f1e874dd200000000000000000000000000000000000000000000000000000000000000000000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 20, + "timestamp": 1499861689, + "topics": [ + "0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567" + ], + "transactionHash": "0xc810222a2cf4606245f2a6e2ce95c7e2fcfb0aadc9db95160eb92d3396afe465", + "transactionIndex": 32 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e1762d888f000000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a000000000000000000000000000000000000000000000000000000000c0d53c000000000000000000000000056795205d90ed2141c490a027d1874f2bff4aa860000000000000000000000007289877a9c924e776bd0f82ffe396e38ab03d546", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 21, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0xe4c4491286fae2c50b023f3893984e16fd1c1acd6aeb1a26f853810c101ad9bb", + "transactionIndex": 33 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000044a9059cbb0000000000000000000000007473f5a7f14d1ebcf87de4545cb1c24b1110d4cb0000000000000000000000000000000000000000000000029e4c12187b5e0000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 22, + "timestamp": 1499861689, + "topics": [ + "0xa9059cbb00000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x0000000000000000000000007473f5a7f14d1ebcf87de4545cb1c24b1110d4cb", + "0x0000000000000000000000000000000000000000000000029e4c12187b5e0000" + ], + "transactionHash": "0x98e9e199e1ae61cbd2272902d798b0e49aaebfc1d7e835a5a97a00d3c7e4ac82", + "transactionIndex": 35 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000029e4c12187b5e0000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 23, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x0000000000000000000000007473f5a7f14d1ebcf87de4545cb1c24b1110d4cb" + ], + "transactionHash": "0x98e9e199e1ae61cbd2272902d798b0e49aaebfc1d7e835a5a97a00d3c7e4ac82", + "transactionIndex": 35 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000005f5e100", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 24, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000008d71cd37bc1c715f6d4e9b5d68aa17a8b42cac87", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819" + ], + "transactionHash": "0xcb1652b8ed3221da0b2886df37f7f43bb8001e84a9e139819675709bc3a2a56f", + "transactionIndex": 39 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a0000000000000000000000008d71cd37bc1c715f6d4e9b5d68aa17a8b42cac870000000000000000000000000000000000000000000000000000000005f5e1000000000000000000000000000000000000000000000000000000000005f607f2", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 25, + "timestamp": 1499861689, + "topics": [ + "0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7" + ], + "transactionHash": "0xcb1652b8ed3221da0b2886df37f7f43bb8001e84a9e139819675709bc3a2a56f", + "transactionIndex": 39 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 26, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x0c2bb0b7059fd335f3dd4ecf037e04697217c481c14fb2155cb07d7ccd7f29d1", + "transactionIndex": 46 + }, + { + "address": "0xb1ea67eb59ec5dca0eb61d34dda7c68c37a07ba9", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 27, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x0c2bb0b7059fd335f3dd4ecf037e04697217c481c14fb2155cb07d7ccd7f29d1", + "transactionIndex": 46 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 28, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x4732917176d804a16c8683426d9dedfaff711d5156766d3535e1921a3655619c", + "transactionIndex": 50 + }, + { + "address": "0x8eb78278bbb58d781c158ed6821391bea6b40914", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 29, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x4732917176d804a16c8683426d9dedfaff711d5156766d3535e1921a3655619c", + "transactionIndex": 50 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 30, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xdbb3c2f63dd12fb0887ece311263807a7be7e001089ae3f992c0946c8e593c62", + "transactionIndex": 52 + }, + { + "address": "0xd49d5907876881676b4a02a6edebfb7614388b88", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 31, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xdbb3c2f63dd12fb0887ece311263807a7be7e001089ae3f992c0946c8e593c62", + "transactionIndex": 52 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 32, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xcc0bc2b2135f6b405432af5223c797ddecc3e0e75d6e1716e2d6ac61ff8883e3", + "transactionIndex": 53 + }, + { + "address": "0x681306f0aaa44216d2c5a2b88b153a0f20b18669", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 33, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xcc0bc2b2135f6b405432af5223c797ddecc3e0e75d6e1716e2d6ac61ff8883e3", + "transactionIndex": 53 + } + ], + "meta": { + "client": "0xdeadbeef", + "finalized": "0xdeadbeef", + "staging": "0xdeadbeef", + "ripe": "0xdeadbeef", + "unripe": "0xdeadbeef", + "chainId": 1, + "networkId": 1, + "chain": "mainnet" + } +} diff --git a/test/gold/tools/getBlocks/api_tests/getBlocks_with_logs_into_cache2.txt b/test/gold/tools/getBlocks/api_tests/getBlocks_with_logs_into_cache2.txt new file mode 100644 index 0000000000..38eef84c1e --- /dev/null +++ b/test/gold/tools/getBlocks/api_tests/getBlocks_with_logs_into_cache2.txt @@ -0,0 +1,521 @@ +blocks?blocks=4012000-4012001&logs&cache +{ + "data": [ + { + "address": "0xfca47962d45adfdfd1ab2d972315db4ce7ccf094", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000002c9a03c7a00", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 0, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000004315706f57b388b3a0f6489f6f678bc181bfe9f3" + ], + "transactionHash": "0x31b220e225f2d23d33582eea571481b5ea19187988bae0f7b9772d60f79fd138", + "transactionIndex": 8 + }, + { + "address": "0x4038e930ad78c53dc885a6b3a7d9db0d317c8662", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000015af1d78b58c40000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 1, + "timestamp": 1499861689, + "topics": [ + "0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c", + "0x00000000000000000000000098ee18d7a1f7510b78b36f5a16471c7cd0c1c531" + ], + "transactionHash": "0x31b220e225f2d23d33582eea571481b5ea19187988bae0f7b9772d60f79fd138", + "transactionIndex": 8 + }, + { + "address": "0x98ee18d7a1f7510b78b36f5a16471c7cd0c1c531", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000004315706f57b388b3a0f6489f6f678bc181bfe9f30000000000000000000000000000000000000000000000015af1d78b58c40000000000000000000000000000000000000000000000000000000002c9a03c7a0000000000000000000000000000000000348e59900ac844eaaebe7dda411bbabf", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 2, + "timestamp": 1499861689, + "topics": [ + "0x0396f60aaad038749091d273dc13aaabc63db6e2271c7bad442d5cf25cc43350" + ], + "transactionHash": "0x31b220e225f2d23d33582eea571481b5ea19187988bae0f7b9772d60f79fd138", + "transactionIndex": 8 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000044a9059cbb000000000000000000000000abfadddc8e8c557e9adc473e83f5c8701a013e0100000000000000000000000000000000000000000000000da8193a8b128e2000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 3, + "timestamp": 1499861689, + "topics": [ + "0xa9059cbb00000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x000000000000000000000000abfadddc8e8c557e9adc473e83f5c8701a013e01", + "0x00000000000000000000000000000000000000000000000da8193a8b128e2000" + ], + "transactionHash": "0xc2ed44113c8e316ac6bb135256bc25ab1369db846b6ad736487f609601c7f6a3", + "transactionIndex": 12 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000da8193a8b128e2000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 4, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x000000000000000000000000abfadddc8e8c557e9adc473e83f5c8701a013e01" + ], + "transactionHash": "0xc2ed44113c8e316ac6bb135256bc25ab1369db846b6ad736487f609601c7f6a3", + "transactionIndex": 12 + }, + { + "address": "0x7c5a0ce9267ed19b22f8cae653f198e3e8daf098", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000001b1ae4d6e2ef500000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 5, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000059452cff9d54acf1820c10ae994ce4253c9eccfd", + "0x0000000000000000000000005e575279bf9f4acf0a130c186861454247394c06" + ], + "transactionHash": "0xfcc4c9ea238a31e91ad8f166799f221ad71832b3bfde66a622762adc30f5864e", + "transactionIndex": 15 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000df8475800", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 6, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000002cf26e61790c11e1f104eb03511cb28fe1fa1b16", + "0x000000000000000000000000cd463946a100039e1a17cdbc42d9c1a593db4092" + ], + "transactionHash": "0x3128e19803354bdedb51ac9dcdb57cbbf45bd52e4e439e1d6db9537d461ea7f7", + "transactionIndex": 17 + }, + { + "address": "0xd26114cd6ee289accf82350c8d8487fedb8a0c07", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000152d02c7e14af6800000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 7, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000002b1a1898e2f986b88c9a75e41786f4949567ced", + "0x00000000000000000000000066b68ebda88280ce5c821a9ccc38df078c3fd989" + ], + "transactionHash": "0x81a880554a332b38c41be5052323ec1d97a75d3b2d0dee673eaa6120247d54d1", + "transactionIndex": 21 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a66ef4506f20000000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a00000000000000000000000000000000000000000000000000000009c765240000000000000000000000000000000000000000000000000000000000003d5eb300000000000000000000000000000000000000000000000000000000aea9858b0000000000000000000000008379fc96ef046ec38ce6b71fe9e0936681e44a72000000000000000000000000000000000000000000000000000000000000001c0e4d37c4d245115ea647572d1d34d981fdc985bdc49d06f827732c4e390e43113e871de31ababe1b656e9f7bdb1f82fa109e4c72fcf0d0660c031c808b2d341a", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 8, + "timestamp": 1499861689, + "topics": [ + "0x1e0b760c386003e9cb9bcf4fcf3997886042859d9b6ed6320e804597fcdb28b0" + ], + "transactionHash": "0x289054720de7cff214940b84df5e1772cfbd7797180132dd395c14f87bdc4eeb", + "transactionIndex": 22 + }, + { + "address": "0xfca47962d45adfdfd1ab2d972315db4ce7ccf094", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000011407cf4d80", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 9, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000ae2f15a44ffac4e7b15212ac00807f76b05a445" + ], + "transactionHash": "0x2c452cc171214decaa0ffd9c8627dfa3c2cfb626f281334213f6a4e476524607", + "transactionIndex": 23 + }, + { + "address": "0x4038e930ad78c53dc885a6b3a7d9db0d317c8662", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000008632bdc422070000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 10, + "timestamp": 1499861689, + "topics": [ + "0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c", + "0x00000000000000000000000098ee18d7a1f7510b78b36f5a16471c7cd0c1c531" + ], + "transactionHash": "0x2c452cc171214decaa0ffd9c8627dfa3c2cfb626f281334213f6a4e476524607", + "transactionIndex": 23 + }, + { + "address": "0x98ee18d7a1f7510b78b36f5a16471c7cd0c1c531", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000ae2f15a44ffac4e7b15212ac00807f76b05a4450000000000000000000000000000000000000000000000008632bdc4220700000000000000000000000000000000000000000000000000000000011407cf4d8000000000000000000000000000000000969765d676504abc96781f4ab155e83d", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 11, + "timestamp": 1499861689, + "topics": [ + "0x0396f60aaad038749091d273dc13aaabc63db6e2271c7bad442d5cf25cc43350" + ], + "transactionHash": "0x2c452cc171214decaa0ffd9c8627dfa3c2cfb626f281334213f6a4e476524607", + "transactionIndex": 23 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000988c1ee48354ce70000000000000000000000004470bb87d77b963a013db939be332f927f2b992e000000000000000000000000000000000000000000000000000000000069e37c000000000000000000000000b3f9ab81045e9693dbe8f7735c862193f9977eea000000000000000000000000e929710c5ece52427ed70451cf21458fecedd7b4", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 12, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0x5c907700987753586d126ff8af65a312a3ac05f1006e2de8005ff51393c7a9fb", + "transactionIndex": 24 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d5231444cd6800000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a000000000000000000000000000000000000000000000000000000001213fda000000000000000000000000056795205d90ed2141c490a027d1874f2bff4aa860000000000000000000000002990bf9615b3db074f1d4fe288b8beb13cf3b34f", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 13, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0x6c86fd5465bb13a0e3e647575ea45667e972550d1b1807bd1df5a228d9745b73", + "transactionIndex": 25 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000125ce463496f28400000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a00000000000000000000000000000000000000000000000000000018cf07a5ab0000000000000000000000008c16c8fe98a50b515cf8268090bcb8886b2419080000000000000000000000002a1105fba173688fb698a05ae4e5c5f72b5c92c5", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 14, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0x767c71601f0ad49b2da9352f1ef2ddafef4a3bd41a229fcebc3dc0f9a4d34a75", + "transactionIndex": 26 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000000000000a29deb14", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 15, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819", + "0x0000000000000000000000004df6c50c4ff072bda0a7618e544b3c17aa6e0b35" + ], + "transactionHash": "0x79e2328c19ef160aaa362c135f694b35d885fa96811aae1ca30800cc8650f65c", + "transactionIndex": 27 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a0000000000000000000000004df6c50c4ff072bda0a7618e544b3c17aa6e0b3500000000000000000000000000000000000000000000000000000000a29deb140000000000000000000000000000000000000000000000000000000000000000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 16, + "timestamp": 1499861689, + "topics": [ + "0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567" + ], + "transactionHash": "0x79e2328c19ef160aaa362c135f694b35d885fa96811aae1ca30800cc8650f65c", + "transactionIndex": 27 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000005f5e100", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 17, + "timestamp": 1499861689, + "topics": [ + "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", + "0x0000000000000000000000008d71cd37bc1c715f6d4e9b5d68aa17a8b42cac87", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819" + ], + "transactionHash": "0xa75bed6b3e4a832270ab5a164fc84c1d02eda8a6ecf35ee4023eecbbb75e6fe8", + "transactionIndex": 30 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000030524ce0", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 18, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819", + "0x0000000000000000000000009095b24ee684b232207153137da257beac85aaf1" + ], + "transactionHash": "0xacdd6f6ff9da1631d0e10947085b3b4318384f7cd132595532684004a76af7ea", + "transactionIndex": 31 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a0000000000000000000000009095b24ee684b232207153137da257beac85aaf10000000000000000000000000000000000000000000000000000000030524ce0000000000000000000000000000000000000000000000000000000000000b870", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 19, + "timestamp": 1499861689, + "topics": [ + "0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567" + ], + "transactionHash": "0xacdd6f6ff9da1631d0e10947085b3b4318384f7cd132595532684004a76af7ea", + "transactionIndex": 31 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fddc06e314380c09da9455287b6fb7dcca4bf2bb000000000000000000000000000000000000000000000000526f1e874dd200000000000000000000000000000000000000000000000000000000000000000000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 20, + "timestamp": 1499861689, + "topics": [ + "0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567" + ], + "transactionHash": "0xc810222a2cf4606245f2a6e2ce95c7e2fcfb0aadc9db95160eb92d3396afe465", + "transactionIndex": 32 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e1762d888f000000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a000000000000000000000000000000000000000000000000000000000c0d53c000000000000000000000000056795205d90ed2141c490a027d1874f2bff4aa860000000000000000000000007289877a9c924e776bd0f82ffe396e38ab03d546", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 21, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0xe4c4491286fae2c50b023f3893984e16fd1c1acd6aeb1a26f853810c101ad9bb", + "transactionIndex": 33 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000044a9059cbb0000000000000000000000007473f5a7f14d1ebcf87de4545cb1c24b1110d4cb0000000000000000000000000000000000000000000000029e4c12187b5e0000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 22, + "timestamp": 1499861689, + "topics": [ + "0xa9059cbb00000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x0000000000000000000000007473f5a7f14d1ebcf87de4545cb1c24b1110d4cb", + "0x0000000000000000000000000000000000000000000000029e4c12187b5e0000" + ], + "transactionHash": "0x98e9e199e1ae61cbd2272902d798b0e49aaebfc1d7e835a5a97a00d3c7e4ac82", + "transactionIndex": 35 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000029e4c12187b5e0000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 23, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x0000000000000000000000007473f5a7f14d1ebcf87de4545cb1c24b1110d4cb" + ], + "transactionHash": "0x98e9e199e1ae61cbd2272902d798b0e49aaebfc1d7e835a5a97a00d3c7e4ac82", + "transactionIndex": 35 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000005f5e100", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 24, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000008d71cd37bc1c715f6d4e9b5d68aa17a8b42cac87", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819" + ], + "transactionHash": "0xcb1652b8ed3221da0b2886df37f7f43bb8001e84a9e139819675709bc3a2a56f", + "transactionIndex": 39 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a0000000000000000000000008d71cd37bc1c715f6d4e9b5d68aa17a8b42cac870000000000000000000000000000000000000000000000000000000005f5e1000000000000000000000000000000000000000000000000000000000005f607f2", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 25, + "timestamp": 1499861689, + "topics": [ + "0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7" + ], + "transactionHash": "0xcb1652b8ed3221da0b2886df37f7f43bb8001e84a9e139819675709bc3a2a56f", + "transactionIndex": 39 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 26, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x0c2bb0b7059fd335f3dd4ecf037e04697217c481c14fb2155cb07d7ccd7f29d1", + "transactionIndex": 46 + }, + { + "address": "0xb1ea67eb59ec5dca0eb61d34dda7c68c37a07ba9", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 27, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x0c2bb0b7059fd335f3dd4ecf037e04697217c481c14fb2155cb07d7ccd7f29d1", + "transactionIndex": 46 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 28, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x4732917176d804a16c8683426d9dedfaff711d5156766d3535e1921a3655619c", + "transactionIndex": 50 + }, + { + "address": "0x8eb78278bbb58d781c158ed6821391bea6b40914", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 29, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x4732917176d804a16c8683426d9dedfaff711d5156766d3535e1921a3655619c", + "transactionIndex": 50 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 30, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xdbb3c2f63dd12fb0887ece311263807a7be7e001089ae3f992c0946c8e593c62", + "transactionIndex": 52 + }, + { + "address": "0xd49d5907876881676b4a02a6edebfb7614388b88", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 31, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xdbb3c2f63dd12fb0887ece311263807a7be7e001089ae3f992c0946c8e593c62", + "transactionIndex": 52 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 32, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xcc0bc2b2135f6b405432af5223c797ddecc3e0e75d6e1716e2d6ac61ff8883e3", + "transactionIndex": 53 + }, + { + "address": "0x681306f0aaa44216d2c5a2b88b153a0f20b18669", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 33, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xcc0bc2b2135f6b405432af5223c797ddecc3e0e75d6e1716e2d6ac61ff8883e3", + "transactionIndex": 53 + } + ], + "meta": { + "client": "0xdeadbeef", + "finalized": "0xdeadbeef", + "staging": "0xdeadbeef", + "ripe": "0xdeadbeef", + "unripe": "0xdeadbeef", + "chainId": 1, + "networkId": 1, + "chain": "mainnet" + } +} diff --git a/test/gold/tools/getBlocks/api_tests/getBlocks_with_logs_outof_cache.txt b/test/gold/tools/getBlocks/api_tests/getBlocks_with_logs_outof_cache.txt new file mode 100644 index 0000000000..2e725b9584 --- /dev/null +++ b/test/gold/tools/getBlocks/api_tests/getBlocks_with_logs_outof_cache.txt @@ -0,0 +1,521 @@ +blocks?blocks=4012000-4012001&logs +{ + "data": [ + { + "address": "0xfca47962d45adfdfd1ab2d972315db4ce7ccf094", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000002c9a03c7a00", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 0, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000004315706f57b388b3a0f6489f6f678bc181bfe9f3" + ], + "transactionHash": "0x31b220e225f2d23d33582eea571481b5ea19187988bae0f7b9772d60f79fd138", + "transactionIndex": 8 + }, + { + "address": "0x4038e930ad78c53dc885a6b3a7d9db0d317c8662", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000015af1d78b58c40000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 1, + "timestamp": 1499861689, + "topics": [ + "0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c", + "0x00000000000000000000000098ee18d7a1f7510b78b36f5a16471c7cd0c1c531" + ], + "transactionHash": "0x31b220e225f2d23d33582eea571481b5ea19187988bae0f7b9772d60f79fd138", + "transactionIndex": 8 + }, + { + "address": "0x98ee18d7a1f7510b78b36f5a16471c7cd0c1c531", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000004315706f57b388b3a0f6489f6f678bc181bfe9f30000000000000000000000000000000000000000000000015af1d78b58c40000000000000000000000000000000000000000000000000000000002c9a03c7a0000000000000000000000000000000000348e59900ac844eaaebe7dda411bbabf", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 2, + "timestamp": 1499861689, + "topics": [ + "0x0396f60aaad038749091d273dc13aaabc63db6e2271c7bad442d5cf25cc43350" + ], + "transactionHash": "0x31b220e225f2d23d33582eea571481b5ea19187988bae0f7b9772d60f79fd138", + "transactionIndex": 8 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000044a9059cbb000000000000000000000000abfadddc8e8c557e9adc473e83f5c8701a013e0100000000000000000000000000000000000000000000000da8193a8b128e2000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 3, + "timestamp": 1499861689, + "topics": [ + "0xa9059cbb00000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x000000000000000000000000abfadddc8e8c557e9adc473e83f5c8701a013e01", + "0x00000000000000000000000000000000000000000000000da8193a8b128e2000" + ], + "transactionHash": "0xc2ed44113c8e316ac6bb135256bc25ab1369db846b6ad736487f609601c7f6a3", + "transactionIndex": 12 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000da8193a8b128e2000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 4, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x000000000000000000000000abfadddc8e8c557e9adc473e83f5c8701a013e01" + ], + "transactionHash": "0xc2ed44113c8e316ac6bb135256bc25ab1369db846b6ad736487f609601c7f6a3", + "transactionIndex": 12 + }, + { + "address": "0x7c5a0ce9267ed19b22f8cae653f198e3e8daf098", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000001b1ae4d6e2ef500000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 5, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000059452cff9d54acf1820c10ae994ce4253c9eccfd", + "0x0000000000000000000000005e575279bf9f4acf0a130c186861454247394c06" + ], + "transactionHash": "0xfcc4c9ea238a31e91ad8f166799f221ad71832b3bfde66a622762adc30f5864e", + "transactionIndex": 15 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000df8475800", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 6, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000002cf26e61790c11e1f104eb03511cb28fe1fa1b16", + "0x000000000000000000000000cd463946a100039e1a17cdbc42d9c1a593db4092" + ], + "transactionHash": "0x3128e19803354bdedb51ac9dcdb57cbbf45bd52e4e439e1d6db9537d461ea7f7", + "transactionIndex": 17 + }, + { + "address": "0xd26114cd6ee289accf82350c8d8487fedb8a0c07", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000152d02c7e14af6800000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 7, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000002b1a1898e2f986b88c9a75e41786f4949567ced", + "0x00000000000000000000000066b68ebda88280ce5c821a9ccc38df078c3fd989" + ], + "transactionHash": "0x81a880554a332b38c41be5052323ec1d97a75d3b2d0dee673eaa6120247d54d1", + "transactionIndex": 21 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a66ef4506f20000000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a00000000000000000000000000000000000000000000000000000009c765240000000000000000000000000000000000000000000000000000000000003d5eb300000000000000000000000000000000000000000000000000000000aea9858b0000000000000000000000008379fc96ef046ec38ce6b71fe9e0936681e44a72000000000000000000000000000000000000000000000000000000000000001c0e4d37c4d245115ea647572d1d34d981fdc985bdc49d06f827732c4e390e43113e871de31ababe1b656e9f7bdb1f82fa109e4c72fcf0d0660c031c808b2d341a", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 8, + "timestamp": 1499861689, + "topics": [ + "0x1e0b760c386003e9cb9bcf4fcf3997886042859d9b6ed6320e804597fcdb28b0" + ], + "transactionHash": "0x289054720de7cff214940b84df5e1772cfbd7797180132dd395c14f87bdc4eeb", + "transactionIndex": 22 + }, + { + "address": "0xfca47962d45adfdfd1ab2d972315db4ce7ccf094", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000011407cf4d80", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 9, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000ae2f15a44ffac4e7b15212ac00807f76b05a445" + ], + "transactionHash": "0x2c452cc171214decaa0ffd9c8627dfa3c2cfb626f281334213f6a4e476524607", + "transactionIndex": 23 + }, + { + "address": "0x4038e930ad78c53dc885a6b3a7d9db0d317c8662", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000008632bdc422070000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 10, + "timestamp": 1499861689, + "topics": [ + "0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c", + "0x00000000000000000000000098ee18d7a1f7510b78b36f5a16471c7cd0c1c531" + ], + "transactionHash": "0x2c452cc171214decaa0ffd9c8627dfa3c2cfb626f281334213f6a4e476524607", + "transactionIndex": 23 + }, + { + "address": "0x98ee18d7a1f7510b78b36f5a16471c7cd0c1c531", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000ae2f15a44ffac4e7b15212ac00807f76b05a4450000000000000000000000000000000000000000000000008632bdc4220700000000000000000000000000000000000000000000000000000000011407cf4d8000000000000000000000000000000000969765d676504abc96781f4ab155e83d", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 11, + "timestamp": 1499861689, + "topics": [ + "0x0396f60aaad038749091d273dc13aaabc63db6e2271c7bad442d5cf25cc43350" + ], + "transactionHash": "0x2c452cc171214decaa0ffd9c8627dfa3c2cfb626f281334213f6a4e476524607", + "transactionIndex": 23 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000988c1ee48354ce70000000000000000000000004470bb87d77b963a013db939be332f927f2b992e000000000000000000000000000000000000000000000000000000000069e37c000000000000000000000000b3f9ab81045e9693dbe8f7735c862193f9977eea000000000000000000000000e929710c5ece52427ed70451cf21458fecedd7b4", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 12, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0x5c907700987753586d126ff8af65a312a3ac05f1006e2de8005ff51393c7a9fb", + "transactionIndex": 24 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d5231444cd6800000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a000000000000000000000000000000000000000000000000000000001213fda000000000000000000000000056795205d90ed2141c490a027d1874f2bff4aa860000000000000000000000002990bf9615b3db074f1d4fe288b8beb13cf3b34f", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 13, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0x6c86fd5465bb13a0e3e647575ea45667e972550d1b1807bd1df5a228d9745b73", + "transactionIndex": 25 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000125ce463496f28400000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a00000000000000000000000000000000000000000000000000000018cf07a5ab0000000000000000000000008c16c8fe98a50b515cf8268090bcb8886b2419080000000000000000000000002a1105fba173688fb698a05ae4e5c5f72b5c92c5", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 14, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0x767c71601f0ad49b2da9352f1ef2ddafef4a3bd41a229fcebc3dc0f9a4d34a75", + "transactionIndex": 26 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000000000000a29deb14", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 15, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819", + "0x0000000000000000000000004df6c50c4ff072bda0a7618e544b3c17aa6e0b35" + ], + "transactionHash": "0x79e2328c19ef160aaa362c135f694b35d885fa96811aae1ca30800cc8650f65c", + "transactionIndex": 27 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a0000000000000000000000004df6c50c4ff072bda0a7618e544b3c17aa6e0b3500000000000000000000000000000000000000000000000000000000a29deb140000000000000000000000000000000000000000000000000000000000000000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 16, + "timestamp": 1499861689, + "topics": [ + "0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567" + ], + "transactionHash": "0x79e2328c19ef160aaa362c135f694b35d885fa96811aae1ca30800cc8650f65c", + "transactionIndex": 27 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000005f5e100", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 17, + "timestamp": 1499861689, + "topics": [ + "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", + "0x0000000000000000000000008d71cd37bc1c715f6d4e9b5d68aa17a8b42cac87", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819" + ], + "transactionHash": "0xa75bed6b3e4a832270ab5a164fc84c1d02eda8a6ecf35ee4023eecbbb75e6fe8", + "transactionIndex": 30 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000030524ce0", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 18, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819", + "0x0000000000000000000000009095b24ee684b232207153137da257beac85aaf1" + ], + "transactionHash": "0xacdd6f6ff9da1631d0e10947085b3b4318384f7cd132595532684004a76af7ea", + "transactionIndex": 31 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a0000000000000000000000009095b24ee684b232207153137da257beac85aaf10000000000000000000000000000000000000000000000000000000030524ce0000000000000000000000000000000000000000000000000000000000000b870", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 19, + "timestamp": 1499861689, + "topics": [ + "0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567" + ], + "transactionHash": "0xacdd6f6ff9da1631d0e10947085b3b4318384f7cd132595532684004a76af7ea", + "transactionIndex": 31 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fddc06e314380c09da9455287b6fb7dcca4bf2bb000000000000000000000000000000000000000000000000526f1e874dd200000000000000000000000000000000000000000000000000000000000000000000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 20, + "timestamp": 1499861689, + "topics": [ + "0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567" + ], + "transactionHash": "0xc810222a2cf4606245f2a6e2ce95c7e2fcfb0aadc9db95160eb92d3396afe465", + "transactionIndex": 32 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e1762d888f000000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a000000000000000000000000000000000000000000000000000000000c0d53c000000000000000000000000056795205d90ed2141c490a027d1874f2bff4aa860000000000000000000000007289877a9c924e776bd0f82ffe396e38ab03d546", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 21, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0xe4c4491286fae2c50b023f3893984e16fd1c1acd6aeb1a26f853810c101ad9bb", + "transactionIndex": 33 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000044a9059cbb0000000000000000000000007473f5a7f14d1ebcf87de4545cb1c24b1110d4cb0000000000000000000000000000000000000000000000029e4c12187b5e0000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 22, + "timestamp": 1499861689, + "topics": [ + "0xa9059cbb00000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x0000000000000000000000007473f5a7f14d1ebcf87de4545cb1c24b1110d4cb", + "0x0000000000000000000000000000000000000000000000029e4c12187b5e0000" + ], + "transactionHash": "0x98e9e199e1ae61cbd2272902d798b0e49aaebfc1d7e835a5a97a00d3c7e4ac82", + "transactionIndex": 35 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000029e4c12187b5e0000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 23, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x0000000000000000000000007473f5a7f14d1ebcf87de4545cb1c24b1110d4cb" + ], + "transactionHash": "0x98e9e199e1ae61cbd2272902d798b0e49aaebfc1d7e835a5a97a00d3c7e4ac82", + "transactionIndex": 35 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000005f5e100", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 24, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000008d71cd37bc1c715f6d4e9b5d68aa17a8b42cac87", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819" + ], + "transactionHash": "0xcb1652b8ed3221da0b2886df37f7f43bb8001e84a9e139819675709bc3a2a56f", + "transactionIndex": 39 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a0000000000000000000000008d71cd37bc1c715f6d4e9b5d68aa17a8b42cac870000000000000000000000000000000000000000000000000000000005f5e1000000000000000000000000000000000000000000000000000000000005f607f2", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 25, + "timestamp": 1499861689, + "topics": [ + "0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7" + ], + "transactionHash": "0xcb1652b8ed3221da0b2886df37f7f43bb8001e84a9e139819675709bc3a2a56f", + "transactionIndex": 39 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 26, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x0c2bb0b7059fd335f3dd4ecf037e04697217c481c14fb2155cb07d7ccd7f29d1", + "transactionIndex": 46 + }, + { + "address": "0xb1ea67eb59ec5dca0eb61d34dda7c68c37a07ba9", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 27, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x0c2bb0b7059fd335f3dd4ecf037e04697217c481c14fb2155cb07d7ccd7f29d1", + "transactionIndex": 46 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 28, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x4732917176d804a16c8683426d9dedfaff711d5156766d3535e1921a3655619c", + "transactionIndex": 50 + }, + { + "address": "0x8eb78278bbb58d781c158ed6821391bea6b40914", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 29, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x4732917176d804a16c8683426d9dedfaff711d5156766d3535e1921a3655619c", + "transactionIndex": 50 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 30, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xdbb3c2f63dd12fb0887ece311263807a7be7e001089ae3f992c0946c8e593c62", + "transactionIndex": 52 + }, + { + "address": "0xd49d5907876881676b4a02a6edebfb7614388b88", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 31, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xdbb3c2f63dd12fb0887ece311263807a7be7e001089ae3f992c0946c8e593c62", + "transactionIndex": 52 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 32, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xcc0bc2b2135f6b405432af5223c797ddecc3e0e75d6e1716e2d6ac61ff8883e3", + "transactionIndex": 53 + }, + { + "address": "0x681306f0aaa44216d2c5a2b88b153a0f20b18669", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 33, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xcc0bc2b2135f6b405432af5223c797ddecc3e0e75d6e1716e2d6ac61ff8883e3", + "transactionIndex": 53 + } + ], + "meta": { + "client": "0xdeadbeef", + "finalized": "0xdeadbeef", + "staging": "0xdeadbeef", + "ripe": "0xdeadbeef", + "unripe": "0xdeadbeef", + "chainId": 1, + "networkId": 1, + "chain": "mainnet" + } +} diff --git a/test/gold/tools/getBlocks/getBlocks_with_logs_decache.txt b/test/gold/tools/getBlocks/getBlocks_with_logs_decache.txt new file mode 100644 index 0000000000..b1f07e25f7 --- /dev/null +++ b/test/gold/tools/getBlocks/getBlocks_with_logs_decache.txt @@ -0,0 +1,13 @@ +chifra blocks 4012000-4012001 --logs --decache +TEST[DATE|TIME] Blocks: [4012000-4012001] +TEST[DATE|TIME] Logs: true +TEST[DATE|TIME] Decache: true +TEST[DATE|TIME] Caps: cache,decache,raw,ether +TEST[DATE|TIME] Format: json +{ + "data": [ + { + "msg": "1 items totaling 12642 bytes were removed from the logs cache." + } + ] +} diff --git a/test/gold/tools/getBlocks/getBlocks_with_logs_into_cache.txt b/test/gold/tools/getBlocks/getBlocks_with_logs_into_cache.txt new file mode 100644 index 0000000000..214b0d9b5f --- /dev/null +++ b/test/gold/tools/getBlocks/getBlocks_with_logs_into_cache.txt @@ -0,0 +1,517 @@ +chifra blocks 4012000-4012001 --logs --cache +TEST[DATE|TIME] Blocks: [4012000-4012001] +TEST[DATE|TIME] Logs: true +TEST[DATE|TIME] Enabled: blocks, logs, receipts +TEST[DATE|TIME] Cache: true +TEST[DATE|TIME] Caps: cache,decache,raw,ether +TEST[DATE|TIME] Format: json +{ + "data": [ + { + "address": "0xfca47962d45adfdfd1ab2d972315db4ce7ccf094", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000002c9a03c7a00", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 0, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000004315706f57b388b3a0f6489f6f678bc181bfe9f3" + ], + "transactionHash": "0x31b220e225f2d23d33582eea571481b5ea19187988bae0f7b9772d60f79fd138", + "transactionIndex": 8 + }, + { + "address": "0x4038e930ad78c53dc885a6b3a7d9db0d317c8662", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000015af1d78b58c40000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 1, + "timestamp": 1499861689, + "topics": [ + "0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c", + "0x00000000000000000000000098ee18d7a1f7510b78b36f5a16471c7cd0c1c531" + ], + "transactionHash": "0x31b220e225f2d23d33582eea571481b5ea19187988bae0f7b9772d60f79fd138", + "transactionIndex": 8 + }, + { + "address": "0x98ee18d7a1f7510b78b36f5a16471c7cd0c1c531", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000004315706f57b388b3a0f6489f6f678bc181bfe9f30000000000000000000000000000000000000000000000015af1d78b58c40000000000000000000000000000000000000000000000000000000002c9a03c7a0000000000000000000000000000000000348e59900ac844eaaebe7dda411bbabf", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 2, + "timestamp": 1499861689, + "topics": [ + "0x0396f60aaad038749091d273dc13aaabc63db6e2271c7bad442d5cf25cc43350" + ], + "transactionHash": "0x31b220e225f2d23d33582eea571481b5ea19187988bae0f7b9772d60f79fd138", + "transactionIndex": 8 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000044a9059cbb000000000000000000000000abfadddc8e8c557e9adc473e83f5c8701a013e0100000000000000000000000000000000000000000000000da8193a8b128e2000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 3, + "timestamp": 1499861689, + "topics": [ + "0xa9059cbb00000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x000000000000000000000000abfadddc8e8c557e9adc473e83f5c8701a013e01", + "0x00000000000000000000000000000000000000000000000da8193a8b128e2000" + ], + "transactionHash": "0xc2ed44113c8e316ac6bb135256bc25ab1369db846b6ad736487f609601c7f6a3", + "transactionIndex": 12 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000da8193a8b128e2000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 4, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x000000000000000000000000abfadddc8e8c557e9adc473e83f5c8701a013e01" + ], + "transactionHash": "0xc2ed44113c8e316ac6bb135256bc25ab1369db846b6ad736487f609601c7f6a3", + "transactionIndex": 12 + }, + { + "address": "0x7c5a0ce9267ed19b22f8cae653f198e3e8daf098", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000001b1ae4d6e2ef500000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 5, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000059452cff9d54acf1820c10ae994ce4253c9eccfd", + "0x0000000000000000000000005e575279bf9f4acf0a130c186861454247394c06" + ], + "transactionHash": "0xfcc4c9ea238a31e91ad8f166799f221ad71832b3bfde66a622762adc30f5864e", + "transactionIndex": 15 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000df8475800", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 6, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000002cf26e61790c11e1f104eb03511cb28fe1fa1b16", + "0x000000000000000000000000cd463946a100039e1a17cdbc42d9c1a593db4092" + ], + "transactionHash": "0x3128e19803354bdedb51ac9dcdb57cbbf45bd52e4e439e1d6db9537d461ea7f7", + "transactionIndex": 17 + }, + { + "address": "0xd26114cd6ee289accf82350c8d8487fedb8a0c07", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000152d02c7e14af6800000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 7, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000002b1a1898e2f986b88c9a75e41786f4949567ced", + "0x00000000000000000000000066b68ebda88280ce5c821a9ccc38df078c3fd989" + ], + "transactionHash": "0x81a880554a332b38c41be5052323ec1d97a75d3b2d0dee673eaa6120247d54d1", + "transactionIndex": 21 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a66ef4506f20000000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a00000000000000000000000000000000000000000000000000000009c765240000000000000000000000000000000000000000000000000000000000003d5eb300000000000000000000000000000000000000000000000000000000aea9858b0000000000000000000000008379fc96ef046ec38ce6b71fe9e0936681e44a72000000000000000000000000000000000000000000000000000000000000001c0e4d37c4d245115ea647572d1d34d981fdc985bdc49d06f827732c4e390e43113e871de31ababe1b656e9f7bdb1f82fa109e4c72fcf0d0660c031c808b2d341a", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 8, + "timestamp": 1499861689, + "topics": [ + "0x1e0b760c386003e9cb9bcf4fcf3997886042859d9b6ed6320e804597fcdb28b0" + ], + "transactionHash": "0x289054720de7cff214940b84df5e1772cfbd7797180132dd395c14f87bdc4eeb", + "transactionIndex": 22 + }, + { + "address": "0xfca47962d45adfdfd1ab2d972315db4ce7ccf094", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000011407cf4d80", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 9, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000ae2f15a44ffac4e7b15212ac00807f76b05a445" + ], + "transactionHash": "0x2c452cc171214decaa0ffd9c8627dfa3c2cfb626f281334213f6a4e476524607", + "transactionIndex": 23 + }, + { + "address": "0x4038e930ad78c53dc885a6b3a7d9db0d317c8662", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000008632bdc422070000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 10, + "timestamp": 1499861689, + "topics": [ + "0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c", + "0x00000000000000000000000098ee18d7a1f7510b78b36f5a16471c7cd0c1c531" + ], + "transactionHash": "0x2c452cc171214decaa0ffd9c8627dfa3c2cfb626f281334213f6a4e476524607", + "transactionIndex": 23 + }, + { + "address": "0x98ee18d7a1f7510b78b36f5a16471c7cd0c1c531", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000ae2f15a44ffac4e7b15212ac00807f76b05a4450000000000000000000000000000000000000000000000008632bdc4220700000000000000000000000000000000000000000000000000000000011407cf4d8000000000000000000000000000000000969765d676504abc96781f4ab155e83d", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 11, + "timestamp": 1499861689, + "topics": [ + "0x0396f60aaad038749091d273dc13aaabc63db6e2271c7bad442d5cf25cc43350" + ], + "transactionHash": "0x2c452cc171214decaa0ffd9c8627dfa3c2cfb626f281334213f6a4e476524607", + "transactionIndex": 23 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000988c1ee48354ce70000000000000000000000004470bb87d77b963a013db939be332f927f2b992e000000000000000000000000000000000000000000000000000000000069e37c000000000000000000000000b3f9ab81045e9693dbe8f7735c862193f9977eea000000000000000000000000e929710c5ece52427ed70451cf21458fecedd7b4", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 12, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0x5c907700987753586d126ff8af65a312a3ac05f1006e2de8005ff51393c7a9fb", + "transactionIndex": 24 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d5231444cd6800000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a000000000000000000000000000000000000000000000000000000001213fda000000000000000000000000056795205d90ed2141c490a027d1874f2bff4aa860000000000000000000000002990bf9615b3db074f1d4fe288b8beb13cf3b34f", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 13, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0x6c86fd5465bb13a0e3e647575ea45667e972550d1b1807bd1df5a228d9745b73", + "transactionIndex": 25 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000125ce463496f28400000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a00000000000000000000000000000000000000000000000000000018cf07a5ab0000000000000000000000008c16c8fe98a50b515cf8268090bcb8886b2419080000000000000000000000002a1105fba173688fb698a05ae4e5c5f72b5c92c5", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 14, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0x767c71601f0ad49b2da9352f1ef2ddafef4a3bd41a229fcebc3dc0f9a4d34a75", + "transactionIndex": 26 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000000000000a29deb14", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 15, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819", + "0x0000000000000000000000004df6c50c4ff072bda0a7618e544b3c17aa6e0b35" + ], + "transactionHash": "0x79e2328c19ef160aaa362c135f694b35d885fa96811aae1ca30800cc8650f65c", + "transactionIndex": 27 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a0000000000000000000000004df6c50c4ff072bda0a7618e544b3c17aa6e0b3500000000000000000000000000000000000000000000000000000000a29deb140000000000000000000000000000000000000000000000000000000000000000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 16, + "timestamp": 1499861689, + "topics": [ + "0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567" + ], + "transactionHash": "0x79e2328c19ef160aaa362c135f694b35d885fa96811aae1ca30800cc8650f65c", + "transactionIndex": 27 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000005f5e100", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 17, + "timestamp": 1499861689, + "topics": [ + "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", + "0x0000000000000000000000008d71cd37bc1c715f6d4e9b5d68aa17a8b42cac87", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819" + ], + "transactionHash": "0xa75bed6b3e4a832270ab5a164fc84c1d02eda8a6ecf35ee4023eecbbb75e6fe8", + "transactionIndex": 30 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000030524ce0", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 18, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819", + "0x0000000000000000000000009095b24ee684b232207153137da257beac85aaf1" + ], + "transactionHash": "0xacdd6f6ff9da1631d0e10947085b3b4318384f7cd132595532684004a76af7ea", + "transactionIndex": 31 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a0000000000000000000000009095b24ee684b232207153137da257beac85aaf10000000000000000000000000000000000000000000000000000000030524ce0000000000000000000000000000000000000000000000000000000000000b870", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 19, + "timestamp": 1499861689, + "topics": [ + "0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567" + ], + "transactionHash": "0xacdd6f6ff9da1631d0e10947085b3b4318384f7cd132595532684004a76af7ea", + "transactionIndex": 31 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fddc06e314380c09da9455287b6fb7dcca4bf2bb000000000000000000000000000000000000000000000000526f1e874dd200000000000000000000000000000000000000000000000000000000000000000000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 20, + "timestamp": 1499861689, + "topics": [ + "0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567" + ], + "transactionHash": "0xc810222a2cf4606245f2a6e2ce95c7e2fcfb0aadc9db95160eb92d3396afe465", + "transactionIndex": 32 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e1762d888f000000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a000000000000000000000000000000000000000000000000000000000c0d53c000000000000000000000000056795205d90ed2141c490a027d1874f2bff4aa860000000000000000000000007289877a9c924e776bd0f82ffe396e38ab03d546", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 21, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0xe4c4491286fae2c50b023f3893984e16fd1c1acd6aeb1a26f853810c101ad9bb", + "transactionIndex": 33 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000044a9059cbb0000000000000000000000007473f5a7f14d1ebcf87de4545cb1c24b1110d4cb0000000000000000000000000000000000000000000000029e4c12187b5e0000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 22, + "timestamp": 1499861689, + "topics": [ + "0xa9059cbb00000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x0000000000000000000000007473f5a7f14d1ebcf87de4545cb1c24b1110d4cb", + "0x0000000000000000000000000000000000000000000000029e4c12187b5e0000" + ], + "transactionHash": "0x98e9e199e1ae61cbd2272902d798b0e49aaebfc1d7e835a5a97a00d3c7e4ac82", + "transactionIndex": 35 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000029e4c12187b5e0000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 23, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x0000000000000000000000007473f5a7f14d1ebcf87de4545cb1c24b1110d4cb" + ], + "transactionHash": "0x98e9e199e1ae61cbd2272902d798b0e49aaebfc1d7e835a5a97a00d3c7e4ac82", + "transactionIndex": 35 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000005f5e100", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 24, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000008d71cd37bc1c715f6d4e9b5d68aa17a8b42cac87", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819" + ], + "transactionHash": "0xcb1652b8ed3221da0b2886df37f7f43bb8001e84a9e139819675709bc3a2a56f", + "transactionIndex": 39 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a0000000000000000000000008d71cd37bc1c715f6d4e9b5d68aa17a8b42cac870000000000000000000000000000000000000000000000000000000005f5e1000000000000000000000000000000000000000000000000000000000005f607f2", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 25, + "timestamp": 1499861689, + "topics": [ + "0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7" + ], + "transactionHash": "0xcb1652b8ed3221da0b2886df37f7f43bb8001e84a9e139819675709bc3a2a56f", + "transactionIndex": 39 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 26, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x0c2bb0b7059fd335f3dd4ecf037e04697217c481c14fb2155cb07d7ccd7f29d1", + "transactionIndex": 46 + }, + { + "address": "0xb1ea67eb59ec5dca0eb61d34dda7c68c37a07ba9", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 27, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x0c2bb0b7059fd335f3dd4ecf037e04697217c481c14fb2155cb07d7ccd7f29d1", + "transactionIndex": 46 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 28, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x4732917176d804a16c8683426d9dedfaff711d5156766d3535e1921a3655619c", + "transactionIndex": 50 + }, + { + "address": "0x8eb78278bbb58d781c158ed6821391bea6b40914", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 29, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x4732917176d804a16c8683426d9dedfaff711d5156766d3535e1921a3655619c", + "transactionIndex": 50 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 30, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xdbb3c2f63dd12fb0887ece311263807a7be7e001089ae3f992c0946c8e593c62", + "transactionIndex": 52 + }, + { + "address": "0xd49d5907876881676b4a02a6edebfb7614388b88", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 31, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xdbb3c2f63dd12fb0887ece311263807a7be7e001089ae3f992c0946c8e593c62", + "transactionIndex": 52 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 32, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xcc0bc2b2135f6b405432af5223c797ddecc3e0e75d6e1716e2d6ac61ff8883e3", + "transactionIndex": 53 + }, + { + "address": "0x681306f0aaa44216d2c5a2b88b153a0f20b18669", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 33, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xcc0bc2b2135f6b405432af5223c797ddecc3e0e75d6e1716e2d6ac61ff8883e3", + "transactionIndex": 53 + } + ] +} diff --git a/test/gold/tools/getBlocks/getBlocks_with_logs_into_cache2.txt b/test/gold/tools/getBlocks/getBlocks_with_logs_into_cache2.txt new file mode 100644 index 0000000000..214b0d9b5f --- /dev/null +++ b/test/gold/tools/getBlocks/getBlocks_with_logs_into_cache2.txt @@ -0,0 +1,517 @@ +chifra blocks 4012000-4012001 --logs --cache +TEST[DATE|TIME] Blocks: [4012000-4012001] +TEST[DATE|TIME] Logs: true +TEST[DATE|TIME] Enabled: blocks, logs, receipts +TEST[DATE|TIME] Cache: true +TEST[DATE|TIME] Caps: cache,decache,raw,ether +TEST[DATE|TIME] Format: json +{ + "data": [ + { + "address": "0xfca47962d45adfdfd1ab2d972315db4ce7ccf094", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000002c9a03c7a00", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 0, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000004315706f57b388b3a0f6489f6f678bc181bfe9f3" + ], + "transactionHash": "0x31b220e225f2d23d33582eea571481b5ea19187988bae0f7b9772d60f79fd138", + "transactionIndex": 8 + }, + { + "address": "0x4038e930ad78c53dc885a6b3a7d9db0d317c8662", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000015af1d78b58c40000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 1, + "timestamp": 1499861689, + "topics": [ + "0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c", + "0x00000000000000000000000098ee18d7a1f7510b78b36f5a16471c7cd0c1c531" + ], + "transactionHash": "0x31b220e225f2d23d33582eea571481b5ea19187988bae0f7b9772d60f79fd138", + "transactionIndex": 8 + }, + { + "address": "0x98ee18d7a1f7510b78b36f5a16471c7cd0c1c531", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000004315706f57b388b3a0f6489f6f678bc181bfe9f30000000000000000000000000000000000000000000000015af1d78b58c40000000000000000000000000000000000000000000000000000000002c9a03c7a0000000000000000000000000000000000348e59900ac844eaaebe7dda411bbabf", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 2, + "timestamp": 1499861689, + "topics": [ + "0x0396f60aaad038749091d273dc13aaabc63db6e2271c7bad442d5cf25cc43350" + ], + "transactionHash": "0x31b220e225f2d23d33582eea571481b5ea19187988bae0f7b9772d60f79fd138", + "transactionIndex": 8 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000044a9059cbb000000000000000000000000abfadddc8e8c557e9adc473e83f5c8701a013e0100000000000000000000000000000000000000000000000da8193a8b128e2000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 3, + "timestamp": 1499861689, + "topics": [ + "0xa9059cbb00000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x000000000000000000000000abfadddc8e8c557e9adc473e83f5c8701a013e01", + "0x00000000000000000000000000000000000000000000000da8193a8b128e2000" + ], + "transactionHash": "0xc2ed44113c8e316ac6bb135256bc25ab1369db846b6ad736487f609601c7f6a3", + "transactionIndex": 12 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000da8193a8b128e2000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 4, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x000000000000000000000000abfadddc8e8c557e9adc473e83f5c8701a013e01" + ], + "transactionHash": "0xc2ed44113c8e316ac6bb135256bc25ab1369db846b6ad736487f609601c7f6a3", + "transactionIndex": 12 + }, + { + "address": "0x7c5a0ce9267ed19b22f8cae653f198e3e8daf098", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000001b1ae4d6e2ef500000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 5, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000059452cff9d54acf1820c10ae994ce4253c9eccfd", + "0x0000000000000000000000005e575279bf9f4acf0a130c186861454247394c06" + ], + "transactionHash": "0xfcc4c9ea238a31e91ad8f166799f221ad71832b3bfde66a622762adc30f5864e", + "transactionIndex": 15 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000df8475800", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 6, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000002cf26e61790c11e1f104eb03511cb28fe1fa1b16", + "0x000000000000000000000000cd463946a100039e1a17cdbc42d9c1a593db4092" + ], + "transactionHash": "0x3128e19803354bdedb51ac9dcdb57cbbf45bd52e4e439e1d6db9537d461ea7f7", + "transactionIndex": 17 + }, + { + "address": "0xd26114cd6ee289accf82350c8d8487fedb8a0c07", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000152d02c7e14af6800000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 7, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000002b1a1898e2f986b88c9a75e41786f4949567ced", + "0x00000000000000000000000066b68ebda88280ce5c821a9ccc38df078c3fd989" + ], + "transactionHash": "0x81a880554a332b38c41be5052323ec1d97a75d3b2d0dee673eaa6120247d54d1", + "transactionIndex": 21 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a66ef4506f20000000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a00000000000000000000000000000000000000000000000000000009c765240000000000000000000000000000000000000000000000000000000000003d5eb300000000000000000000000000000000000000000000000000000000aea9858b0000000000000000000000008379fc96ef046ec38ce6b71fe9e0936681e44a72000000000000000000000000000000000000000000000000000000000000001c0e4d37c4d245115ea647572d1d34d981fdc985bdc49d06f827732c4e390e43113e871de31ababe1b656e9f7bdb1f82fa109e4c72fcf0d0660c031c808b2d341a", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 8, + "timestamp": 1499861689, + "topics": [ + "0x1e0b760c386003e9cb9bcf4fcf3997886042859d9b6ed6320e804597fcdb28b0" + ], + "transactionHash": "0x289054720de7cff214940b84df5e1772cfbd7797180132dd395c14f87bdc4eeb", + "transactionIndex": 22 + }, + { + "address": "0xfca47962d45adfdfd1ab2d972315db4ce7ccf094", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000011407cf4d80", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 9, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000ae2f15a44ffac4e7b15212ac00807f76b05a445" + ], + "transactionHash": "0x2c452cc171214decaa0ffd9c8627dfa3c2cfb626f281334213f6a4e476524607", + "transactionIndex": 23 + }, + { + "address": "0x4038e930ad78c53dc885a6b3a7d9db0d317c8662", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000008632bdc422070000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 10, + "timestamp": 1499861689, + "topics": [ + "0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c", + "0x00000000000000000000000098ee18d7a1f7510b78b36f5a16471c7cd0c1c531" + ], + "transactionHash": "0x2c452cc171214decaa0ffd9c8627dfa3c2cfb626f281334213f6a4e476524607", + "transactionIndex": 23 + }, + { + "address": "0x98ee18d7a1f7510b78b36f5a16471c7cd0c1c531", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000ae2f15a44ffac4e7b15212ac00807f76b05a4450000000000000000000000000000000000000000000000008632bdc4220700000000000000000000000000000000000000000000000000000000011407cf4d8000000000000000000000000000000000969765d676504abc96781f4ab155e83d", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 11, + "timestamp": 1499861689, + "topics": [ + "0x0396f60aaad038749091d273dc13aaabc63db6e2271c7bad442d5cf25cc43350" + ], + "transactionHash": "0x2c452cc171214decaa0ffd9c8627dfa3c2cfb626f281334213f6a4e476524607", + "transactionIndex": 23 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000988c1ee48354ce70000000000000000000000004470bb87d77b963a013db939be332f927f2b992e000000000000000000000000000000000000000000000000000000000069e37c000000000000000000000000b3f9ab81045e9693dbe8f7735c862193f9977eea000000000000000000000000e929710c5ece52427ed70451cf21458fecedd7b4", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 12, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0x5c907700987753586d126ff8af65a312a3ac05f1006e2de8005ff51393c7a9fb", + "transactionIndex": 24 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d5231444cd6800000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a000000000000000000000000000000000000000000000000000000001213fda000000000000000000000000056795205d90ed2141c490a027d1874f2bff4aa860000000000000000000000002990bf9615b3db074f1d4fe288b8beb13cf3b34f", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 13, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0x6c86fd5465bb13a0e3e647575ea45667e972550d1b1807bd1df5a228d9745b73", + "transactionIndex": 25 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000125ce463496f28400000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a00000000000000000000000000000000000000000000000000000018cf07a5ab0000000000000000000000008c16c8fe98a50b515cf8268090bcb8886b2419080000000000000000000000002a1105fba173688fb698a05ae4e5c5f72b5c92c5", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 14, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0x767c71601f0ad49b2da9352f1ef2ddafef4a3bd41a229fcebc3dc0f9a4d34a75", + "transactionIndex": 26 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000000000000a29deb14", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 15, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819", + "0x0000000000000000000000004df6c50c4ff072bda0a7618e544b3c17aa6e0b35" + ], + "transactionHash": "0x79e2328c19ef160aaa362c135f694b35d885fa96811aae1ca30800cc8650f65c", + "transactionIndex": 27 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a0000000000000000000000004df6c50c4ff072bda0a7618e544b3c17aa6e0b3500000000000000000000000000000000000000000000000000000000a29deb140000000000000000000000000000000000000000000000000000000000000000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 16, + "timestamp": 1499861689, + "topics": [ + "0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567" + ], + "transactionHash": "0x79e2328c19ef160aaa362c135f694b35d885fa96811aae1ca30800cc8650f65c", + "transactionIndex": 27 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000005f5e100", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 17, + "timestamp": 1499861689, + "topics": [ + "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", + "0x0000000000000000000000008d71cd37bc1c715f6d4e9b5d68aa17a8b42cac87", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819" + ], + "transactionHash": "0xa75bed6b3e4a832270ab5a164fc84c1d02eda8a6ecf35ee4023eecbbb75e6fe8", + "transactionIndex": 30 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000030524ce0", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 18, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819", + "0x0000000000000000000000009095b24ee684b232207153137da257beac85aaf1" + ], + "transactionHash": "0xacdd6f6ff9da1631d0e10947085b3b4318384f7cd132595532684004a76af7ea", + "transactionIndex": 31 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a0000000000000000000000009095b24ee684b232207153137da257beac85aaf10000000000000000000000000000000000000000000000000000000030524ce0000000000000000000000000000000000000000000000000000000000000b870", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 19, + "timestamp": 1499861689, + "topics": [ + "0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567" + ], + "transactionHash": "0xacdd6f6ff9da1631d0e10947085b3b4318384f7cd132595532684004a76af7ea", + "transactionIndex": 31 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fddc06e314380c09da9455287b6fb7dcca4bf2bb000000000000000000000000000000000000000000000000526f1e874dd200000000000000000000000000000000000000000000000000000000000000000000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 20, + "timestamp": 1499861689, + "topics": [ + "0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567" + ], + "transactionHash": "0xc810222a2cf4606245f2a6e2ce95c7e2fcfb0aadc9db95160eb92d3396afe465", + "transactionIndex": 32 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e1762d888f000000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a000000000000000000000000000000000000000000000000000000000c0d53c000000000000000000000000056795205d90ed2141c490a027d1874f2bff4aa860000000000000000000000007289877a9c924e776bd0f82ffe396e38ab03d546", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 21, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0xe4c4491286fae2c50b023f3893984e16fd1c1acd6aeb1a26f853810c101ad9bb", + "transactionIndex": 33 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000044a9059cbb0000000000000000000000007473f5a7f14d1ebcf87de4545cb1c24b1110d4cb0000000000000000000000000000000000000000000000029e4c12187b5e0000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 22, + "timestamp": 1499861689, + "topics": [ + "0xa9059cbb00000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x0000000000000000000000007473f5a7f14d1ebcf87de4545cb1c24b1110d4cb", + "0x0000000000000000000000000000000000000000000000029e4c12187b5e0000" + ], + "transactionHash": "0x98e9e199e1ae61cbd2272902d798b0e49aaebfc1d7e835a5a97a00d3c7e4ac82", + "transactionIndex": 35 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000029e4c12187b5e0000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 23, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x0000000000000000000000007473f5a7f14d1ebcf87de4545cb1c24b1110d4cb" + ], + "transactionHash": "0x98e9e199e1ae61cbd2272902d798b0e49aaebfc1d7e835a5a97a00d3c7e4ac82", + "transactionIndex": 35 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000005f5e100", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 24, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000008d71cd37bc1c715f6d4e9b5d68aa17a8b42cac87", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819" + ], + "transactionHash": "0xcb1652b8ed3221da0b2886df37f7f43bb8001e84a9e139819675709bc3a2a56f", + "transactionIndex": 39 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a0000000000000000000000008d71cd37bc1c715f6d4e9b5d68aa17a8b42cac870000000000000000000000000000000000000000000000000000000005f5e1000000000000000000000000000000000000000000000000000000000005f607f2", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 25, + "timestamp": 1499861689, + "topics": [ + "0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7" + ], + "transactionHash": "0xcb1652b8ed3221da0b2886df37f7f43bb8001e84a9e139819675709bc3a2a56f", + "transactionIndex": 39 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 26, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x0c2bb0b7059fd335f3dd4ecf037e04697217c481c14fb2155cb07d7ccd7f29d1", + "transactionIndex": 46 + }, + { + "address": "0xb1ea67eb59ec5dca0eb61d34dda7c68c37a07ba9", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 27, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x0c2bb0b7059fd335f3dd4ecf037e04697217c481c14fb2155cb07d7ccd7f29d1", + "transactionIndex": 46 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 28, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x4732917176d804a16c8683426d9dedfaff711d5156766d3535e1921a3655619c", + "transactionIndex": 50 + }, + { + "address": "0x8eb78278bbb58d781c158ed6821391bea6b40914", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 29, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x4732917176d804a16c8683426d9dedfaff711d5156766d3535e1921a3655619c", + "transactionIndex": 50 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 30, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xdbb3c2f63dd12fb0887ece311263807a7be7e001089ae3f992c0946c8e593c62", + "transactionIndex": 52 + }, + { + "address": "0xd49d5907876881676b4a02a6edebfb7614388b88", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 31, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xdbb3c2f63dd12fb0887ece311263807a7be7e001089ae3f992c0946c8e593c62", + "transactionIndex": 52 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 32, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xcc0bc2b2135f6b405432af5223c797ddecc3e0e75d6e1716e2d6ac61ff8883e3", + "transactionIndex": 53 + }, + { + "address": "0x681306f0aaa44216d2c5a2b88b153a0f20b18669", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 33, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xcc0bc2b2135f6b405432af5223c797ddecc3e0e75d6e1716e2d6ac61ff8883e3", + "transactionIndex": 53 + } + ] +} diff --git a/test/gold/tools/getBlocks/getBlocks_with_logs_outof_cache.txt b/test/gold/tools/getBlocks/getBlocks_with_logs_outof_cache.txt new file mode 100644 index 0000000000..0a420db18b --- /dev/null +++ b/test/gold/tools/getBlocks/getBlocks_with_logs_outof_cache.txt @@ -0,0 +1,515 @@ +chifra blocks 4012000-4012001 --logs +TEST[DATE|TIME] Blocks: [4012000-4012001] +TEST[DATE|TIME] Logs: true +TEST[DATE|TIME] Caps: cache,decache,raw,ether +TEST[DATE|TIME] Format: json +{ + "data": [ + { + "address": "0xfca47962d45adfdfd1ab2d972315db4ce7ccf094", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000002c9a03c7a00", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 0, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000004315706f57b388b3a0f6489f6f678bc181bfe9f3" + ], + "transactionHash": "0x31b220e225f2d23d33582eea571481b5ea19187988bae0f7b9772d60f79fd138", + "transactionIndex": 8 + }, + { + "address": "0x4038e930ad78c53dc885a6b3a7d9db0d317c8662", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000015af1d78b58c40000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 1, + "timestamp": 1499861689, + "topics": [ + "0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c", + "0x00000000000000000000000098ee18d7a1f7510b78b36f5a16471c7cd0c1c531" + ], + "transactionHash": "0x31b220e225f2d23d33582eea571481b5ea19187988bae0f7b9772d60f79fd138", + "transactionIndex": 8 + }, + { + "address": "0x98ee18d7a1f7510b78b36f5a16471c7cd0c1c531", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000004315706f57b388b3a0f6489f6f678bc181bfe9f30000000000000000000000000000000000000000000000015af1d78b58c40000000000000000000000000000000000000000000000000000000002c9a03c7a0000000000000000000000000000000000348e59900ac844eaaebe7dda411bbabf", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 2, + "timestamp": 1499861689, + "topics": [ + "0x0396f60aaad038749091d273dc13aaabc63db6e2271c7bad442d5cf25cc43350" + ], + "transactionHash": "0x31b220e225f2d23d33582eea571481b5ea19187988bae0f7b9772d60f79fd138", + "transactionIndex": 8 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000044a9059cbb000000000000000000000000abfadddc8e8c557e9adc473e83f5c8701a013e0100000000000000000000000000000000000000000000000da8193a8b128e2000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 3, + "timestamp": 1499861689, + "topics": [ + "0xa9059cbb00000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x000000000000000000000000abfadddc8e8c557e9adc473e83f5c8701a013e01", + "0x00000000000000000000000000000000000000000000000da8193a8b128e2000" + ], + "transactionHash": "0xc2ed44113c8e316ac6bb135256bc25ab1369db846b6ad736487f609601c7f6a3", + "transactionIndex": 12 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000da8193a8b128e2000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 4, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x000000000000000000000000abfadddc8e8c557e9adc473e83f5c8701a013e01" + ], + "transactionHash": "0xc2ed44113c8e316ac6bb135256bc25ab1369db846b6ad736487f609601c7f6a3", + "transactionIndex": 12 + }, + { + "address": "0x7c5a0ce9267ed19b22f8cae653f198e3e8daf098", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000001b1ae4d6e2ef500000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 5, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000059452cff9d54acf1820c10ae994ce4253c9eccfd", + "0x0000000000000000000000005e575279bf9f4acf0a130c186861454247394c06" + ], + "transactionHash": "0xfcc4c9ea238a31e91ad8f166799f221ad71832b3bfde66a622762adc30f5864e", + "transactionIndex": 15 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000df8475800", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 6, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000002cf26e61790c11e1f104eb03511cb28fe1fa1b16", + "0x000000000000000000000000cd463946a100039e1a17cdbc42d9c1a593db4092" + ], + "transactionHash": "0x3128e19803354bdedb51ac9dcdb57cbbf45bd52e4e439e1d6db9537d461ea7f7", + "transactionIndex": 17 + }, + { + "address": "0xd26114cd6ee289accf82350c8d8487fedb8a0c07", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000152d02c7e14af6800000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 7, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000002b1a1898e2f986b88c9a75e41786f4949567ced", + "0x00000000000000000000000066b68ebda88280ce5c821a9ccc38df078c3fd989" + ], + "transactionHash": "0x81a880554a332b38c41be5052323ec1d97a75d3b2d0dee673eaa6120247d54d1", + "transactionIndex": 21 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a66ef4506f20000000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a00000000000000000000000000000000000000000000000000000009c765240000000000000000000000000000000000000000000000000000000000003d5eb300000000000000000000000000000000000000000000000000000000aea9858b0000000000000000000000008379fc96ef046ec38ce6b71fe9e0936681e44a72000000000000000000000000000000000000000000000000000000000000001c0e4d37c4d245115ea647572d1d34d981fdc985bdc49d06f827732c4e390e43113e871de31ababe1b656e9f7bdb1f82fa109e4c72fcf0d0660c031c808b2d341a", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 8, + "timestamp": 1499861689, + "topics": [ + "0x1e0b760c386003e9cb9bcf4fcf3997886042859d9b6ed6320e804597fcdb28b0" + ], + "transactionHash": "0x289054720de7cff214940b84df5e1772cfbd7797180132dd395c14f87bdc4eeb", + "transactionIndex": 22 + }, + { + "address": "0xfca47962d45adfdfd1ab2d972315db4ce7ccf094", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000011407cf4d80", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 9, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000ae2f15a44ffac4e7b15212ac00807f76b05a445" + ], + "transactionHash": "0x2c452cc171214decaa0ffd9c8627dfa3c2cfb626f281334213f6a4e476524607", + "transactionIndex": 23 + }, + { + "address": "0x4038e930ad78c53dc885a6b3a7d9db0d317c8662", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000008632bdc422070000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 10, + "timestamp": 1499861689, + "topics": [ + "0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c", + "0x00000000000000000000000098ee18d7a1f7510b78b36f5a16471c7cd0c1c531" + ], + "transactionHash": "0x2c452cc171214decaa0ffd9c8627dfa3c2cfb626f281334213f6a4e476524607", + "transactionIndex": 23 + }, + { + "address": "0x98ee18d7a1f7510b78b36f5a16471c7cd0c1c531", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000ae2f15a44ffac4e7b15212ac00807f76b05a4450000000000000000000000000000000000000000000000008632bdc4220700000000000000000000000000000000000000000000000000000000011407cf4d8000000000000000000000000000000000969765d676504abc96781f4ab155e83d", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 11, + "timestamp": 1499861689, + "topics": [ + "0x0396f60aaad038749091d273dc13aaabc63db6e2271c7bad442d5cf25cc43350" + ], + "transactionHash": "0x2c452cc171214decaa0ffd9c8627dfa3c2cfb626f281334213f6a4e476524607", + "transactionIndex": 23 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000988c1ee48354ce70000000000000000000000004470bb87d77b963a013db939be332f927f2b992e000000000000000000000000000000000000000000000000000000000069e37c000000000000000000000000b3f9ab81045e9693dbe8f7735c862193f9977eea000000000000000000000000e929710c5ece52427ed70451cf21458fecedd7b4", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 12, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0x5c907700987753586d126ff8af65a312a3ac05f1006e2de8005ff51393c7a9fb", + "transactionIndex": 24 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d5231444cd6800000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a000000000000000000000000000000000000000000000000000000001213fda000000000000000000000000056795205d90ed2141c490a027d1874f2bff4aa860000000000000000000000002990bf9615b3db074f1d4fe288b8beb13cf3b34f", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 13, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0x6c86fd5465bb13a0e3e647575ea45667e972550d1b1807bd1df5a228d9745b73", + "transactionIndex": 25 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000125ce463496f28400000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a00000000000000000000000000000000000000000000000000000018cf07a5ab0000000000000000000000008c16c8fe98a50b515cf8268090bcb8886b2419080000000000000000000000002a1105fba173688fb698a05ae4e5c5f72b5c92c5", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 14, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0x767c71601f0ad49b2da9352f1ef2ddafef4a3bd41a229fcebc3dc0f9a4d34a75", + "transactionIndex": 26 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000000000000000000000000000000000000a29deb14", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 15, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819", + "0x0000000000000000000000004df6c50c4ff072bda0a7618e544b3c17aa6e0b35" + ], + "transactionHash": "0x79e2328c19ef160aaa362c135f694b35d885fa96811aae1ca30800cc8650f65c", + "transactionIndex": 27 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a0000000000000000000000004df6c50c4ff072bda0a7618e544b3c17aa6e0b3500000000000000000000000000000000000000000000000000000000a29deb140000000000000000000000000000000000000000000000000000000000000000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 16, + "timestamp": 1499861689, + "topics": [ + "0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567" + ], + "transactionHash": "0x79e2328c19ef160aaa362c135f694b35d885fa96811aae1ca30800cc8650f65c", + "transactionIndex": 27 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000005f5e100", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 17, + "timestamp": 1499861689, + "topics": [ + "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", + "0x0000000000000000000000008d71cd37bc1c715f6d4e9b5d68aa17a8b42cac87", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819" + ], + "transactionHash": "0xa75bed6b3e4a832270ab5a164fc84c1d02eda8a6ecf35ee4023eecbbb75e6fe8", + "transactionIndex": 30 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000030524ce0", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 18, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819", + "0x0000000000000000000000009095b24ee684b232207153137da257beac85aaf1" + ], + "transactionHash": "0xacdd6f6ff9da1631d0e10947085b3b4318384f7cd132595532684004a76af7ea", + "transactionIndex": 31 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a0000000000000000000000009095b24ee684b232207153137da257beac85aaf10000000000000000000000000000000000000000000000000000000030524ce0000000000000000000000000000000000000000000000000000000000000b870", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 19, + "timestamp": 1499861689, + "topics": [ + "0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567" + ], + "transactionHash": "0xacdd6f6ff9da1631d0e10947085b3b4318384f7cd132595532684004a76af7ea", + "transactionIndex": 31 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fddc06e314380c09da9455287b6fb7dcca4bf2bb000000000000000000000000000000000000000000000000526f1e874dd200000000000000000000000000000000000000000000000000000000000000000000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 20, + "timestamp": 1499861689, + "topics": [ + "0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567" + ], + "transactionHash": "0xc810222a2cf4606245f2a6e2ce95c7e2fcfb0aadc9db95160eb92d3396afe465", + "transactionIndex": 32 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e1762d888f000000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a000000000000000000000000000000000000000000000000000000000c0d53c000000000000000000000000056795205d90ed2141c490a027d1874f2bff4aa860000000000000000000000007289877a9c924e776bd0f82ffe396e38ab03d546", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 21, + "timestamp": 1499861689, + "topics": [ + "0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d" + ], + "transactionHash": "0xe4c4491286fae2c50b023f3893984e16fd1c1acd6aeb1a26f853810c101ad9bb", + "transactionIndex": 33 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000044a9059cbb0000000000000000000000007473f5a7f14d1ebcf87de4545cb1c24b1110d4cb0000000000000000000000000000000000000000000000029e4c12187b5e0000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 22, + "timestamp": 1499861689, + "topics": [ + "0xa9059cbb00000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x0000000000000000000000007473f5a7f14d1ebcf87de4545cb1c24b1110d4cb", + "0x0000000000000000000000000000000000000000000000029e4c12187b5e0000" + ], + "transactionHash": "0x98e9e199e1ae61cbd2272902d798b0e49aaebfc1d7e835a5a97a00d3c7e4ac82", + "transactionIndex": 35 + }, + { + "address": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000029e4c12187b5e0000", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 23, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000069ea6b31ef305d6b99bb2d4c9d99456fa108b02a", + "0x0000000000000000000000007473f5a7f14d1ebcf87de4545cb1c24b1110d4cb" + ], + "transactionHash": "0x98e9e199e1ae61cbd2272902d798b0e49aaebfc1d7e835a5a97a00d3c7e4ac82", + "transactionIndex": 35 + }, + { + "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x0000000000000000000000000000000000000000000000000000000005f5e100", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 24, + "timestamp": 1499861689, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000008d71cd37bc1c715f6d4e9b5d68aa17a8b42cac87", + "0x0000000000000000000000008d12a197cb00d4747a1fe03395095ce2a5cc6819" + ], + "transactionHash": "0xcb1652b8ed3221da0b2886df37f7f43bb8001e84a9e139819675709bc3a2a56f", + "transactionIndex": 39 + }, + { + "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a0000000000000000000000008d71cd37bc1c715f6d4e9b5d68aa17a8b42cac870000000000000000000000000000000000000000000000000000000005f5e1000000000000000000000000000000000000000000000000000000000005f607f2", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 25, + "timestamp": 1499861689, + "topics": [ + "0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7" + ], + "transactionHash": "0xcb1652b8ed3221da0b2886df37f7f43bb8001e84a9e139819675709bc3a2a56f", + "transactionIndex": 39 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 26, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x0c2bb0b7059fd335f3dd4ecf037e04697217c481c14fb2155cb07d7ccd7f29d1", + "transactionIndex": 46 + }, + { + "address": "0xb1ea67eb59ec5dca0eb61d34dda7c68c37a07ba9", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 27, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x0c2bb0b7059fd335f3dd4ecf037e04697217c481c14fb2155cb07d7ccd7f29d1", + "transactionIndex": 46 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 28, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x4732917176d804a16c8683426d9dedfaff711d5156766d3535e1921a3655619c", + "transactionIndex": 50 + }, + { + "address": "0x8eb78278bbb58d781c158ed6821391bea6b40914", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 29, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0x4732917176d804a16c8683426d9dedfaff711d5156766d3535e1921a3655619c", + "transactionIndex": 50 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 30, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xdbb3c2f63dd12fb0887ece311263807a7be7e001089ae3f992c0946c8e593c62", + "transactionIndex": 52 + }, + { + "address": "0xd49d5907876881676b4a02a6edebfb7614388b88", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 31, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xdbb3c2f63dd12fb0887ece311263807a7be7e001089ae3f992c0946c8e593c62", + "transactionIndex": 52 + }, + { + "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 32, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xcc0bc2b2135f6b405432af5223c797ddecc3e0e75d6e1716e2d6ac61ff8883e3", + "transactionIndex": 53 + }, + { + "address": "0x681306f0aaa44216d2c5a2b88b153a0f20b18669", + "blockHash": "0xf9f855a933a8e8ab26688b406d1a6308a6f06863895e1cf00fccfb4702fb968c", + "blockNumber": 4012000, + "data": "0x000000000000000000000000209c4784ab1e8183cf58ca33cb740efbf3fc18ef", + "date": "2017-07-12 12:14:49 UTC", + "logIndex": 33, + "timestamp": 1499861689, + "topics": [ + "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff" + ], + "transactionHash": "0xcc0bc2b2135f6b405432af5223c797ddecc3e0e75d6e1716e2d6ac61ff8883e3", + "transactionIndex": 53 + } + ] +} From 28793c1a35a4553989dce51494bb883da2653af7 Mon Sep 17 00:00:00 2001 From: tjayrush Date: Thu, 30 Nov 2023 21:41:41 -0500 Subject: [PATCH 04/25] Starting to move to new sliceOfMaps method --- src/apps/chifra/internal/blocks/handle_decache.go | 12 +++++++++++- src/apps/chifra/internal/blocks/validate.go | 3 +++ .../chifra/internal/export/iterate_transactions.go | 2 -- src/apps/chifra/internal/receipts/handle_show.go | 2 +- .../chifra/internal/transactions/handle_show.go | 14 ++++++++------ src/apps/chifra/pkg/rpc/get_transaction.go | 5 ++++- 6 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/apps/chifra/internal/blocks/handle_decache.go b/src/apps/chifra/internal/blocks/handle_decache.go index 75c36ebad4..a04716bfec 100644 --- a/src/apps/chifra/internal/blocks/handle_decache.go +++ b/src/apps/chifra/internal/blocks/handle_decache.go @@ -23,7 +23,7 @@ func (opts *BlocksOptions) HandleDecache() error { ctx := context.Background() fetchData := func(modelChan chan types.Modeler[types.RawModeler], errorChan chan error) { - if msg, err := decache.Decache(opts.Conn, itemsToRemove, silent, walk.Cache_Blocks); err != nil { + if msg, err := decache.Decache(opts.Conn, itemsToRemove, silent, opts.getCacheType()); err != nil { errorChan <- err } else { s := types.SimpleMessage{ @@ -36,3 +36,13 @@ func (opts *BlocksOptions) HandleDecache() error { opts.Globals.NoHeader = true return output.StreamMany(ctx, fetchData, opts.Globals.OutputOpts()) } + +func (opts *BlocksOptions) getCacheType() walk.CacheType { + cT := walk.Cache_Blocks + if opts.Logs { + cT = walk.Cache_Logs + } else if opts.Traces { + cT = walk.Cache_Traces + } + return cT +} diff --git a/src/apps/chifra/internal/blocks/validate.go b/src/apps/chifra/internal/blocks/validate.go index 92a1fe0627..8b6503494d 100644 --- a/src/apps/chifra/internal/blocks/validate.go +++ b/src/apps/chifra/internal/blocks/validate.go @@ -134,6 +134,9 @@ func (opts *BlocksOptions) validateBlocks() error { if opts.Globals.Cache && opts.Uncles { return validate.Usage("The {0} option is currently not available{1}.", "--cache", " with the --uncles option") } + if opts.Globals.Decache && opts.Uncles { + return validate.Usage("The {0} option is currently not available{1}.", "--decache", " with the --uncles option") + } } return opts.Globals.Validate() diff --git a/src/apps/chifra/internal/export/iterate_transactions.go b/src/apps/chifra/internal/export/iterate_transactions.go index 4e1a3c173f..f150f95776 100644 --- a/src/apps/chifra/internal/export/iterate_transactions.go +++ b/src/apps/chifra/internal/export/iterate_transactions.go @@ -37,8 +37,6 @@ func (opts *ExportOptions) readTransactions( go utils.IterateOverMap(iterCtx, errChan, theMap, iterFunc) if stepErr := <-errChan; stepErr != nil { return stepErr - } else if bar != nil { - bar.Finish(true) } return nil diff --git a/src/apps/chifra/internal/receipts/handle_show.go b/src/apps/chifra/internal/receipts/handle_show.go index a8ef8ad36a..fecf8986fd 100644 --- a/src/apps/chifra/internal/receipts/handle_show.go +++ b/src/apps/chifra/internal/receipts/handle_show.go @@ -37,7 +37,7 @@ func (opts *ReceiptsOptions) HandleShow() error { if tx, err := opts.Conn.GetTransactionByAppearance(&app, false /* needsTraces */); err != nil { return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) } else if tx == nil || tx.Receipt == nil { - return fmt.Errorf("transaction at %s has no logs", app.Orig()) + return fmt.Errorf("transaction at %s has no receipts", app.Orig()) } else { if opts.Articulate { if err = abiCache.ArticulateReceipt(tx.Receipt); err != nil { diff --git a/src/apps/chifra/internal/transactions/handle_show.go b/src/apps/chifra/internal/transactions/handle_show.go index aa010114fe..102bcee75a 100644 --- a/src/apps/chifra/internal/transactions/handle_show.go +++ b/src/apps/chifra/internal/transactions/handle_show.go @@ -21,19 +21,21 @@ func (opts *TransactionsOptions) HandleShow() (err error) { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawTransaction], errorChan chan error) { - var cnt int - var err error - var appMap []map[types.SimpleAppearance]*types.SimpleTransaction - if appMap, cnt, err = identifiers.SliceOfMaps_AsMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { errorChan <- err cancel() + + } else if cnt == 0 { + errorChan <- fmt.Errorf("transaction not found") + cancel() + } else { bar := logger.NewBar(logger.BarOptions{ - Enabled: !opts.Globals.TestMode, + Enabled: !testMode && !utils.IsTerminal(), Total: int64(cnt), }) - for _, thisMap := range appMap { + for _, thisMap := range sliceOfMaps { thisMap := thisMap for app := range thisMap { thisMap[app] = new(types.SimpleTransaction) diff --git a/src/apps/chifra/pkg/rpc/get_transaction.go b/src/apps/chifra/pkg/rpc/get_transaction.go index 46061c5d37..41c9ca5a69 100644 --- a/src/apps/chifra/pkg/rpc/get_transaction.go +++ b/src/apps/chifra/pkg/rpc/get_transaction.go @@ -50,10 +50,13 @@ func (conn *Connection) GetTransactionByNumberAndId(bn base.Blknum, txid uint64) func (conn *Connection) GetTransactionByAppearance(app *types.SimpleAppearance, fetchTraces bool) (tx *types.SimpleTransaction, err error) { raw := types.RawAppearance{ - Address: app.Address.Hex(), BlockNumber: app.BlockNumber, TransactionIndex: app.TransactionIndex, } + if !app.Address.IsZero() { + raw.Address = app.Address.Hex() + } + bn := uint64(raw.BlockNumber) txid := uint64(raw.TransactionIndex) From d6985ed2632810f26fa06f05b05f5e3673f3d399 Mon Sep 17 00:00:00 2001 From: tjayrush Date: Thu, 30 Nov 2023 21:57:01 -0500 Subject: [PATCH 05/25] sliceOfMaps method for export and chifra logs --- .../chifra/internal/export/handle_show.go | 27 +++-- src/apps/chifra/internal/logs/handle_show.go | 103 ++++++++++-------- .../acctExport_redir_output_append.txt | 1 + .../acctExport/acctExport_simple_data2.txt | 1 + .../acctExport/acctExport_simple_prefund2.txt | 1 + .../api_tests/acctExport_simple_prefund2.txt | 5 +- 6 files changed, 76 insertions(+), 62 deletions(-) diff --git a/src/apps/chifra/internal/export/handle_show.go b/src/apps/chifra/internal/export/handle_show.go index 1872e3bb1c..78b0675893 100644 --- a/src/apps/chifra/internal/export/handle_show.go +++ b/src/apps/chifra/internal/export/handle_show.go @@ -17,6 +17,7 @@ import ( "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/names" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/output" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" + "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/utils" ) func (opts *ExportOptions) HandleShow(monitorArray []monitor.Monitor) error { @@ -31,23 +32,25 @@ func (opts *ExportOptions) HandleShow(monitorArray []monitor.Monitor) error { base.RecordRange{First: opts.FirstRecord, Last: opts.GetMax()}, ) - ctx := context.Background() + ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawTransaction], errorChan chan error) { for _, mon := range monitorArray { - var cnt int - var err error - var appMap []map[types.SimpleAppearance]*types.SimpleTransaction - if appMap, cnt, err = monitor.SliceOfMaps_AsMaps[types.SimpleTransaction](&mon, filter); err != nil { + if sliceOfMaps, cnt, err := monitor.SliceOfMaps_AsMaps[types.SimpleTransaction](&mon, filter); err != nil { errorChan <- err - return - } else if !opts.NoZero || cnt > 0 { + cancel() + + } else if cnt == 0 { + errorChan <- fmt.Errorf("no appearances found for %s", mon.Address.Hex()) + continue + + } else { bar := logger.NewBar(logger.BarOptions{ Prefix: mon.Address.Hex(), - Enabled: !opts.Globals.TestMode, + Enabled: !testMode && !utils.IsTerminal(), Total: mon.Count(), }) - for _, thisMap := range appMap { + for _, thisMap := range sliceOfMaps { thisMap := thisMap for app := range thisMap { thisMap[app] = new(types.SimpleTransaction) @@ -55,7 +58,7 @@ func (opts *ExportOptions) HandleShow(monitorArray []monitor.Monitor) error { if err := opts.readTransactions(thisMap, filter, bar, false /* readTraces */); err != nil { errorChan <- err - return + cancel() } items := make([]*types.SimpleTransaction, 0, len(thisMap)) @@ -83,10 +86,6 @@ func (opts *ExportOptions) HandleShow(monitorArray []monitor.Monitor) error { } } } - - } else { - errorChan <- fmt.Errorf("no appearances found for %s", mon.Address.Hex()) - return } } diff --git a/src/apps/chifra/internal/logs/handle_show.go b/src/apps/chifra/internal/logs/handle_show.go index ffb3a35414..ca04fff846 100644 --- a/src/apps/chifra/internal/logs/handle_show.go +++ b/src/apps/chifra/internal/logs/handle_show.go @@ -21,71 +21,80 @@ func (opts *LogsOptions) HandleShow() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawLog], errorChan chan error) { - // var cnt int - var err error - var appMap map[types.SimpleAppearance]*types.SimpleTransaction - if appMap, _, err = identifiers.AsMap[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { errorChan <- err cancel() + + } else if cnt == 0 { + errorChan <- fmt.Errorf("transaction has no logs") + cancel() + } else { bar := logger.NewBar(logger.BarOptions{ - Enabled: !opts.Globals.TestMode, - Total: int64(len(appMap)), + Enabled: !testMode && !utils.IsTerminal(), + Total: int64(cnt), }) - iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { - if tx, err := opts.Conn.GetTransactionByAppearance(&app, false /* needsTraces */); err != nil { - return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) - } else if tx == nil || tx.Receipt == nil { - return fmt.Errorf("transaction at %s has no logs", app.Orig()) - } else { - for index := range tx.Receipt.Logs { - if opts.Articulate { - if err = abiCache.ArticulateLog(&tx.Receipt.Logs[index]); err != nil { - errorChan <- err // continue even with an error + for _, thisMap := range sliceOfMaps { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(types.SimpleTransaction) + } + + iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { + if tx, err := opts.Conn.GetTransactionByAppearance(&app, false /* needsTraces */); err != nil { + return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) + } else if tx == nil || tx.Receipt == nil || len(tx.Receipt.Logs) == 0 { + return fmt.Errorf("transaction at %s has no logs", app.Orig()) + } else { + for index := range tx.Receipt.Logs { + if opts.Articulate { + if err = abiCache.ArticulateLog(&tx.Receipt.Logs[index]); err != nil { + errorChan <- err // continue even with an error + } } } + *value = *tx + bar.Tick() + return nil } - *value = *tx - bar.Tick() - return nil } - } - iterErrorChan := make(chan error) - iterCtx, iterCancel := context.WithCancel(context.Background()) - defer iterCancel() - go utils.IterateOverMap(iterCtx, iterErrorChan, appMap, iterFunc) - for err := range iterErrorChan { - if !testMode || nErrors == 0 { - errorChan <- err - nErrors++ + iterErrorChan := make(chan error) + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + go utils.IterateOverMap(iterCtx, iterErrorChan, thisMap, iterFunc) + for err := range iterErrorChan { + if !testMode || nErrors == 0 { + errorChan <- err + nErrors++ + } } - } - bar.Finish(true) - items := make([]types.SimpleLog, 0, len(appMap)) - for _, tx := range appMap { - if tx.Receipt != nil { - items = append(items, tx.Receipt.Logs...) - } - } - sort.Slice(items, func(i, j int) bool { - if items[i].BlockNumber == items[j].BlockNumber { - if items[i].TransactionIndex == items[j].TransactionIndex { - return items[i].LogIndex < items[j].LogIndex + items := make([]types.SimpleLog, 0, len(thisMap)) + for _, tx := range thisMap { + if tx.Receipt != nil { + items = append(items, tx.Receipt.Logs...) } - return items[i].TransactionIndex < items[j].TransactionIndex } - return items[i].BlockNumber < items[j].BlockNumber - }) + sort.Slice(items, func(i, j int) bool { + if items[i].BlockNumber == items[j].BlockNumber { + if items[i].TransactionIndex == items[j].TransactionIndex { + return items[i].LogIndex < items[j].LogIndex + } + return items[i].TransactionIndex < items[j].TransactionIndex + } + return items[i].BlockNumber < items[j].BlockNumber + }) - for _, item := range items { - item := item - if item.BlockNumber != 0 { - modelChan <- &item + for _, item := range items { + item := item + if item.BlockNumber != 0 { + modelChan <- &item + } } } + bar.Finish(true) } } diff --git a/test/gold/apps/acctExport/acctExport_redir_output_append.txt b/test/gold/apps/acctExport/acctExport_redir_output_append.txt index 70066dfd0a..3b0d466d13 100644 --- a/test/gold/apps/acctExport/acctExport_redir_output_append.txt +++ b/test/gold/apps/acctExport/acctExport_redir_output_append.txt @@ -7,6 +7,7 @@ TEST[DATE|TIME] OutputFn: output_test_file TEST[DATE|TIME] Append: true TEST[DATE|TIME] Caps: cache,decache,ether TEST[DATE|TIME] Format: txt +EROR[DATE|TIME] no appearances found for 0xbb9bc244d798123fde783fcc1c72d3bb8c189413 ---- Results in ./output_test_file blockNumber transactionIndex timestamp date from to ether gasPrice gasUsed gasCost hash isError encoding compressedTx type diff --git a/test/gold/apps/acctExport/acctExport_simple_data2.txt b/test/gold/apps/acctExport/acctExport_simple_data2.txt index 19b0c8b7a7..34ed1a3ed9 100644 --- a/test/gold/apps/acctExport/acctExport_simple_data2.txt +++ b/test/gold/apps/acctExport/acctExport_simple_data2.txt @@ -26,3 +26,4 @@ TEST[DATE|TIME] Format: csv 3375495,28,1489858952,2017-03-18 17:42:32 UTC,0x0036abd542b84ef4a9b90365c576bfbe58b47662,0xef510209f6bc5176eaf82998f6ed6556edb51fa5,0,20000000000,36799,735980000000000,0x89cbcde5481e2aabee938ced13492d01ae8cd2df69290ac912292749f32a5c38,false,0xa9059cbb, 3375495,29,1489858952,2017-03-18 17:42:32 UTC,0x0036abd542b84ef4a9b90365c576bfbe58b47662,0xef510209f6bc5176eaf82998f6ed6556edb51fa5,0,20000000000,36735,734700000000000,0x27ff4ba1437b7d1141825047ae1618af6e2e0522ec0f3194e9751296ee805d63,false,0xa9059cbb, 3375495,30,1489858952,2017-03-18 17:42:32 UTC,0x0036abd542b84ef4a9b90365c576bfbe58b47662,0xef510209f6bc5176eaf82998f6ed6556edb51fa5,0,20000000000,36799,735980000000000,0x042007bef1c0962af43e9866ad88a6b54828b75c318298d2d19f338aa7a7f493,false,0xa9059cbb, +EROR[DATE|TIME] no appearances found for 0x001d14804b399c6ef80e64576f657660804fec0b diff --git a/test/gold/apps/acctExport/acctExport_simple_prefund2.txt b/test/gold/apps/acctExport/acctExport_simple_prefund2.txt index 8bd2b53669..ee5f8ecd8c 100644 --- a/test/gold/apps/acctExport/acctExport_simple_prefund2.txt +++ b/test/gold/apps/acctExport/acctExport_simple_prefund2.txt @@ -4,3 +4,4 @@ TEST[DATE|TIME] FirstBlock: 2 TEST[DATE|TIME] LastBlock: 3 TEST[DATE|TIME] Caps: cache,decache,ether TEST[DATE|TIME] Format: txt +EROR[DATE|TIME] no appearances found for 0x05a56e2d52c817161883f50c441c3228cfe54d9f diff --git a/test/gold/apps/acctExport/api_tests/acctExport_simple_prefund2.txt b/test/gold/apps/acctExport/api_tests/acctExport_simple_prefund2.txt index d9ea42de77..c311cd6059 100644 --- a/test/gold/apps/acctExport/api_tests/acctExport_simple_prefund2.txt +++ b/test/gold/apps/acctExport/api_tests/acctExport_simple_prefund2.txt @@ -10,5 +10,8 @@ export?addrs=0x05a56e2d52c817161883f50c441c3228cfe54d9f&firstBlock=2&lastBlock=3 "chainId": 1, "networkId": 1, "chain": "mainnet" - } + }, + "errors": [ + "no appearances found for 0x05a56e2d52c817161883f50c441c3228cfe54d9f" + ] } From a927a336ac7d9daaadeacb420d4ec6c7c8042e28 Mon Sep 17 00:00:00 2001 From: tjayrush Date: Thu, 30 Nov 2023 22:20:18 -0500 Subject: [PATCH 06/25] sliceOfMaps method for chifra blocks --- .../chifra/internal/blocks/handle_hashes.go | 105 +++++++------ .../chifra/internal/blocks/handle_logs.go | 141 ++++++++++-------- .../chifra/internal/blocks/handle_show.go | 103 +++++++------ .../chifra/internal/blocks/handle_uncles.go | 106 +++++++------ .../chifra/internal/blocks/handle_uniq.go | 116 +++++++------- .../internal/blocks/handle_withdrawals.go | 110 +++++++------- 6 files changed, 369 insertions(+), 312 deletions(-) diff --git a/src/apps/chifra/internal/blocks/handle_hashes.go b/src/apps/chifra/internal/blocks/handle_hashes.go index 47b9e5fa33..c19ce81ebf 100644 --- a/src/apps/chifra/internal/blocks/handle_hashes.go +++ b/src/apps/chifra/internal/blocks/handle_hashes.go @@ -7,6 +7,7 @@ package blocksPkg import ( "context" "errors" + "fmt" "sort" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/identifiers" @@ -24,62 +25,70 @@ func (opts *BlocksOptions) HandleHashes() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawBlock], errorChan chan error) { - // var cnt int - var err error - var appMap map[types.SimpleAppearance]*types.SimpleBlock[string] - if appMap, _, err = identifiers.AsMap[types.SimpleBlock[string]](chain, opts.BlockIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleBlock[string]](chain, opts.BlockIds); err != nil { errorChan <- err cancel() - } - bar := logger.NewBar(logger.BarOptions{ - Type: logger.Expanding, - Enabled: !opts.Globals.TestMode, - Total: int64(len(appMap)), - }) + } else if cnt == 0 { + errorChan <- fmt.Errorf("no blocks found for the query") + cancel() + + } else { + bar := logger.NewBar(logger.BarOptions{ + Enabled: !testMode && !utils.IsTerminal(), + Total: int64(cnt), + }) - iterFunc := func(app types.SimpleAppearance, value *types.SimpleBlock[string]) error { - bn := uint64(app.BlockNumber) - if block, err := opts.Conn.GetBlockHeaderByNumber(bn); err != nil { - errorChan <- err - if errors.Is(err, ethereum.NotFound) { - errorChan <- errors.New("uncles not found") + for _, thisMap := range sliceOfMaps { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(types.SimpleBlock[string]) } - cancel() - return nil - } else { - bar.Tick() - *value = block - } - return nil - } - iterErrorChan := make(chan error) - iterCtx, iterCancel := context.WithCancel(context.Background()) - defer iterCancel() - go utils.IterateOverMap(iterCtx, iterErrorChan, appMap, iterFunc) - for err := range iterErrorChan { - if !testMode || nErrors == 0 { - errorChan <- err - nErrors++ - } - } - bar.Finish(true) + iterFunc := func(app types.SimpleAppearance, value *types.SimpleBlock[string]) error { + bn := uint64(app.BlockNumber) + if block, err := opts.Conn.GetBlockHeaderByNumber(bn); err != nil { + errorChan <- err + if errors.Is(err, ethereum.NotFound) { + errorChan <- errors.New("uncles not found") + } + cancel() + return nil + } else { + bar.Tick() + *value = block + } + return nil + } - items := make([]*types.SimpleBlock[string], 0, len(appMap)) - for _, item := range appMap { - items = append(items, item) - } - sort.Slice(items, func(i, j int) bool { - if items[i].BlockNumber == items[j].BlockNumber { - return items[i].Hash.Hex() < items[j].Hash.Hex() - } - return items[i].BlockNumber < items[j].BlockNumber - }) + iterErrorChan := make(chan error) + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + go utils.IterateOverMap(iterCtx, iterErrorChan, thisMap, iterFunc) + for err := range iterErrorChan { + if !testMode || nErrors == 0 { + errorChan <- err + nErrors++ + } + } - for _, item := range items { - item := item - modelChan <- item + items := make([]*types.SimpleBlock[string], 0, len(thisMap)) + for _, item := range thisMap { + items = append(items, item) + } + sort.Slice(items, func(i, j int) bool { + if items[i].BlockNumber == items[j].BlockNumber { + return items[i].Hash.Hex() < items[j].Hash.Hex() + } + return items[i].BlockNumber < items[j].BlockNumber + }) + + for _, item := range items { + item := item + modelChan <- item + } + } + bar.Finish(true) } } diff --git a/src/apps/chifra/internal/blocks/handle_logs.go b/src/apps/chifra/internal/blocks/handle_logs.go index 3259d28004..45cd646188 100644 --- a/src/apps/chifra/internal/blocks/handle_logs.go +++ b/src/apps/chifra/internal/blocks/handle_logs.go @@ -39,85 +39,94 @@ func (opts *BlocksOptions) HandleLogs() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawLog], errorChan chan error) { - // var cnt int - var err error - var appMap map[types.SimpleAppearance]*types.SimpleTransaction - if appMap, _, err = identifiers.AsMap[types.SimpleTransaction](chain, opts.BlockIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleTransaction](chain, opts.BlockIds); err != nil { errorChan <- err cancel() - } - bar := logger.NewBar(logger.BarOptions{ - Enabled: !opts.Globals.TestMode, - Total: int64(len(appMap)), - }) + } else if cnt == 0 { + errorChan <- fmt.Errorf("no blocks found for the query") + cancel() - iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { - if value.Receipt == nil { - value.Receipt = &types.SimpleReceipt{} - } + } else { + bar := logger.NewBar(logger.BarOptions{ + Enabled: !testMode && !utils.IsTerminal(), + Total: int64(cnt), + }) + + for _, thisMap := range sliceOfMaps { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(types.SimpleTransaction) + } - bn := uint64(app.BlockNumber) - ts := opts.Conn.GetBlockTimestamp(bn) - if logs, err := opts.Conn.GetLogsByNumber(bn, ts); err != nil { - errorChan <- fmt.Errorf("block at %d returned an error: %w", bn, err) - return nil - - } else if len(logs) == 0 { - errorChan <- fmt.Errorf("block at %d has no logs", bn) - return nil - - } else { - l := make([]types.SimpleLog, 0, len(logs)) - for index := range logs { - if opts.Articulate { - if err = abiCache.ArticulateLog(&logs[index]); err != nil { - errorChan <- err // continue even with an error + iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { + if value.Receipt == nil { + value.Receipt = &types.SimpleReceipt{} + } + + bn := uint64(app.BlockNumber) + ts := opts.Conn.GetBlockTimestamp(bn) + if logs, err := opts.Conn.GetLogsByNumber(bn, ts); err != nil { + errorChan <- fmt.Errorf("block at %d returned an error: %w", bn, err) + return nil + + } else if len(logs) == 0 { + errorChan <- fmt.Errorf("block at %d has no logs", bn) + return nil + + } else { + l := make([]types.SimpleLog, 0, len(logs)) + for index := range logs { + if opts.Articulate { + if err = abiCache.ArticulateLog(&logs[index]); err != nil { + errorChan <- err // continue even with an error + } + } + l = append(l, logs[index]) } + bar.Tick() + value.Receipt.Logs = append(value.Receipt.Logs, l...) } - l = append(l, logs[index]) + return nil } - bar.Tick() - value.Receipt.Logs = append(value.Receipt.Logs, l...) - } - return nil - } - iterErrorChan := make(chan error) - iterCtx, iterCancel := context.WithCancel(context.Background()) - defer iterCancel() - go utils.IterateOverMap(iterCtx, iterErrorChan, appMap, iterFunc) - for err := range iterErrorChan { - if !testMode || nErrors == 0 { - errorChan <- err - // Reporting more than one error causes tests to fail because they - // appear concurrently so sort differently - nErrors++ - } - } - bar.Finish(true) + iterErrorChan := make(chan error) + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + go utils.IterateOverMap(iterCtx, iterErrorChan, thisMap, iterFunc) + for err := range iterErrorChan { + if !testMode || nErrors == 0 { + errorChan <- err + // Reporting more than one error causes tests to fail because they + // appear concurrently so sort differently + nErrors++ + } + } - items := make([]types.SimpleLog, 0, len(appMap)) - for _, tx := range appMap { - tx := tx - items = append(items, tx.Receipt.Logs...) - } - sort.Slice(items, func(i, j int) bool { - if items[i].BlockNumber == items[j].BlockNumber { - if items[i].TransactionIndex == items[j].TransactionIndex { - return items[i].LogIndex < items[j].LogIndex + items := make([]types.SimpleLog, 0, len(thisMap)) + for _, tx := range thisMap { + tx := tx + items = append(items, tx.Receipt.Logs...) } - return items[i].TransactionIndex < items[j].TransactionIndex - } - return items[i].BlockNumber < items[j].BlockNumber - }) + sort.Slice(items, func(i, j int) bool { + if items[i].BlockNumber == items[j].BlockNumber { + if items[i].TransactionIndex == items[j].TransactionIndex { + return items[i].LogIndex < items[j].LogIndex + } + return items[i].TransactionIndex < items[j].TransactionIndex + } + return items[i].BlockNumber < items[j].BlockNumber + }) - for _, item := range items { - item := item - if !logFilter.PassesFilter(&item) { - continue + for _, item := range items { + item := item + if !logFilter.PassesFilter(&item) { + continue + } + modelChan <- &item + } } - modelChan <- &item + bar.Finish(true) } } diff --git a/src/apps/chifra/internal/blocks/handle_show.go b/src/apps/chifra/internal/blocks/handle_show.go index 2672d5b5df..d922bada0a 100644 --- a/src/apps/chifra/internal/blocks/handle_show.go +++ b/src/apps/chifra/internal/blocks/handle_show.go @@ -24,61 +24,70 @@ func (opts *BlocksOptions) HandleShow() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawBlock], errorChan chan error) { - // var cnt int - var err error - var appMap map[types.SimpleAppearance]*types.SimpleBlock[types.SimpleTransaction] - if appMap, _, err = identifiers.AsMap[types.SimpleBlock[types.SimpleTransaction]](chain, opts.BlockIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleBlock[types.SimpleTransaction]](chain, opts.BlockIds); err != nil { errorChan <- err cancel() - } - bar := logger.NewBar(logger.BarOptions{ - Type: logger.Expanding, - Enabled: !opts.Globals.TestMode, - Total: int64(len(appMap)), - }) + } else if cnt == 0 { + errorChan <- errors.New("no blocks found") + cancel() + + } else { + bar := logger.NewBar(logger.BarOptions{ + Type: logger.Expanding, + Enabled: !opts.Globals.TestMode, + Total: int64(cnt), + }) - iterFunc := func(app types.SimpleAppearance, value *types.SimpleBlock[types.SimpleTransaction]) error { - if block, err := opts.Conn.GetBlockBodyByNumber(uint64(app.BlockNumber)); err != nil { - errorChan <- err - if errors.Is(err, ethereum.NotFound) { - errorChan <- errors.New("uncles not found") + for _, thisMap := range sliceOfMaps { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(types.SimpleBlock[types.SimpleTransaction]) } - cancel() - return nil - } else { - bar.Tick() - *value = block - } - return nil - } - iterErrorChan := make(chan error) - iterCtx, iterCancel := context.WithCancel(context.Background()) - defer iterCancel() - go utils.IterateOverMap(iterCtx, iterErrorChan, appMap, iterFunc) - for err := range iterErrorChan { - if !testMode || nErrors == 0 { - errorChan <- err - nErrors++ - } - } - bar.Finish(true) + iterFunc := func(app types.SimpleAppearance, value *types.SimpleBlock[types.SimpleTransaction]) error { + if block, err := opts.Conn.GetBlockBodyByNumber(uint64(app.BlockNumber)); err != nil { + errorChan <- err + if errors.Is(err, ethereum.NotFound) { + errorChan <- errors.New("uncles not found") + } + cancel() + return nil + } else { + bar.Tick() + *value = block + } + return nil + } - items := make([]*types.SimpleBlock[types.SimpleTransaction], 0, len(appMap)) - for _, item := range appMap { - items = append(items, item) - } - sort.Slice(items, func(i, j int) bool { - if items[i].BlockNumber == items[j].BlockNumber { - return items[i].Hash.Hex() < items[j].Hash.Hex() - } - return items[i].BlockNumber < items[j].BlockNumber - }) + iterErrorChan := make(chan error) + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + go utils.IterateOverMap(iterCtx, iterErrorChan, thisMap, iterFunc) + for err := range iterErrorChan { + if !testMode || nErrors == 0 { + errorChan <- err + nErrors++ + } + } - for _, item := range items { - item := item - modelChan <- item + items := make([]*types.SimpleBlock[types.SimpleTransaction], 0, len(thisMap)) + for _, item := range thisMap { + items = append(items, item) + } + sort.Slice(items, func(i, j int) bool { + if items[i].BlockNumber == items[j].BlockNumber { + return items[i].Hash.Hex() < items[j].Hash.Hex() + } + return items[i].BlockNumber < items[j].BlockNumber + }) + + for _, item := range items { + item := item + modelChan <- item + } + } + bar.Finish(true) } } diff --git a/src/apps/chifra/internal/blocks/handle_uncles.go b/src/apps/chifra/internal/blocks/handle_uncles.go index a8784d6794..2daea9ca1a 100644 --- a/src/apps/chifra/internal/blocks/handle_uncles.go +++ b/src/apps/chifra/internal/blocks/handle_uncles.go @@ -7,6 +7,7 @@ package blocksPkg import ( "context" "errors" + "fmt" "sort" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/identifiers" @@ -24,64 +25,73 @@ func (opts *BlocksOptions) HandleUncles() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawBlock], errorChan chan error) { - // var cnt int - var err error - var appMap map[types.SimpleAppearance]*types.SimpleBlock[types.SimpleTransaction] - if appMap, _, err = identifiers.AsMap[types.SimpleBlock[types.SimpleTransaction]](chain, opts.BlockIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleBlock[string]](chain, opts.BlockIds); err != nil { errorChan <- err cancel() - } - bar := logger.NewBar(logger.BarOptions{ - Type: logger.Expanding, - Enabled: !opts.Globals.TestMode, - Total: int64(len(appMap)), - }) + } else if cnt == 0 { + errorChan <- fmt.Errorf("no blocks found for the query") + cancel() + + } else { + + bar := logger.NewBar(logger.BarOptions{ + Enabled: !testMode && !utils.IsTerminal(), + Total: int64(cnt), + }) - uncles := make([]types.SimpleBlock[types.SimpleTransaction], 0, len(appMap)) - iterFunc := func(app types.SimpleAppearance, value *types.SimpleBlock[types.SimpleTransaction]) error { - bn := uint64(app.BlockNumber) - if uncs, err := opts.Conn.GetUncleBodiesByNumber(bn); err != nil { - errorChan <- err - if errors.Is(err, ethereum.NotFound) { - errorChan <- errors.New("uncles not found") + for _, thisMap := range sliceOfMaps { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(types.SimpleBlock[string]) } - cancel() - return nil - } else { - for _, uncle := range uncs { - uncle := uncle - bar.Tick() - if uncle.BlockNumber > 0 { - uncles = append(uncles, uncle) + + uncles := make([]types.SimpleBlock[types.SimpleTransaction], 0, len(thisMap)) + iterFunc := func(app types.SimpleAppearance, value *types.SimpleBlock[string]) error { + bn := uint64(app.BlockNumber) + if uncs, err := opts.Conn.GetUncleBodiesByNumber(bn); err != nil { + errorChan <- err + if errors.Is(err, ethereum.NotFound) { + errorChan <- errors.New("uncles not found") + } + cancel() + return nil + } else { + for _, uncle := range uncs { + uncle := uncle + bar.Tick() + if uncle.BlockNumber > 0 { + uncles = append(uncles, uncle) + } + } } + return nil } - } - return nil - } - iterErrorChan := make(chan error) - iterCtx, iterCancel := context.WithCancel(context.Background()) - defer iterCancel() - go utils.IterateOverMap(iterCtx, iterErrorChan, appMap, iterFunc) - for err := range iterErrorChan { - if !testMode || nErrors == 0 { - errorChan <- err - nErrors++ - } - } - bar.Finish(true) + iterErrorChan := make(chan error) + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + go utils.IterateOverMap(iterCtx, iterErrorChan, thisMap, iterFunc) + for err := range iterErrorChan { + if !testMode || nErrors == 0 { + errorChan <- err + nErrors++ + } + } - sort.Slice(uncles, func(i, j int) bool { - if uncles[i].BlockNumber == uncles[j].BlockNumber { - return uncles[i].Hash.Hex() < uncles[j].Hash.Hex() - } - return uncles[i].BlockNumber < uncles[j].BlockNumber - }) + sort.Slice(uncles, func(i, j int) bool { + if uncles[i].BlockNumber == uncles[j].BlockNumber { + return uncles[i].Hash.Hex() < uncles[j].Hash.Hex() + } + return uncles[i].BlockNumber < uncles[j].BlockNumber + }) - for _, item := range uncles { - item := item - modelChan <- &item + for _, item := range uncles { + item := item + modelChan <- &item + } + } + bar.Finish(true) } } diff --git a/src/apps/chifra/internal/blocks/handle_uniq.go b/src/apps/chifra/internal/blocks/handle_uniq.go index 99a5bbc9c8..7eb204ae5e 100644 --- a/src/apps/chifra/internal/blocks/handle_uniq.go +++ b/src/apps/chifra/internal/blocks/handle_uniq.go @@ -7,6 +7,7 @@ package blocksPkg import ( "context" "errors" + "fmt" "sort" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/identifiers" @@ -25,69 +26,78 @@ func (opts *BlocksOptions) HandleUniq() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawAppearance], errorChan chan error) { - // var cnt int - var err error - var appMap map[types.SimpleAppearance]*types.SimpleAppearance - if appMap, _, err = identifiers.AsMap[types.SimpleAppearance](chain, opts.BlockIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleAppearance](chain, opts.BlockIds); err != nil { errorChan <- err cancel() - } - bar := logger.NewBar(logger.BarOptions{ - Type: logger.Expanding, - Enabled: !opts.Globals.TestMode, - Total: int64(len(appMap)), - }) - - apps := make([]types.SimpleAppearance, 0, len(appMap)) - iterFunc := func(app types.SimpleAppearance, value *types.SimpleAppearance) error { - bn := uint64(app.BlockNumber) - procFunc := func(s *types.SimpleAppearance) error { - bar.Tick() - apps = append(apps, *s) - return nil - } + } else if cnt == 0 { + errorChan <- fmt.Errorf("no blocks found for the query") + cancel() - if err := uniq.GetUniqAddressesInBlock(chain, opts.Flow, opts.Conn, procFunc, bn); err != nil { - errorChan <- err - if errors.Is(err, ethereum.NotFound) { + } else { + bar := logger.NewBar(logger.BarOptions{ + Enabled: !testMode && !utils.IsTerminal(), + Total: int64(cnt), + }) + + for _, thisMap := range sliceOfMaps { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(types.SimpleAppearance) + } + + apps := make([]types.SimpleAppearance, 0, len(thisMap)) + iterFunc := func(app types.SimpleAppearance, value *types.SimpleAppearance) error { + bn := uint64(app.BlockNumber) + bar.Tick() + procFunc := func(s *types.SimpleAppearance) error { + apps = append(apps, *s) + return nil + } + + if err := uniq.GetUniqAddressesInBlock(chain, opts.Flow, opts.Conn, procFunc, bn); err != nil { + errorChan <- err + if errors.Is(err, ethereum.NotFound) { + return nil + } + cancel() + } return nil } - cancel() - } - return nil - } - iterErrorChan := make(chan error) - iterCtx, iterCancel := context.WithCancel(context.Background()) - defer iterCancel() - go utils.IterateOverMap(iterCtx, iterErrorChan, appMap, iterFunc) - for err := range iterErrorChan { - if !testMode || nErrors == 0 { - errorChan <- err - nErrors++ - } - } - bar.Finish(true /* newLine */) + iterErrorChan := make(chan error) + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + go utils.IterateOverMap(iterCtx, iterErrorChan, thisMap, iterFunc) + for err := range iterErrorChan { + if !testMode || nErrors == 0 { + errorChan <- err + nErrors++ + } + } - items := make([]types.SimpleAppearance, 0, len(appMap)) - for _, app := range apps { - app := app - items = append(items, app) - } - sort.Slice(items, func(i, j int) bool { - if items[i].BlockNumber == items[j].BlockNumber { - if items[i].TransactionIndex == items[j].TransactionIndex { - return items[i].Reason < items[j].Reason + items := make([]types.SimpleAppearance, 0, len(thisMap)) + for _, app := range apps { + app := app + items = append(items, app) } - return items[i].TransactionIndex < items[j].TransactionIndex - } - return items[i].BlockNumber < items[j].BlockNumber - }) - for _, s := range items { - s := s - modelChan <- &s + sort.Slice(items, func(i, j int) bool { + if items[i].BlockNumber == items[j].BlockNumber { + if items[i].TransactionIndex == items[j].TransactionIndex { + return items[i].Reason < items[j].Reason + } + return items[i].TransactionIndex < items[j].TransactionIndex + } + return items[i].BlockNumber < items[j].BlockNumber + }) + + for _, s := range items { + s := s + modelChan <- &s + } + } + bar.Finish(true /* newLine */) } } diff --git a/src/apps/chifra/internal/blocks/handle_withdrawals.go b/src/apps/chifra/internal/blocks/handle_withdrawals.go index 0000d6f2ff..e1d0e5797a 100644 --- a/src/apps/chifra/internal/blocks/handle_withdrawals.go +++ b/src/apps/chifra/internal/blocks/handle_withdrawals.go @@ -6,6 +6,7 @@ package blocksPkg import ( "context" + "fmt" "sort" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/identifiers" @@ -22,63 +23,72 @@ func (opts *BlocksOptions) HandleWithdrawals() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawWithdrawal], errorChan chan error) { - // var cnt int - var err error - var appMap map[types.SimpleAppearance]*types.SimpleBlock[string] - if appMap, _, err = identifiers.AsMap[types.SimpleBlock[string]](chain, opts.BlockIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleBlock[string]](chain, opts.BlockIds); err != nil { errorChan <- err cancel() - } - bar := logger.NewBar(logger.BarOptions{ - Type: logger.Expanding, - Enabled: !opts.Globals.TestMode, - Total: int64(len(appMap)), - }) + } else if cnt == 0 { + errorChan <- fmt.Errorf("no blocks found for the query") + cancel() - iterFunc := func(app types.SimpleAppearance, value *types.SimpleBlock[string]) error { - bn := uint64(app.BlockNumber) - if block, err := opts.Conn.GetBlockHeaderByNumber(bn); err != nil { - errorChan <- err - cancel() - return nil - } else { - bar.Tick() - *value = block - } - return nil - } + } else { + bar := logger.NewBar(logger.BarOptions{ + Enabled: !testMode && !utils.IsTerminal(), + Total: int64(cnt), + }) - iterErrorChan := make(chan error) - iterCtx, iterCancel := context.WithCancel(context.Background()) - defer iterCancel() - go utils.IterateOverMap(iterCtx, iterErrorChan, appMap, iterFunc) - for err := range iterErrorChan { - if !testMode || nErrors == 0 { - errorChan <- err - nErrors++ - } - } - bar.Finish(true) + for _, thisMap := range sliceOfMaps { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(types.SimpleBlock[string]) + } - items := make([]*types.SimpleWithdrawal, 0, len(appMap)) - for _, item := range appMap { - for _, w := range item.Withdrawals { - w := w - w.BlockNumber = item.BlockNumber - items = append(items, &w) - } - } - sort.Slice(items, func(i, j int) bool { - if items[i].BlockNumber == items[j].BlockNumber { - return items[i].Index < items[j].Index - } - return items[i].BlockNumber < items[j].BlockNumber - }) + iterFunc := func(app types.SimpleAppearance, value *types.SimpleBlock[string]) error { + bn := uint64(app.BlockNumber) + if block, err := opts.Conn.GetBlockHeaderByNumber(bn); err != nil { + errorChan <- err + cancel() + return nil + } else { + bar.Tick() + *value = block + } + return nil + } + + iterErrorChan := make(chan error) + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + go utils.IterateOverMap(iterCtx, iterErrorChan, thisMap, iterFunc) + for err := range iterErrorChan { + if !testMode || nErrors == 0 { + errorChan <- err + nErrors++ + } + } - for _, item := range items { - item := item - modelChan <- item + items := make([]*types.SimpleWithdrawal, 0, len(thisMap)) + for _, item := range thisMap { + for _, w := range item.Withdrawals { + w := w + w.BlockNumber = item.BlockNumber + items = append(items, &w) + } + } + + sort.Slice(items, func(i, j int) bool { + if items[i].BlockNumber == items[j].BlockNumber { + return items[i].Index < items[j].Index + } + return items[i].BlockNumber < items[j].BlockNumber + }) + + for _, item := range items { + item := item + modelChan <- item + } + } + bar.Finish(true) } } From 5fe7527b59b87d9a7b1e2f52b865afdd2c630e66 Mon Sep 17 00:00:00 2001 From: tjayrush Date: Thu, 30 Nov 2023 22:26:17 -0500 Subject: [PATCH 07/25] Fixes tests --- test/gold/tools/getLogs/api_tests/getLogs_cache_one.txt | 5 ++++- test/gold/tools/getLogs/api_tests/getLogs_fmt_default.txt | 5 ++++- test/gold/tools/getLogs/api_tests/getLogs_fmt_json.txt | 5 ++++- test/gold/tools/getLogs/api_tests/getLogs_star.txt | 5 ++++- test/gold/tools/getLogs/getLogs_bad_hash_msg.txt | 2 +- test/gold/tools/getLogs/getLogs_bad_hash_msg_raw.txt | 2 +- test/gold/tools/getLogs/getLogs_cache_one.txt | 1 + test/gold/tools/getLogs/getLogs_fmt_csv.txt | 1 + test/gold/tools/getLogs/getLogs_fmt_default.txt | 1 + test/gold/tools/getLogs/getLogs_fmt_json.txt | 3 +++ test/gold/tools/getLogs/getLogs_fmt_txt.txt | 1 + test/gold/tools/getLogs/getLogs_redir_output_append.txt | 1 + test/gold/tools/getLogs/getLogs_star.txt | 3 +++ 13 files changed, 29 insertions(+), 6 deletions(-) diff --git a/test/gold/tools/getLogs/api_tests/getLogs_cache_one.txt b/test/gold/tools/getLogs/api_tests/getLogs_cache_one.txt index 0ef53e81dd..94f9164a0f 100644 --- a/test/gold/tools/getLogs/api_tests/getLogs_cache_one.txt +++ b/test/gold/tools/getLogs/api_tests/getLogs_cache_one.txt @@ -10,5 +10,8 @@ logs?transactions=46147.0&cache "chainId": 1, "networkId": 1, "chain": "mainnet" - } + }, + "errors": [ + "transaction at 46147.0 has no logs" + ] } diff --git a/test/gold/tools/getLogs/api_tests/getLogs_fmt_default.txt b/test/gold/tools/getLogs/api_tests/getLogs_fmt_default.txt index e02dfcdec1..0a4453b124 100644 --- a/test/gold/tools/getLogs/api_tests/getLogs_fmt_default.txt +++ b/test/gold/tools/getLogs/api_tests/getLogs_fmt_default.txt @@ -27,5 +27,8 @@ logs?transactions=2222222.0%202332332.0 "chainId": 1, "networkId": 1, "chain": "mainnet" - } + }, + "errors": [ + "transaction at 2222222.0 has no logs" + ] } \ No newline at end of file diff --git a/test/gold/tools/getLogs/api_tests/getLogs_fmt_json.txt b/test/gold/tools/getLogs/api_tests/getLogs_fmt_json.txt index 3b3f33f8df..42cdc12511 100644 --- a/test/gold/tools/getLogs/api_tests/getLogs_fmt_json.txt +++ b/test/gold/tools/getLogs/api_tests/getLogs_fmt_json.txt @@ -27,5 +27,8 @@ logs?transactions=2222222.0%202332332.0&fmt=json "chainId": 1, "networkId": 1, "chain": "mainnet" - } + }, + "errors": [ + "transaction at 2222222.0 has no logs" + ] } diff --git a/test/gold/tools/getLogs/api_tests/getLogs_star.txt b/test/gold/tools/getLogs/api_tests/getLogs_star.txt index aa5fd79cc3..49a4e28277 100644 --- a/test/gold/tools/getLogs/api_tests/getLogs_star.txt +++ b/test/gold/tools/getLogs/api_tests/getLogs_star.txt @@ -41,5 +41,8 @@ logs?transactions=1428993.*&fmt=json "chainId": 1, "networkId": 1, "chain": "mainnet" - } + }, + "errors": [ + "transaction at 1428993.0:all has no logs" + ] } diff --git a/test/gold/tools/getLogs/getLogs_bad_hash_msg.txt b/test/gold/tools/getLogs/getLogs_bad_hash_msg.txt index fde61488e7..c2c6e6db54 100644 --- a/test/gold/tools/getLogs/getLogs_bad_hash_msg.txt +++ b/test/gold/tools/getLogs/getLogs_bad_hash_msg.txt @@ -2,4 +2,4 @@ chifra logs 0x060e4cf9fa8d34a8b423b5b3691b2541255ff7974ff16699e104edcfb63bd521 TEST[DATE|TIME] Transactions: [0x060e4cf9fa8d34a8b423b5b3691b2541255ff7974ff16699e104edcfb63bd521 0x0766ec95bf12f9600afc6c33c287f9d2356d85f15f0d7eeeb6647f5d4ddfbc11] TEST[DATE|TIME] Caps: cache,decache,raw TEST[DATE|TIME] Format: txt -EROR[DATE|TIME] transaction at 0x0766ec95bf12f9600afc6c33c287f9d2356d85f15f0d7eeeb6647f5d4ddfbc11 returned an error: not found +EROR[DATE|TIME] transaction at 0x060e4cf9fa8d34a8b423b5b3691b2541255ff7974ff16699e104edcfb63bd521 has no logs diff --git a/test/gold/tools/getLogs/getLogs_bad_hash_msg_raw.txt b/test/gold/tools/getLogs/getLogs_bad_hash_msg_raw.txt index 9393f45711..96a9ae898e 100644 --- a/test/gold/tools/getLogs/getLogs_bad_hash_msg_raw.txt +++ b/test/gold/tools/getLogs/getLogs_bad_hash_msg_raw.txt @@ -6,6 +6,6 @@ TEST[DATE|TIME] Format: txt { "data": [], "errors": [ - "transaction at 0x0766ec95bf12f9600afc6c33c287f9d2356d85f15f0d7eeeb6647f5d4ddfbc11 returned an error: not found" + "transaction at 0x060e4cf9fa8d34a8b423b5b3691b2541255ff7974ff16699e104edcfb63bd521 has no logs" ] } \ No newline at end of file diff --git a/test/gold/tools/getLogs/getLogs_cache_one.txt b/test/gold/tools/getLogs/getLogs_cache_one.txt index a04a00d431..b879c5ad2c 100644 --- a/test/gold/tools/getLogs/getLogs_cache_one.txt +++ b/test/gold/tools/getLogs/getLogs_cache_one.txt @@ -4,3 +4,4 @@ TEST[DATE|TIME] Enabled: transactions TEST[DATE|TIME] Cache: true TEST[DATE|TIME] Caps: cache,decache,raw TEST[DATE|TIME] Format: txt +EROR[DATE|TIME] transaction at 46147.0 has no logs diff --git a/test/gold/tools/getLogs/getLogs_fmt_csv.txt b/test/gold/tools/getLogs/getLogs_fmt_csv.txt index 3ee9badbaf..07ebac6a9b 100644 --- a/test/gold/tools/getLogs/getLogs_fmt_csv.txt +++ b/test/gold/tools/getLogs/getLogs_fmt_csv.txt @@ -4,3 +4,4 @@ TEST[DATE|TIME] Caps: cache,decache,raw TEST[DATE|TIME] Format: csv blockNumber,transactionIndex,logIndex,blockHash,transactionHash,timestamp,date,address,topic0,topic1,topic2,topic3,data 2332332,0,0,0x6881c5043f6f6beed5ca31023e3a3518bede50a13be5c521fa6e21577314fa04,0xa023f79cc26b321111cf051cab92b3a325e00ecfa9d377845a41654f6b2f0ebe,1474924022,2016-09-26 21:07:02 UTC,0x37a9679c41e99db270bda88de8ff50c0cd23f326,0x8b0c34a52f9e28d78caaa7066cd047b398dae74941a208b77777420f492bd7e1,0x000000000000000000000000db89587bb407b576134ff297d1848ea6d9066812,0x0000000000000000000000007d19317cc81c3ef06039ae5514679f8b12fd28e2,,0x000000000000000000000000000000000000000000000000031d958f80134000 +EROR[DATE|TIME] transaction at 2222222.0 has no logs diff --git a/test/gold/tools/getLogs/getLogs_fmt_default.txt b/test/gold/tools/getLogs/getLogs_fmt_default.txt index 1f8e4de2d4..3ea5784b8f 100644 --- a/test/gold/tools/getLogs/getLogs_fmt_default.txt +++ b/test/gold/tools/getLogs/getLogs_fmt_default.txt @@ -4,3 +4,4 @@ TEST[DATE|TIME] Caps: cache,decache,raw TEST[DATE|TIME] Format: txt blockNumber transactionIndex logIndex blockHash transactionHash timestamp date address topic0 topic1 topic2 topic3 data 2332332 0 0 0x6881c5043f6f6beed5ca31023e3a3518bede50a13be5c521fa6e21577314fa04 0xa023f79cc26b321111cf051cab92b3a325e00ecfa9d377845a41654f6b2f0ebe 1474924022 2016-09-26 21:07:02 UTC 0x37a9679c41e99db270bda88de8ff50c0cd23f326 0x8b0c34a52f9e28d78caaa7066cd047b398dae74941a208b77777420f492bd7e1 0x000000000000000000000000db89587bb407b576134ff297d1848ea6d9066812 0x0000000000000000000000007d19317cc81c3ef06039ae5514679f8b12fd28e2 0x000000000000000000000000000000000000000000000000031d958f80134000 +EROR[DATE|TIME] transaction at 2222222.0 has no logs diff --git a/test/gold/tools/getLogs/getLogs_fmt_json.txt b/test/gold/tools/getLogs/getLogs_fmt_json.txt index d56402e01a..b2384928b1 100644 --- a/test/gold/tools/getLogs/getLogs_fmt_json.txt +++ b/test/gold/tools/getLogs/getLogs_fmt_json.txt @@ -20,5 +20,8 @@ TEST[DATE|TIME] Format: json "transactionHash": "0xa023f79cc26b321111cf051cab92b3a325e00ecfa9d377845a41654f6b2f0ebe", "transactionIndex": 0 } + ], + "errors": [ + "transaction at 2222222.0 has no logs" ] } diff --git a/test/gold/tools/getLogs/getLogs_fmt_txt.txt b/test/gold/tools/getLogs/getLogs_fmt_txt.txt index 3bf5d1bd35..d724a3b418 100644 --- a/test/gold/tools/getLogs/getLogs_fmt_txt.txt +++ b/test/gold/tools/getLogs/getLogs_fmt_txt.txt @@ -4,3 +4,4 @@ TEST[DATE|TIME] Caps: cache,decache,raw TEST[DATE|TIME] Format: txt blockNumber transactionIndex logIndex blockHash transactionHash timestamp date address topic0 topic1 topic2 topic3 data 2332332 0 0 0x6881c5043f6f6beed5ca31023e3a3518bede50a13be5c521fa6e21577314fa04 0xa023f79cc26b321111cf051cab92b3a325e00ecfa9d377845a41654f6b2f0ebe 1474924022 2016-09-26 21:07:02 UTC 0x37a9679c41e99db270bda88de8ff50c0cd23f326 0x8b0c34a52f9e28d78caaa7066cd047b398dae74941a208b77777420f492bd7e1 0x000000000000000000000000db89587bb407b576134ff297d1848ea6d9066812 0x0000000000000000000000007d19317cc81c3ef06039ae5514679f8b12fd28e2 0x000000000000000000000000000000000000000000000000031d958f80134000 +EROR[DATE|TIME] transaction at 2222222.0 has no logs diff --git a/test/gold/tools/getLogs/getLogs_redir_output_append.txt b/test/gold/tools/getLogs/getLogs_redir_output_append.txt index e9d14f4866..7ded2e44c8 100644 --- a/test/gold/tools/getLogs/getLogs_redir_output_append.txt +++ b/test/gold/tools/getLogs/getLogs_redir_output_append.txt @@ -5,6 +5,7 @@ TEST[DATE|TIME] OutputFn: output_test_file TEST[DATE|TIME] Append: true TEST[DATE|TIME] Caps: cache,decache,raw TEST[DATE|TIME] Format: txt +EROR[DATE|TIME] transaction at 3657480.10 has no logs ---- Results in ./output_test_file blockNumber transactionIndex logIndex blockHash transactionHash timestamp date address topic0 topic1 topic2 topic3 data diff --git a/test/gold/tools/getLogs/getLogs_star.txt b/test/gold/tools/getLogs/getLogs_star.txt index bdd50002ef..40193782ac 100644 --- a/test/gold/tools/getLogs/getLogs_star.txt +++ b/test/gold/tools/getLogs/getLogs_star.txt @@ -34,5 +34,8 @@ TEST[DATE|TIME] Format: json "transactionHash": "0x4a40fb5dd32321053e992d72de78f85de0ef70fa68018301787bdd733647ac57", "transactionIndex": 3 } + ], + "errors": [ + "transaction at 1428993.0:all has no logs" ] } From 03c21e80fce112824195bd316b6177449d1fdb46 Mon Sep 17 00:00:00 2001 From: tjayrush Date: Thu, 30 Nov 2023 23:19:13 -0500 Subject: [PATCH 08/25] sliceOfMaps method for chifra receipts, traces, and state --- .../chifra/internal/receipts/handle_show.go | 97 +++++++++-------- src/apps/chifra/internal/state/handle_call.go | 93 +++++++++------- .../chifra/internal/traces/handle_counts.go | 103 ++++++++++-------- 3 files changed, 160 insertions(+), 133 deletions(-) diff --git a/src/apps/chifra/internal/receipts/handle_show.go b/src/apps/chifra/internal/receipts/handle_show.go index fecf8986fd..92b21107d5 100644 --- a/src/apps/chifra/internal/receipts/handle_show.go +++ b/src/apps/chifra/internal/receipts/handle_show.go @@ -21,66 +21,75 @@ func (opts *ReceiptsOptions) HandleShow() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawReceipt], errorChan chan error) { - // var cnt int - var err error - var appMap map[types.SimpleAppearance]*types.SimpleTransaction - if appMap, _, err = identifiers.AsMap[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { errorChan <- err cancel() + + } else if cnt == 0 { + errorChan <- fmt.Errorf("no receipts found") + cancel() + } else { bar := logger.NewBar(logger.BarOptions{ - Enabled: !opts.Globals.TestMode, - Total: int64(len(appMap)), + Enabled: !testMode && !utils.IsTerminal(), + Total: int64(cnt), }) - iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { - if tx, err := opts.Conn.GetTransactionByAppearance(&app, false /* needsTraces */); err != nil { - return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) - } else if tx == nil || tx.Receipt == nil { - return fmt.Errorf("transaction at %s has no receipts", app.Orig()) - } else { - if opts.Articulate { - if err = abiCache.ArticulateReceipt(tx.Receipt); err != nil { - errorChan <- err // continue even with an error + for _, thisMap := range sliceOfMaps { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(types.SimpleTransaction) + } + + iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { + if tx, err := opts.Conn.GetTransactionByAppearance(&app, false /* needsTraces */); err != nil { + return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) + } else if tx == nil || tx.Receipt == nil { + return fmt.Errorf("transaction at %s has no receipts", app.Orig()) + } else { + if opts.Articulate { + if err = abiCache.ArticulateReceipt(tx.Receipt); err != nil { + errorChan <- err // continue even with an error + } } + *value = *tx + bar.Tick() + return nil } - *value = *tx - bar.Tick() - return nil } - } - iterErrorChan := make(chan error) - iterCtx, iterCancel := context.WithCancel(context.Background()) - defer iterCancel() - go utils.IterateOverMap(iterCtx, iterErrorChan, appMap, iterFunc) - for err := range iterErrorChan { - if !testMode || nErrors == 0 { - errorChan <- err - nErrors++ + iterErrorChan := make(chan error) + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + go utils.IterateOverMap(iterCtx, iterErrorChan, thisMap, iterFunc) + for err := range iterErrorChan { + if !testMode || nErrors == 0 { + errorChan <- err + nErrors++ + } } - } - bar.Finish(true) - items := make([]types.SimpleReceipt, 0, len(appMap)) - for _, tx := range appMap { - if tx.Receipt != nil { - items = append(items, *tx.Receipt) - } - } - sort.Slice(items, func(i, j int) bool { - if items[i].BlockNumber == items[j].BlockNumber { - return items[i].TransactionIndex < items[j].TransactionIndex + items := make([]types.SimpleReceipt, 0, len(thisMap)) + for _, tx := range thisMap { + if tx.Receipt != nil { + items = append(items, *tx.Receipt) + } } - return items[i].BlockNumber < items[j].BlockNumber - }) + sort.Slice(items, func(i, j int) bool { + if items[i].BlockNumber == items[j].BlockNumber { + return items[i].TransactionIndex < items[j].TransactionIndex + } + return items[i].BlockNumber < items[j].BlockNumber + }) - for _, item := range items { - item := item - if item.BlockNumber != 0 { - modelChan <- &item + for _, item := range items { + item := item + if item.BlockNumber != 0 { + modelChan <- &item + } } } + bar.Finish(true) } } diff --git a/src/apps/chifra/internal/state/handle_call.go b/src/apps/chifra/internal/state/handle_call.go index ae2b94c8a2..3b5265358b 100644 --- a/src/apps/chifra/internal/state/handle_call.go +++ b/src/apps/chifra/internal/state/handle_call.go @@ -31,63 +31,72 @@ func (opts *StateOptions) HandleCall() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawResult], errorChan chan error) { - // var cnt int - var err error - var appMap map[types.SimpleAppearance]*types.SimpleResult - if appMap, _, err = identifiers.AsMap[types.SimpleResult](chain, opts.BlockIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleResult](chain, opts.BlockIds); err != nil { errorChan <- err cancel() + + } else if cnt == 0 { + errorChan <- fmt.Errorf("no blocks found for the query") + cancel() + } else { bar := logger.NewBar(logger.BarOptions{ - Enabled: !opts.Globals.TestMode, - Total: int64(len(appMap)), + Enabled: !testMode && !utils.IsTerminal(), + Total: int64(cnt), }) - iterFunc := func(app types.SimpleAppearance, value *types.SimpleResult) error { - bn := uint64(app.BlockNumber) - if contractCall, _, err := call.NewContractCall(opts.Conn, callAddress, opts.Call); err != nil { - wrapped := fmt.Errorf("the --call value provided (%s) was not found: %s", opts.Call, err) - errorChan <- wrapped - cancel() - } else { - contractCall.BlockNumber = bn - results, err := contractCall.Call(artFunc) - if err != nil { - errorChan <- err + for _, thisMap := range sliceOfMaps { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(types.SimpleResult) + } + + iterFunc := func(app types.SimpleAppearance, value *types.SimpleResult) error { + bn := uint64(app.BlockNumber) + if contractCall, _, err := call.NewContractCall(opts.Conn, callAddress, opts.Call); err != nil { + wrapped := fmt.Errorf("the --call value provided (%s) was not found: %s", opts.Call, err) + errorChan <- wrapped cancel() } else { - bar.Tick() - *value = *results + contractCall.BlockNumber = bn + results, err := contractCall.Call(artFunc) + if err != nil { + errorChan <- err + cancel() + } else { + bar.Tick() + *value = *results + } } + return nil } - return nil - } - iterErrorChan := make(chan error) - iterCtx, iterCancel := context.WithCancel(context.Background()) - defer iterCancel() - go utils.IterateOverMap(iterCtx, iterErrorChan, appMap, iterFunc) - for err := range iterErrorChan { - if !testMode || nErrors == 0 { - errorChan <- err - nErrors++ + iterErrorChan := make(chan error) + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + go utils.IterateOverMap(iterCtx, iterErrorChan, thisMap, iterFunc) + for err := range iterErrorChan { + if !testMode || nErrors == 0 { + errorChan <- err + nErrors++ + } } - } - bar.Finish(true) - items := make([]types.SimpleResult, 0, len(appMap)) - for _, v := range appMap { - v := v - items = append(items, *v) - } - sort.Slice(items, func(i, j int) bool { - return items[i].BlockNumber < items[j].BlockNumber - }) + items := make([]types.SimpleResult, 0, len(thisMap)) + for _, v := range thisMap { + v := v + items = append(items, *v) + } + sort.Slice(items, func(i, j int) bool { + return items[i].BlockNumber < items[j].BlockNumber + }) - for _, item := range items { - item := item - modelChan <- &item + for _, item := range items { + item := item + modelChan <- &item + } } + bar.Finish(true) } } diff --git a/src/apps/chifra/internal/traces/handle_counts.go b/src/apps/chifra/internal/traces/handle_counts.go index f5e01eeedb..dd9effe5ba 100644 --- a/src/apps/chifra/internal/traces/handle_counts.go +++ b/src/apps/chifra/internal/traces/handle_counts.go @@ -23,69 +23,78 @@ func (opts *TracesOptions) HandleCounts() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawModeler], errorChan chan error) { - // var cnt int - var err error - var appMap map[types.SimpleAppearance]*types.SimpleTransaction - if appMap, _, err = identifiers.AsMap[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { errorChan <- err cancel() + + } else if cnt == 0 { + errorChan <- fmt.Errorf("no transactions found") + cancel() + } else { bar := logger.NewBar(logger.BarOptions{ - Enabled: !opts.Globals.TestMode, - Total: int64(len(appMap)), + Enabled: !testMode && !utils.IsTerminal(), + Total: int64(cnt), }) - iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { - if tx, err := opts.Conn.GetTransactionByAppearance(&app, true); err != nil { - errorChan <- fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) - return nil + for _, thisMap := range sliceOfMaps { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(types.SimpleTransaction) + } - } else if tx == nil || len(tx.Traces) == 0 { - errorChan <- fmt.Errorf("transaction at %s has no traces", app.Orig()) - return nil + iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { + if tx, err := opts.Conn.GetTransactionByAppearance(&app, true); err != nil { + errorChan <- fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) + return nil - } else { - *value = *tx - bar.Tick() - return nil + } else if tx == nil || len(tx.Traces) == 0 { + errorChan <- fmt.Errorf("transaction at %s has no traces", app.Orig()) + return nil + + } else { + *value = *tx + bar.Tick() + return nil + } } - } - iterErrorChan := make(chan error) - iterCtx, iterCancel := context.WithCancel(context.Background()) - defer iterCancel() - go utils.IterateOverMap(iterCtx, iterErrorChan, appMap, iterFunc) - for err := range iterErrorChan { - if !testMode || nErrors == 0 { - errorChan <- err - nErrors++ + iterErrorChan := make(chan error) + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + go utils.IterateOverMap(iterCtx, iterErrorChan, thisMap, iterFunc) + for err := range iterErrorChan { + if !testMode || nErrors == 0 { + errorChan <- err + nErrors++ + } } - } - bar.Finish(true) - items := make([]*types.SimpleTransaction, 0, len(appMap)) - for _, tx := range appMap { - items = append(items, tx) - } - sort.Slice(items, func(i, j int) bool { - if items[i].BlockNumber == items[j].BlockNumber { - return items[i].TransactionIndex < items[j].TransactionIndex + items := make([]*types.SimpleTransaction, 0, len(thisMap)) + for _, tx := range thisMap { + items = append(items, tx) } - return items[i].BlockNumber < items[j].BlockNumber - }) - for _, item := range items { - item := item - if !item.BlockHash.IsZero() { - counter := simpleTraceCount{ - BlockNumber: uint64(item.BlockNumber), - TransactionIndex: uint64(item.TransactionIndex), - TransactionHash: item.Hash, - Timestamp: item.Timestamp, - TracesCnt: uint64(len(item.Traces)), + sort.Slice(items, func(i, j int) bool { + if items[i].BlockNumber == items[j].BlockNumber { + return items[i].TransactionIndex < items[j].TransactionIndex + } + return items[i].BlockNumber < items[j].BlockNumber + }) + for _, item := range items { + item := item + if !item.BlockHash.IsZero() { + counter := simpleTraceCount{ + BlockNumber: uint64(item.BlockNumber), + TransactionIndex: uint64(item.TransactionIndex), + TransactionHash: item.Hash, + Timestamp: item.Timestamp, + TracesCnt: uint64(len(item.Traces)), + } + modelChan <- &counter } - modelChan <- &counter } } + bar.Finish(true) } } From 4864fe545c236d8cc10981eeda2b64f03e562f5e Mon Sep 17 00:00:00 2001 From: tjayrush Date: Fri, 1 Dec 2023 00:12:29 -0500 Subject: [PATCH 09/25] sliceOfMaps method for chifra traces --- .../chifra/internal/traces/handle_filter.go | 143 +++++++++--------- .../chifra/internal/traces/handle_show.go | 103 +++++++------ src/examples/findFirst/findFirst.go | 80 +++++----- 3 files changed, 173 insertions(+), 153 deletions(-) diff --git a/src/apps/chifra/internal/traces/handle_filter.go b/src/apps/chifra/internal/traces/handle_filter.go index fd62162c1b..a70a3468c8 100644 --- a/src/apps/chifra/internal/traces/handle_filter.go +++ b/src/apps/chifra/internal/traces/handle_filter.go @@ -34,96 +34,97 @@ func (opts *TracesOptions) HandleFilter() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawTrace], errorChan chan error) { - // var cnt int - var err error - var appMap map[types.SimpleAppearance]*types.SimpleTransaction - if appMap, _, err = identifiers.AsMap[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { + if thisMap, cnt, err := identifiers.AsMap[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { errorChan <- err cancel() + + } else if cnt == 0 { + errorChan <- fmt.Errorf("no transactions found") + cancel() + } else { bar := logger.NewBar(logger.BarOptions{ - Enabled: !opts.Globals.TestMode, - Total: int64(len(appMap)), + Enabled: !testMode && !utils.IsTerminal(), + Total: int64(cnt), }) - iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { - a := &types.RawAppearance{ - BlockNumber: uint32(app.BlockNumber), - } - - if block, err := opts.Conn.GetBlockBodyByNumber(uint64(a.BlockNumber)); err != nil { - errorChan <- fmt.Errorf("block at %s returned an error: %w", app.Orig(), err) - return nil - } else { - for _, tx := range block.Transactions { - tx := tx - if traces, err := opts.Conn.GetTracesByTransactionHash(tx.Hash.Hex(), &tx); err != nil { - errorChan <- fmt.Errorf("block at %s returned an error: %w", app.Orig(), err) - return nil - - } else if len(traces) == 0 { - errorChan <- fmt.Errorf("block at %s has no traces", app.Orig()) - return nil - - } else { - tr := make([]types.SimpleTrace, 0, len(traces)) - for index := range traces { - if opts.Articulate { - if err = abiCache.ArticulateTrace(&traces[index]); err != nil { - errorChan <- err // continue even with an error + if true { + + iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { + if block, err := opts.Conn.GetBlockBodyByNumber(uint64(app.BlockNumber)); err != nil { + errorChan <- fmt.Errorf("block at %s returned an error: %w", app.Orig(), err) + return nil + } else { + for _, tx := range block.Transactions { + tx := tx + if traces, err := opts.Conn.GetTracesByTransactionHash(tx.Hash.Hex(), &tx); err != nil { + errorChan <- fmt.Errorf("block at %s returned an error: %w", app.Orig(), err) + return nil + + } else if len(traces) == 0 { + errorChan <- fmt.Errorf("block at %s has no traces", app.Orig()) + return nil + + } else { + tr := make([]types.SimpleTrace, 0, len(traces)) + for index := range traces { + if opts.Articulate { + if err = abiCache.ArticulateTrace(&traces[index]); err != nil { + errorChan <- err // continue even with an error + } } + traces[index].TraceIndex = uint64(index) + tr = append(tr, traces[index]) } - traces[index].TraceIndex = uint64(index) - tr = append(tr, traces[index]) + value.Traces = append(value.Traces, tr...) } - value.Traces = append(value.Traces, tr...) } + bar.Tick() + return nil } - bar.Tick() - return nil } - } - iterErrorChan := make(chan error) - iterCtx, iterCancel := context.WithCancel(context.Background()) - defer iterCancel() - go utils.IterateOverMap(iterCtx, iterErrorChan, appMap, iterFunc) - for err := range iterErrorChan { - if !testMode || nErrors == 0 { - errorChan <- err - nErrors++ - } - } - bar.Finish(true) - - items := make([]types.SimpleTrace, 0, len(appMap)) - for _, tx := range appMap { - tx := tx - items = append(items, tx.Traces...) - } - sort.Slice(items, func(i, j int) bool { - if items[i].BlockNumber == items[j].BlockNumber { - if items[i].TransactionIndex == items[j].TransactionIndex { - return items[i].TraceIndex < items[j].TraceIndex + iterErrorChan := make(chan error) + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + go utils.IterateOverMap(iterCtx, iterErrorChan, thisMap, iterFunc) + for err := range iterErrorChan { + if !testMode || nErrors == 0 { + errorChan <- err + nErrors++ } - return items[i].TransactionIndex < items[j].TransactionIndex } - return items[i].BlockNumber < items[j].BlockNumber - }) - nPassed := uint64(0) - nShown := uint64(0) - for nTested, item := range items { - item := item - ok, _ := traceFilter.PassesBasic(&item, uint64(nTested), nPassed) - if ok { - if (traceFilter.After == 0 || nPassed >= traceFilter.After) && (traceFilter.Count == 0 || uint64(nShown) < traceFilter.Count) { - modelChan <- &item - nShown++ + items := make([]types.SimpleTrace, 0, len(thisMap)) + for _, tx := range thisMap { + tx := tx + items = append(items, tx.Traces...) + } + sort.Slice(items, func(i, j int) bool { + if items[i].BlockNumber == items[j].BlockNumber { + if items[i].TransactionIndex == items[j].TransactionIndex { + return items[i].TraceIndex < items[j].TraceIndex + } + return items[i].TransactionIndex < items[j].TransactionIndex + } + return items[i].BlockNumber < items[j].BlockNumber + }) + + nPassed := uint64(0) + nShown := uint64(0) + for nTested, item := range items { + item := item + ok, _ := traceFilter.PassesBasic(&item, uint64(nTested), nPassed) + if ok { + if (traceFilter.After == 0 || nPassed >= traceFilter.After) && (traceFilter.Count == 0 || uint64(nShown) < traceFilter.Count) { + modelChan <- &item + nShown++ + } + nPassed++ } - nPassed++ } } + bar.Finish(true) } } diff --git a/src/apps/chifra/internal/traces/handle_show.go b/src/apps/chifra/internal/traces/handle_show.go index bff1ddbd2a..e0550a2cca 100644 --- a/src/apps/chifra/internal/traces/handle_show.go +++ b/src/apps/chifra/internal/traces/handle_show.go @@ -25,73 +25,82 @@ func (opts *TracesOptions) HandleShow() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawTrace], errorChan chan error) { - // var cnt int - var err error - var appMap map[types.SimpleAppearance]*types.SimpleTransaction - if appMap, _, err = identifiers.AsMap[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { errorChan <- err cancel() + + } else if cnt == 0 { + errorChan <- fmt.Errorf("no transactions found") + cancel() + } else { bar := logger.NewBar(logger.BarOptions{ Enabled: !opts.Globals.TestMode, - Total: int64(len(appMap)), + Total: int64(cnt), }) - iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { - if tx, err := opts.Conn.GetTransactionByAppearance(&app, true); err != nil { - errorChan <- fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) - return nil + for _, thisMap := range sliceOfMaps { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(types.SimpleTransaction) + } + + iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { + if tx, err := opts.Conn.GetTransactionByAppearance(&app, true); err != nil { + errorChan <- fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) + return nil - } else if tx == nil || len(tx.Traces) == 0 { - errorChan <- fmt.Errorf("transaction at %s has no traces", app.Orig()) - return nil + } else if tx == nil || len(tx.Traces) == 0 { + errorChan <- fmt.Errorf("transaction at %s has no traces", app.Orig()) + return nil - } else { - for index := range tx.Traces { - if opts.Articulate { - if err = abiCache.ArticulateTrace(&tx.Traces[index]); err != nil { - errorChan <- err // continue even with an error + } else { + for index := range tx.Traces { + if opts.Articulate { + if err = abiCache.ArticulateTrace(&tx.Traces[index]); err != nil { + errorChan <- err // continue even with an error + } } } + *value = *tx + bar.Tick() + return nil } - *value = *tx - bar.Tick() - return nil } - } - iterErrorChan := make(chan error) - iterCtx, iterCancel := context.WithCancel(context.Background()) - defer iterCancel() - go utils.IterateOverMap(iterCtx, iterErrorChan, appMap, iterFunc) - for err := range iterErrorChan { - if !testMode || nErrors == 0 { - errorChan <- err - nErrors++ + iterErrorChan := make(chan error) + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + go utils.IterateOverMap(iterCtx, iterErrorChan, thisMap, iterFunc) + for err := range iterErrorChan { + if !testMode || nErrors == 0 { + errorChan <- err + nErrors++ + } } - } - bar.Finish(true) - items := make([]types.SimpleTrace, 0, len(appMap)) - for _, receipt := range appMap { - items = append(items, receipt.Traces...) - } - sort.Slice(items, func(i, j int) bool { - if items[i].BlockNumber == items[j].BlockNumber { - if items[i].TransactionIndex == items[j].TransactionIndex { - return items[i].GetSortString() < items[j].GetSortString() - } - return items[i].TransactionIndex < items[j].TransactionIndex + items := make([]types.SimpleTrace, 0, len(thisMap)) + for _, receipt := range thisMap { + items = append(items, receipt.Traces...) } - return items[i].BlockNumber < items[j].BlockNumber - }) + sort.Slice(items, func(i, j int) bool { + if items[i].BlockNumber == items[j].BlockNumber { + if items[i].TransactionIndex == items[j].TransactionIndex { + return items[i].GetSortString() < items[j].GetSortString() + } + return items[i].TransactionIndex < items[j].TransactionIndex + } + return items[i].BlockNumber < items[j].BlockNumber + }) - for _, item := range items { - item := item - if !item.BlockHash.IsZero() { - modelChan <- &item + for _, item := range items { + item := item + if !item.BlockHash.IsZero() { + modelChan <- &item + } } } + bar.Finish(true) } } diff --git a/src/examples/findFirst/findFirst.go b/src/examples/findFirst/findFirst.go index 67f880843c..77bf65ad4b 100644 --- a/src/examples/findFirst/findFirst.go +++ b/src/examples/findFirst/findFirst.go @@ -57,52 +57,62 @@ func slowWay(conn *rpc.Connection) { } func fastWay(conn *rpc.Connection) { - bar := logger.NewBar(logger.BarOptions{ - Type: logger.Fixed, - Prefix: "Getting stuff", - Enabled: true, - Start: 40000, - Total: 60000, - }) - var BlockIds []identifiers.Identifier if err := validate.ValidateIdentifiers(chain, []string{"40000-60000"}, validate.ValidBlockIdWithRange, 1, &BlockIds); err != nil { fmt.Println(err) } - var err error - var appMap map[types.SimpleAppearance]*types.SimpleBlock[string] - if appMap, _, err = identifiers.AsMap[types.SimpleBlock[string]](chain, BlockIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleBlock[string]](chain, BlockIds); err != nil { fmt.Println(err) + + } else if cnt != 0 { + fmt.Println("Expected a block") + } else { - var firstBlock types.SimpleBlock[string] - firstBlock.BlockNumber = utils.NOPOS - iterateFunc := func(key types.SimpleAppearance, value *types.SimpleBlock[string]) error { - bn := uint64(key.BlockNumber) - if theBlock, err := conn.GetBlockHeaderByNumber(base.Blknum(key.BlockNumber)); err != nil { - return err - } else { - if len(theBlock.Transactions) > 0 { - // fmt.Println("Found", theBlock.Hash.String(), ":", len(theBlock.Transactions), "transactions") - if theBlock.BlockNumber > 0 && bn < firstBlock.BlockNumber { - firstBlock = theBlock - fmt.Println(" Set", firstBlock.BlockNumber, firstBlock.Hash.String(), ":", len(firstBlock.Transactions), "transactions ") + bar := logger.NewBar(logger.BarOptions{ + Type: logger.Fixed, + Prefix: "Getting stuff", + Enabled: true, + Start: 40000, + Total: 60000, + }) + + for _, thisMap := range sliceOfMaps { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(types.SimpleBlock[string]) + } + + var firstBlock types.SimpleBlock[string] + firstBlock.BlockNumber = utils.NOPOS + iterateFunc := func(key types.SimpleAppearance, value *types.SimpleBlock[string]) error { + bn := uint64(key.BlockNumber) + if theBlock, err := conn.GetBlockHeaderByNumber(base.Blknum(key.BlockNumber)); err != nil { + return err + } else { + if len(theBlock.Transactions) > 0 { + // fmt.Println("Found", theBlock.Hash.String(), ":", len(theBlock.Transactions), "transactions") + if theBlock.BlockNumber > 0 && bn < firstBlock.BlockNumber { + firstBlock = theBlock + fmt.Println(" Set", firstBlock.BlockNumber, firstBlock.Hash.String(), ":", len(firstBlock.Transactions), "transactions ") + } } + bar.Tick() + return nil } - bar.Tick() - return nil } - } - errorChan := make(chan error) - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - go utils.IterateOverMap(ctx, errorChan, appMap, iterateFunc) - for err := range errorChan { - fmt.Println(err) - } + errorChan := make(chan error) + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + go utils.IterateOverMap(ctx, errorChan, thisMap, iterateFunc) + for err := range errorChan { + fmt.Println(err) + } - timeTaken := bar.Finish(true) - fmt.Println(firstBlock.BlockNumber, firstBlock.Hash.String(), "in", timeTaken, "seconds") + timeTaken := bar.Finish(true) + fmt.Println(firstBlock.BlockNumber, firstBlock.Hash.String(), "in", timeTaken, "seconds") + } + bar.Finish(true) } } From 2463023757947b7d8e033126fe74c859799e3703 Mon Sep 17 00:00:00 2001 From: tjayrush Date: Fri, 1 Dec 2023 00:39:25 -0500 Subject: [PATCH 10/25] sliceOfMaps method for all but chifra export --- .../chifra/internal/blocks/handle_show.go | 3 +- src/apps/chifra/internal/chunks/handle_tag.go | 3 +- .../chifra/internal/chunks/handle_truncate.go | 5 +- .../internal/slurp/handle_appearances.go | 3 +- src/apps/chifra/internal/slurp/handle_show.go | 3 +- .../chifra/internal/traces/handle_filter.go | 8 +- .../chifra/internal/traces/handle_show.go | 2 +- .../internal/transactions/handle_logs.go | 99 ++++++++++--------- .../internal/transactions/handle_uniq.go | 3 +- src/apps/chifra/pkg/identifiers/app_map.go | 33 ------- .../testRunner/testCases/tools/getTraces.csv | 4 +- 11 files changed, 75 insertions(+), 91 deletions(-) diff --git a/src/apps/chifra/internal/blocks/handle_show.go b/src/apps/chifra/internal/blocks/handle_show.go index d922bada0a..1c0dbaed9f 100644 --- a/src/apps/chifra/internal/blocks/handle_show.go +++ b/src/apps/chifra/internal/blocks/handle_show.go @@ -34,8 +34,7 @@ func (opts *BlocksOptions) HandleShow() error { } else { bar := logger.NewBar(logger.BarOptions{ - Type: logger.Expanding, - Enabled: !opts.Globals.TestMode, + Enabled: !testMode && !utils.IsTerminal(), Total: int64(cnt), }) diff --git a/src/apps/chifra/internal/chunks/handle_tag.go b/src/apps/chifra/internal/chunks/handle_tag.go index aedb31b665..f868125ff7 100644 --- a/src/apps/chifra/internal/chunks/handle_tag.go +++ b/src/apps/chifra/internal/chunks/handle_tag.go @@ -21,6 +21,7 @@ import ( func (opts *ChunksOptions) HandleTag(blockNums []uint64) error { chain := opts.Globals.Chain + testMode := opts.Globals.TestMode if opts.Globals.TestMode { logger.Warn("Tag option not tested.") return nil @@ -42,7 +43,7 @@ func (opts *ChunksOptions) HandleTag(blockNums []uint64) error { return } bar := logger.NewBar(logger.BarOptions{ - Enabled: !opts.Globals.TestMode, + Enabled: !testMode, Total: int64(len(man.Chunks)), }) tagIndex := func(walker *walk.CacheWalker, path string, first bool) (bool, error) { diff --git a/src/apps/chifra/internal/chunks/handle_truncate.go b/src/apps/chifra/internal/chunks/handle_truncate.go index 07058c6b34..980fedf812 100644 --- a/src/apps/chifra/internal/chunks/handle_truncate.go +++ b/src/apps/chifra/internal/chunks/handle_truncate.go @@ -26,6 +26,7 @@ import ( func (opts *ChunksOptions) HandleTruncate(blockNums []uint64) error { chain := opts.Globals.Chain + testMode := opts.Globals.TestMode if opts.Globals.TestMode { logger.Warn("Truncate option not tested.") return nil @@ -39,7 +40,7 @@ func (opts *ChunksOptions) HandleTruncate(blockNums []uint64) error { _ = file.CleanFolder(chain, config.PathToIndex(chain), []string{"ripe", "unripe", "maps", "staging"}) bar := logger.NewBar(logger.BarOptions{ - Enabled: !opts.Globals.TestMode, + Enabled: !testMode, Total: 128, Type: logger.Expanding, }) @@ -98,7 +99,7 @@ func (opts *ChunksOptions) HandleTruncate(blockNums []uint64) error { bar.Prefix = fmt.Sprintf("Truncated to %d ", opts.Truncate) bar.Finish(true) bar = logger.NewBar(logger.BarOptions{ - Enabled: !opts.Globals.TestMode, + Enabled: !testMode, Total: 20, Type: logger.Expanding, }) diff --git a/src/apps/chifra/internal/slurp/handle_appearances.go b/src/apps/chifra/internal/slurp/handle_appearances.go index 69dcd063e1..076756db27 100644 --- a/src/apps/chifra/internal/slurp/handle_appearances.go +++ b/src/apps/chifra/internal/slurp/handle_appearances.go @@ -13,6 +13,7 @@ import ( ) func (opts *SlurpOptions) HandleAppearances() error { + testMode := opts.Globals.TestMode paginator := rpc.Paginator{ Page: 1, PerPage: int(opts.PerPage), @@ -32,7 +33,7 @@ func (opts *SlurpOptions) HandleAppearances() error { bar := logger.NewBar(logger.BarOptions{ Type: logger.Expanding, - Enabled: !opts.Globals.TestMode, + Enabled: !testMode, Total: 250, // estimate since we have no idea how many there are }) diff --git a/src/apps/chifra/internal/slurp/handle_show.go b/src/apps/chifra/internal/slurp/handle_show.go index 22bafa38e4..d4a7bb8fd1 100644 --- a/src/apps/chifra/internal/slurp/handle_show.go +++ b/src/apps/chifra/internal/slurp/handle_show.go @@ -13,6 +13,7 @@ import ( ) func (opts *SlurpOptions) HandleShow() error { + testMode := opts.Globals.TestMode paginator := rpc.Paginator{ Page: 1, PerPage: int(opts.PerPage), @@ -31,7 +32,7 @@ func (opts *SlurpOptions) HandleShow() error { done := false bar := logger.NewBar(logger.BarOptions{ Type: logger.Expanding, - Enabled: !opts.Globals.TestMode, + Enabled: !testMode, Total: 250, // estimate since we have no idea how many there are }) for !done { diff --git a/src/apps/chifra/internal/traces/handle_filter.go b/src/apps/chifra/internal/traces/handle_filter.go index a70a3468c8..a9415da298 100644 --- a/src/apps/chifra/internal/traces/handle_filter.go +++ b/src/apps/chifra/internal/traces/handle_filter.go @@ -34,7 +34,7 @@ func (opts *TracesOptions) HandleFilter() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawTrace], errorChan chan error) { - if thisMap, cnt, err := identifiers.AsMap[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { errorChan <- err cancel() @@ -48,7 +48,11 @@ func (opts *TracesOptions) HandleFilter() error { Total: int64(cnt), }) - if true { + for _, thisMap := range sliceOfMaps { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(types.SimpleTransaction) + } iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { if block, err := opts.Conn.GetBlockBodyByNumber(uint64(app.BlockNumber)); err != nil { diff --git a/src/apps/chifra/internal/traces/handle_show.go b/src/apps/chifra/internal/traces/handle_show.go index e0550a2cca..18bb21dc65 100644 --- a/src/apps/chifra/internal/traces/handle_show.go +++ b/src/apps/chifra/internal/traces/handle_show.go @@ -35,7 +35,7 @@ func (opts *TracesOptions) HandleShow() error { } else { bar := logger.NewBar(logger.BarOptions{ - Enabled: !opts.Globals.TestMode, + Enabled: !testMode && !utils.IsTerminal(), Total: int64(cnt), }) diff --git a/src/apps/chifra/internal/transactions/handle_logs.go b/src/apps/chifra/internal/transactions/handle_logs.go index 714d8ffdbe..e5f0a636f9 100644 --- a/src/apps/chifra/internal/transactions/handle_logs.go +++ b/src/apps/chifra/internal/transactions/handle_logs.go @@ -39,69 +39,78 @@ func (opts *TransactionsOptions) HandleLogs() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawLog], errorChan chan error) { - // var cnt int - var err error - var appMap map[types.SimpleAppearance]*types.SimpleTransaction - if appMap, _, err = identifiers.AsMap[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { errorChan <- err cancel() + + } else if cnt == 0 { + errorChan <- fmt.Errorf("no transactions found") + cancel() + } else { bar := logger.NewBar(logger.BarOptions{ - Enabled: !opts.Globals.TestMode, - Total: int64(len(appMap)), + Enabled: !testMode && !utils.IsTerminal(), + Total: int64(cnt), }) - iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { - if tx, err := opts.Conn.GetTransactionByAppearance(&app, opts.Traces /* needsTraces */); err != nil { - return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) - } else if tx == nil { - return fmt.Errorf("transaction at %s has no logs", app.Orig()) - } else { - if opts.Articulate && tx.ArticulatedTx == nil { - if err = abiCache.ArticulateTransaction(tx); err != nil { - errorChan <- err // continue even with an error + for _, thisMap := range sliceOfMaps { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(types.SimpleTransaction) + } + + iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { + if tx, err := opts.Conn.GetTransactionByAppearance(&app, opts.Traces /* needsTraces */); err != nil { + return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) + } else if tx == nil { + return fmt.Errorf("transaction at %s has no logs", app.Orig()) + } else { + if opts.Articulate && tx.ArticulatedTx == nil { + if err = abiCache.ArticulateTransaction(tx); err != nil { + errorChan <- err // continue even with an error + } } + *value = *tx + bar.Tick() + return nil } - *value = *tx - bar.Tick() - return nil } - } - iterErrorChan := make(chan error) - iterCtx, iterCancel := context.WithCancel(context.Background()) - defer iterCancel() - go utils.IterateOverMap(iterCtx, iterErrorChan, appMap, iterFunc) - for err := range iterErrorChan { - if !testMode || nErrors == 0 { - errorChan <- err - nErrors++ + iterErrorChan := make(chan error) + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + go utils.IterateOverMap(iterCtx, iterErrorChan, thisMap, iterFunc) + for err := range iterErrorChan { + if !testMode || nErrors == 0 { + errorChan <- err + nErrors++ + } } - } - bar.Finish(true) - items := make([]types.SimpleTransaction, 0, len(appMap)) - for _, tx := range appMap { - items = append(items, *tx) - } - sort.Slice(items, func(i, j int) bool { - if items[i].BlockNumber == items[j].BlockNumber { - return items[i].TransactionIndex < items[j].TransactionIndex + items := make([]types.SimpleTransaction, 0, len(thisMap)) + for _, tx := range thisMap { + items = append(items, *tx) } - return items[i].BlockNumber < items[j].BlockNumber - }) + sort.Slice(items, func(i, j int) bool { + if items[i].BlockNumber == items[j].BlockNumber { + return items[i].TransactionIndex < items[j].TransactionIndex + } + return items[i].BlockNumber < items[j].BlockNumber + }) - for _, item := range items { - item := item - if !item.BlockHash.IsZero() { - for _, log := range item.Receipt.Logs { - log := log - if logFilter.PassesFilter(&log) { - modelChan <- &log + for _, item := range items { + item := item + if !item.BlockHash.IsZero() { + for _, log := range item.Receipt.Logs { + log := log + if logFilter.PassesFilter(&log) { + modelChan <- &log + } } } } } + bar.Finish(true) } } diff --git a/src/apps/chifra/internal/transactions/handle_uniq.go b/src/apps/chifra/internal/transactions/handle_uniq.go index d14e325800..7afa176b94 100644 --- a/src/apps/chifra/internal/transactions/handle_uniq.go +++ b/src/apps/chifra/internal/transactions/handle_uniq.go @@ -13,12 +13,13 @@ import ( func (opts *TransactionsOptions) HandleUniq() (err error) { chain := opts.Globals.Chain + testMode := opts.Globals.TestMode ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawAppearance], errorChan chan error) { bar := logger.NewBar(logger.BarOptions{ Type: logger.Expanding, - Enabled: !opts.Globals.TestMode, + Enabled: !testMode, Total: 250, // estimate since we have no idea how many there are }) procFunc := func(s *types.SimpleAppearance) error { diff --git a/src/apps/chifra/pkg/identifiers/app_map.go b/src/apps/chifra/pkg/identifiers/app_map.go index 7118ad71bb..6d58d5714e 100644 --- a/src/apps/chifra/pkg/identifiers/app_map.go +++ b/src/apps/chifra/pkg/identifiers/app_map.go @@ -16,39 +16,6 @@ type mappedType interface { types.SimpleResult } -// AsMap takes command line identifiers for blocks or transactions and returns a map of appearances to allocated -// pointers to SimpleTransactions or SimpleBlock[string]. The map is keyed by the appearance and the value is -// the allocated pointer. We don't know what type of identifier we have until we try to resolve it. -func AsMap[T mappedType](chain string, ids []Identifier) (map[types.SimpleAppearance]*T, int, error) { - ret := make(map[types.SimpleAppearance]*T) - for index, rng := range ids { - if rawIds, err := rng.ResolveTxs(chain); err != nil { - if blockIds, err := rng.ResolveBlocks(chain); err != nil { - return nil, 0, err - } else { - for _, raw := range blockIds { - s := types.SimpleAppearance{ - BlockNumber: uint32(raw), - Reason: strings.Replace(ids[index].Orig, "-", ".", -1), - } - ret[s] = new(T) - } - } - } else { - for _, raw := range rawIds { - s := types.SimpleAppearance{ - BlockNumber: uint32(raw.BlockNumber), - TransactionIndex: uint32(raw.TransactionIndex), - Reason: strings.Replace(ids[index].Orig, "-", ".", -1), - } - ret[s] = new(T) - } - } - } - - return ret, len(ret), nil -} - func SliceOfMaps_AsMaps[T mappedType](chain string, ids []Identifier) ([]map[types.SimpleAppearance]*T, int, error) { ret := make([]types.SimpleAppearance, 0, 100 /* good guess */) for index, rng := range ids { diff --git a/src/dev_tools/testRunner/testCases/tools/getTraces.csv b/src/dev_tools/testRunner/testCases/tools/getTraces.csv index 22f54d7ef3..11fc0a1699 100644 --- a/src/dev_tools/testRunner/testCases/tools/getTraces.csv +++ b/src/dev_tools/testRunner/testCases/tools/getTraces.csv @@ -68,8 +68,8 @@ on ,both ,fast ,traces ,tools/getTraces ,ddos_show ,y ,transa # These work, but they're slow so we don't run them on ,both ,fast ,traces ,tools/getTraces ,by_filter1 ,y ,fmt = json & filter = 0x2ed0c4!0x2ed128!!0x8bbb73bcb5d553b5a556358d27625323fd781d37!1000!100 & cache on ,both ,fast ,traces ,tools/getTraces ,by_filter2 ,y ,fmt = json & filter = 0x2ed0c4!0x2ed128!!0x8bbb73bcb5d553b5a556358d27625323fd781d37!! -on ,both ,fast ,traces ,tools/getTraces ,by_filter3 ,y ,fmt = json & filter = 0x2ed0c4!0x2ed128!!0x8bbb73bcb5d553b5a556358d27625323fd781d37!!1 -on ,both ,fast ,traces ,tools/getTraces ,by_filter4 ,y ,fmt = json & filter = 0x2ed0c4!0x2ed128!!0x8bbb73bcb5d553b5a556358d27625323fd781d37!1! +local ,both ,fast ,traces ,tools/getTraces ,by_filter3 ,y ,fmt = json & filter = 0x2ed0c4!0x2ed128!!0x8bbb73bcb5d553b5a556358d27625323fd781d37!!1 +local ,both ,fast ,traces ,tools/getTraces ,by_filter4 ,y ,fmt = json & filter = 0x2ed0c4!0x2ed128!!0x8bbb73bcb5d553b5a556358d27625323fd781d37!1! on ,both ,fast ,traces ,tools/getTraces ,by_filter5 ,y ,fmt = json & filter = 4370000!4370002 & cache on ,both ,fast ,traces ,tools/getTraces ,by_filter6 ,y ,fmt = json & filter = 0x42ae50!0x42ae52!0x8c3064d32441f0190e8b3fa1ef9fc81fccb06111 on ,both ,fast ,traces ,tools/getTraces ,by_filter7 ,y ,fmt = json & filter = 0x42ae50!4370002!!0xc42209accc14029c1012fb5680d95fbd6036e2a0 From 80e72dc47926f1ca31e979b4995a4b95de35b98b Mon Sep 17 00:00:00 2001 From: tjayrush Date: Fri, 1 Dec 2023 01:22:22 -0500 Subject: [PATCH 11/25] sliceOfMaps method for chifra export --withdrawals --- .../internal/export/handle_neighbors.go | 111 +++++++++--------- .../internal/export/handle_withdrawals.go | 81 ++++++++++++- .../internal/export/iterate_withdrawals.go | 88 -------------- 3 files changed, 133 insertions(+), 147 deletions(-) delete mode 100644 src/apps/chifra/internal/export/iterate_withdrawals.go diff --git a/src/apps/chifra/internal/export/handle_neighbors.go b/src/apps/chifra/internal/export/handle_neighbors.go index 5b15cb830c..4ba2888bf6 100644 --- a/src/apps/chifra/internal/export/handle_neighbors.go +++ b/src/apps/chifra/internal/export/handle_neighbors.go @@ -29,76 +29,81 @@ func (opts *ExportOptions) HandleNeighbors(monitorArray []monitor.Monitor) error base.RecordRange{First: opts.FirstRecord, Last: opts.GetMax()}, ) - ctx := context.Background() + ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawAppearance], errorChan chan error) { for _, mon := range monitorArray { - var cnt int - var err error - var appMap map[types.SimpleAppearance]*bool - if appMap, cnt, err = monitor.AsMap[bool](&mon, filter); err != nil { + if sliceOfMaps, cnt, err := monitor.SliceOfMaps_AsMaps[bool](&mon, filter); err != nil { errorChan <- err - return - } else if !opts.NoZero || cnt > 0 { + cancel() + + } else if cnt == 0 { + errorChan <- fmt.Errorf("no appearances found for %s", mon.Address.Hex()) + cancel() + + } else { bar := logger.NewBar(logger.BarOptions{ Prefix: mon.Address.Hex(), - Enabled: !opts.Globals.TestMode, + Enabled: !testMode && !utils.IsTerminal(), Total: mon.Count(), }) - neighbors := make([]Reason, 0) - iterFunc := func(app types.SimpleAppearance, unused *bool) error { - if theseNeighbors, err := GetNeighbors(&app); err != nil { - return err - } else { - neighbors = append(neighbors, theseNeighbors...) - return nil + for _, thisMap := range sliceOfMaps { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(bool) } - } - iterErrorChan := make(chan error) - iterCtx, iterCancel := context.WithCancel(context.Background()) - defer iterCancel() - go utils.IterateOverMap(iterCtx, iterErrorChan, appMap, iterFunc) - for err := range iterErrorChan { - if !testMode || nErrors == 0 { - errorChan <- err - nErrors++ + neighbors := make([]Reason, 0) + iterFunc := func(app types.SimpleAppearance, unused *bool) error { + if theseNeighbors, err := GetNeighbors(&app); err != nil { + return err + } else { + neighbors = append(neighbors, theseNeighbors...) + return nil + } } - } - bar.Finish(true) - // Sort the items back into an ordered array by block number - items := make([]types.SimpleAppearance, 0, len(appMap)) - for _, neighbor := range neighbors { - app := types.SimpleAppearance{ - Address: *neighbor.Address, - BlockNumber: neighbor.App.BlockNumber, - TransactionIndex: neighbor.App.TransactionIndex, - Reason: neighbor.Reason, - } - items = append(items, app) - } - sort.Slice(items, func(i, j int) bool { - if opts.Reversed { - i, j = j, i + iterErrorChan := make(chan error) + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + go utils.IterateOverMap(iterCtx, iterErrorChan, thisMap, iterFunc) + for err := range iterErrorChan { + if !testMode || nErrors == 0 { + errorChan <- err + nErrors++ + } } - if items[i].BlockNumber == items[j].BlockNumber { - if items[i].TransactionIndex == items[j].TransactionIndex { - return items[i].Address.Hex() < items[j].Address.Hex() + + // Sort the items back into an ordered array by block number + items := make([]types.SimpleAppearance, 0, len(thisMap)) + for _, neighbor := range neighbors { + app := types.SimpleAppearance{ + Address: *neighbor.Address, + BlockNumber: neighbor.App.BlockNumber, + TransactionIndex: neighbor.App.TransactionIndex, + Reason: neighbor.Reason, } - return items[i].TransactionIndex < items[j].TransactionIndex + items = append(items, app) } - return items[i].BlockNumber < items[j].BlockNumber - }) + sort.Slice(items, func(i, j int) bool { + if opts.Reversed { + i, j = j, i + } + if items[i].BlockNumber == items[j].BlockNumber { + if items[i].TransactionIndex == items[j].TransactionIndex { + return items[i].Address.Hex() < items[j].Address.Hex() + } + return items[i].TransactionIndex < items[j].TransactionIndex + } + return items[i].BlockNumber < items[j].BlockNumber + }) - for _, n := range items { - n := n - modelChan <- &n + for _, n := range items { + n := n + modelChan <- &n + } } - - } else { - errorChan <- fmt.Errorf("no appearances found for %s", mon.Address.Hex()) - return + bar.Finish(true) } } } diff --git a/src/apps/chifra/internal/export/handle_withdrawals.go b/src/apps/chifra/internal/export/handle_withdrawals.go index 06e02e5b37..22c38b7f2b 100644 --- a/src/apps/chifra/internal/export/handle_withdrawals.go +++ b/src/apps/chifra/internal/export/handle_withdrawals.go @@ -6,9 +6,12 @@ package exportPkg import ( "context" + "fmt" + "sort" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/base" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/filter" + "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/logger" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/monitor" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/names" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/output" @@ -28,18 +31,84 @@ func (opts *ExportOptions) HandleWithdrawals(monitorArray []monitor.Monitor) err base.RecordRange{First: first, Last: opts.GetMax()}, ) - ctx := context.Background() + ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawWithdrawal], errorChan chan error) { for _, mon := range monitorArray { - mon := mon - if items, err := opts.readWithdrawals(&mon, filter, errorChan); err != nil { + testMode := opts.Globals.TestMode + nErrors := 0 + + if sliceOfMaps, cnt, err := monitor.SliceOfMaps_AsMaps[types.SimpleBlock[string]](&mon, filter); err != nil { errorChan <- err + cancel() + + } else if cnt == 0 { + errorChan <- fmt.Errorf("no appearances found for %s", mon.Address.Hex()) continue + } else { - for _, item := range items { - item := item - modelChan <- item + bar := logger.NewBar(logger.BarOptions{ + Prefix: mon.Address.Hex(), + Enabled: !testMode, + Total: int64(cnt), + }) + + for _, thisMap := range sliceOfMaps { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(types.SimpleBlock[string]) + } + + iterFunc := func(app types.SimpleAppearance, value *types.SimpleBlock[string]) error { + var block types.SimpleBlock[string] + if block, err = opts.Conn.GetBlockHeaderByNumber(uint64(app.BlockNumber)); err != nil { + return err + } + + withdrawals := make([]types.SimpleWithdrawal, 0, 16) + for _, w := range block.Withdrawals { + if w.Address == mon.Address { + withdrawals = append(withdrawals, w) + } + } + if len(withdrawals) > 0 { + block.Withdrawals = withdrawals + *value = block + } + + bar.Tick() + return nil + } + + iterErrorChan := make(chan error) + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + go utils.IterateOverMap(iterCtx, iterErrorChan, thisMap, iterFunc) + for err := range iterErrorChan { + if !testMode || nErrors == 0 { + errorChan <- err + nErrors++ + } + } + + // Sort the items back into an ordered array by block number + items := make([]*types.SimpleWithdrawal, 0, len(thisMap)) + for _, block := range thisMap { + for _, with := range block.Withdrawals { + items = append(items, &with) + } + } + sort.Slice(items, func(i, j int) bool { + if opts.Reversed { + i, j = j, i + } + return items[i].BlockNumber < items[j].BlockNumber + }) + + for _, item := range items { + modelChan <- item + } } + bar.Finish(true) } } } diff --git a/src/apps/chifra/internal/export/iterate_withdrawals.go b/src/apps/chifra/internal/export/iterate_withdrawals.go deleted file mode 100644 index c89b5c4063..0000000000 --- a/src/apps/chifra/internal/export/iterate_withdrawals.go +++ /dev/null @@ -1,88 +0,0 @@ -package exportPkg - -import ( - "context" - "fmt" - "sort" - - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/filter" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/logger" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/monitor" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/utils" -) - -func (opts *ExportOptions) readWithdrawals( - mon *monitor.Monitor, - filter *filter.AppearanceFilter, - errorChan chan error, -) ([]*types.SimpleWithdrawal, error) { - nErrors := 0 - testMode := opts.Globals.TestMode - var cnt int - var err error - var appMap map[types.SimpleAppearance]*types.SimpleBlock[string] - if appMap, cnt, err = monitor.AsMap[types.SimpleBlock[string]](mon, filter); err != nil { - errorChan <- err - return nil, err - } else if opts.NoZero && cnt == 0 { - errorChan <- fmt.Errorf("no appearances found for %s", mon.Address.Hex()) - return nil, nil - } - - bar := logger.NewBar(logger.BarOptions{ - Prefix: mon.Address.Hex(), - Enabled: !opts.Globals.TestMode, - Total: mon.Count(), - }) - - iterFunc := func(app types.SimpleAppearance, value *types.SimpleBlock[string]) error { - var block types.SimpleBlock[string] - if block, err = opts.Conn.GetBlockHeaderByNumber(uint64(app.BlockNumber)); err != nil { - return err - } - - withdrawals := make([]types.SimpleWithdrawal, 0, 16) - for _, w := range block.Withdrawals { - if w.Address == mon.Address { - withdrawals = append(withdrawals, w) - } - } - if len(withdrawals) > 0 { - block.Withdrawals = withdrawals - *value = block - } - - bar.Tick() - return nil - } - - iterErrorChan := make(chan error) - iterCtx, iterCancel := context.WithCancel(context.Background()) - defer iterCancel() - go utils.IterateOverMap(iterCtx, iterErrorChan, appMap, iterFunc) - for err := range iterErrorChan { - if !testMode || nErrors == 0 { - errorChan <- err - nErrors++ - } - } - bar.Finish(true) - - // Sort the items back into an ordered array by block number - items := make([]*types.SimpleWithdrawal, 0, len(appMap)) - for _, block := range appMap { - for _, with := range block.Withdrawals { - items = append(items, &with) - } - } - sort.Slice(items, func(i, j int) bool { - if opts.Reversed { - i, j = j, i - } - return items[i].BlockNumber < items[j].BlockNumber - }) - - // Return the array of items - return items, nil -} From 045b442c60e4e656369ad0feef3b4e17f3ea9977 Mon Sep 17 00:00:00 2001 From: tjayrush Date: Fri, 1 Dec 2023 01:51:58 -0500 Subject: [PATCH 12/25] Cleaning up a bit --- .../chifra/internal/export/handle_balances.go | 85 ++++++++++++++++--- .../chifra/internal/export/handle_show.go | 26 +++++- .../internal/export/iterate_balances.go | 84 ------------------ .../chifra/internal/export/iterate_logs.go | 27 +++++- .../internal/export/iterate_receipts.go | 27 +++++- .../internal/export/iterate_statements.go | 27 +++++- .../chifra/internal/export/iterate_traces.go | 27 +++++- .../internal/export/iterate_transactions.go | 43 ---------- 8 files changed, 195 insertions(+), 151 deletions(-) delete mode 100644 src/apps/chifra/internal/export/iterate_balances.go delete mode 100644 src/apps/chifra/internal/export/iterate_transactions.go diff --git a/src/apps/chifra/internal/export/handle_balances.go b/src/apps/chifra/internal/export/handle_balances.go index dd2a82c946..dde05f1dd5 100644 --- a/src/apps/chifra/internal/export/handle_balances.go +++ b/src/apps/chifra/internal/export/handle_balances.go @@ -8,19 +8,24 @@ import ( "context" "fmt" "math/big" + "sort" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/base" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/filter" + "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/logger" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/monitor" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/names" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/output" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/tslib" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" + "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/utils" ) func (opts *ExportOptions) HandleBalances(monitorArray []monitor.Monitor) error { chain := opts.Globals.Chain testMode := opts.Globals.TestMode + nErrors := 0 + filter := filter.NewFilter( opts.Reversed, opts.Reverted, @@ -29,7 +34,7 @@ func (opts *ExportOptions) HandleBalances(monitorArray []monitor.Monitor) error base.RecordRange{First: opts.FirstRecord, Last: opts.GetMax()}, ) - ctx := context.Background() + ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawToken], errorChan chan error) { currentBn := uint64(0) prevBalance := big.NewInt(0) @@ -48,22 +53,76 @@ func (opts *ExportOptions) HandleBalances(monitorArray []monitor.Monitor) error } for _, mon := range monitorArray { - if items, err := opts.readBalances(&mon, filter, errorChan); err != nil { + if sliceOfMaps, cnt, err := monitor.SliceOfMaps_AsMaps[types.SimpleToken](&mon, filter); err != nil { errorChan <- err - continue // on error - } else if !opts.NoZero || len(items) > 0 { - prevBalance, _ = opts.Conn.GetBalanceAt(mon.Address, filter.GetOuterBounds().First) - for idx, item := range items { - item := item - if err := visitToken(idx, item); err != nil { - errorChan <- err - return + cancel() + + } else if cnt == 0 { + errorChan <- fmt.Errorf("no appearances found for %s", mon.Address.Hex()) + cancel() + + } else { + bar := logger.NewBar(logger.BarOptions{ + Prefix: mon.Address.Hex(), + Enabled: !testMode && !utils.IsTerminal(), + Total: mon.Count(), + }) + + for _, thisMap := range sliceOfMaps { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(types.SimpleToken) + } + + iterFunc := func(app types.SimpleAppearance, value *types.SimpleToken) error { + var balance *big.Int + if balance, err = opts.Conn.GetBalanceByAppearance(mon.Address, &app); err != nil { + return err + } + value.Address = base.FAKE_ETH_ADDRESS + value.Holder = mon.Address + value.BlockNumber = uint64(app.BlockNumber) + value.TransactionIndex = uint64(app.TransactionIndex) + value.Balance = *balance + value.Timestamp = app.Timestamp + bar.Tick() + return nil + } + + iterErrorChan := make(chan error) + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + go utils.IterateOverMap(iterCtx, iterErrorChan, thisMap, iterFunc) + for err := range iterErrorChan { + if !testMode || nErrors == 0 { + errorChan <- err + nErrors++ + } + } + + // Sort the items back into an ordered array by block number + items := make([]*types.SimpleToken, 0, len(thisMap)) + for _, tx := range thisMap { + items = append(items, tx) + } + sort.Slice(items, func(i, j int) bool { + if opts.Reversed { + i, j = j, i + } + return items[i].BlockNumber < items[j].BlockNumber + }) + + prevBalance, _ = opts.Conn.GetBalanceAt(mon.Address, filter.GetOuterBounds().First) + for idx, item := range items { + item := item + if err := visitToken(idx, item); err != nil { + errorChan <- err + return + } } } - } else { - errorChan <- fmt.Errorf("no appearances found for %s", mon.Address.Hex()) - continue + bar.Finish(true) } prevBalance = big.NewInt(0) } diff --git a/src/apps/chifra/internal/export/handle_show.go b/src/apps/chifra/internal/export/handle_show.go index 78b0675893..443005a773 100644 --- a/src/apps/chifra/internal/export/handle_show.go +++ b/src/apps/chifra/internal/export/handle_show.go @@ -56,9 +56,29 @@ func (opts *ExportOptions) HandleShow(monitorArray []monitor.Monitor) error { thisMap[app] = new(types.SimpleTransaction) } - if err := opts.readTransactions(thisMap, filter, bar, false /* readTraces */); err != nil { - errorChan <- err - cancel() + iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { + if tx, err := opts.Conn.GetTransactionByAppearance(&app, false); err != nil { + return err + } else { + passes, _ := filter.ApplyTxFilters(tx) + if passes { + *value = *tx + } + if bar != nil { + bar.Tick() + } + return nil + } + } + + // Set up and interate over the map calling iterFunc for each appearance + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + errChan := make(chan error) + go utils.IterateOverMap(iterCtx, errChan, thisMap, iterFunc) + if stepErr := <-errChan; stepErr != nil { + errorChan <- stepErr + return } items := make([]*types.SimpleTransaction, 0, len(thisMap)) diff --git a/src/apps/chifra/internal/export/iterate_balances.go b/src/apps/chifra/internal/export/iterate_balances.go deleted file mode 100644 index b769edd6d2..0000000000 --- a/src/apps/chifra/internal/export/iterate_balances.go +++ /dev/null @@ -1,84 +0,0 @@ -package exportPkg - -import ( - "context" - "fmt" - "math/big" - "sort" - - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/base" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/filter" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/logger" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/monitor" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/utils" -) - -func (opts *ExportOptions) readBalances( - mon *monitor.Monitor, - filter *filter.AppearanceFilter, - errorChan chan error, -) ([]*types.SimpleToken, error) { - testMode := opts.Globals.TestMode - nErrors := 0 - var cnt int - var err error - var appMap map[types.SimpleAppearance]*types.SimpleToken - if appMap, cnt, err = monitor.AsMap[types.SimpleToken](mon, filter); err != nil { - errorChan <- err - return nil, err - } else if opts.NoZero && cnt == 0 { - errorChan <- fmt.Errorf("no appearances found for %s", mon.Address.Hex()) - return nil, nil - } - - bar := logger.NewBar(logger.BarOptions{ - Prefix: mon.Address.Hex(), - Enabled: !opts.Globals.TestMode, - Total: mon.Count(), - }) - - iterFunc := func(app types.SimpleAppearance, value *types.SimpleToken) error { - var balance *big.Int - if balance, err = opts.Conn.GetBalanceByAppearance(mon.Address, &app); err != nil { - return err - } - - value.Address = base.FAKE_ETH_ADDRESS - value.Holder = mon.Address - value.BlockNumber = uint64(app.BlockNumber) - value.TransactionIndex = uint64(app.TransactionIndex) - value.Balance = *balance - value.Timestamp = app.Timestamp - bar.Tick() - - return nil - } - - iterErrorChan := make(chan error) - iterCtx, iterCancel := context.WithCancel(context.Background()) - defer iterCancel() - go utils.IterateOverMap(iterCtx, iterErrorChan, appMap, iterFunc) - for err := range iterErrorChan { - if !testMode || nErrors == 0 { - errorChan <- err - nErrors++ - } - } - bar.Finish(true) - - // Sort the items back into an ordered array by block number - items := make([]*types.SimpleToken, 0, len(appMap)) - for _, tx := range appMap { - items = append(items, tx) - } - sort.Slice(items, func(i, j int) bool { - if opts.Reversed { - i, j = j, i - } - return items[i].BlockNumber < items[j].BlockNumber - }) - - // Return the array of items - return items, nil -} diff --git a/src/apps/chifra/internal/export/iterate_logs.go b/src/apps/chifra/internal/export/iterate_logs.go index 1344e173c5..61e3a97642 100644 --- a/src/apps/chifra/internal/export/iterate_logs.go +++ b/src/apps/chifra/internal/export/iterate_logs.go @@ -1,6 +1,7 @@ package exportPkg import ( + "context" "fmt" "sort" @@ -10,6 +11,7 @@ import ( "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/logger" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/monitor" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" + "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/utils" ) func (opts *ExportOptions) readLogs( @@ -36,8 +38,29 @@ func (opts *ExportOptions) readLogs( Total: mon.Count(), }) - if err := opts.readTransactions(appMap, filter, bar, false /* readTraces */); err != nil { - return nil, err + iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { + if tx, err := opts.Conn.GetTransactionByAppearance(&app, false); err != nil { + return err + } else { + passes, _ := filter.ApplyTxFilters(tx) + if passes { + *value = *tx + } + if bar != nil { + bar.Tick() + } + return nil + } + } + + // Set up and interate over the map calling iterFunc for each appearance + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + errChan := make(chan error) + go utils.IterateOverMap(iterCtx, errChan, appMap, iterFunc) + if stepErr := <-errChan; stepErr != nil { + errorChan <- stepErr + return nil, stepErr } // Sort the items back into an ordered array by block number diff --git a/src/apps/chifra/internal/export/iterate_receipts.go b/src/apps/chifra/internal/export/iterate_receipts.go index ddce574dba..c038a57844 100644 --- a/src/apps/chifra/internal/export/iterate_receipts.go +++ b/src/apps/chifra/internal/export/iterate_receipts.go @@ -1,6 +1,7 @@ package exportPkg import ( + "context" "fmt" "sort" @@ -10,6 +11,7 @@ import ( "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/logger" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/monitor" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" + "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/utils" ) func (opts *ExportOptions) readReceipts( @@ -36,8 +38,29 @@ func (opts *ExportOptions) readReceipts( Total: mon.Count(), }) - if err := opts.readTransactions(appMap, filter, bar, false /* readTraces */); err != nil { - return nil, err + iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { + if tx, err := opts.Conn.GetTransactionByAppearance(&app, false); err != nil { + return err + } else { + passes, _ := filter.ApplyTxFilters(tx) + if passes { + *value = *tx + } + if bar != nil { + bar.Tick() + } + return nil + } + } + + // Set up and interate over the map calling iterFunc for each appearance + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + errChan := make(chan error) + go utils.IterateOverMap(iterCtx, errChan, appMap, iterFunc) + if stepErr := <-errChan; stepErr != nil { + errorChan <- stepErr + return nil, stepErr } items := make([]*types.SimpleReceipt, 0, len(appMap)) diff --git a/src/apps/chifra/internal/export/iterate_statements.go b/src/apps/chifra/internal/export/iterate_statements.go index b43770eea5..33fb75f907 100644 --- a/src/apps/chifra/internal/export/iterate_statements.go +++ b/src/apps/chifra/internal/export/iterate_statements.go @@ -1,6 +1,7 @@ package exportPkg import ( + "context" "fmt" "sort" @@ -10,6 +11,7 @@ import ( "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/logger" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/monitor" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" + "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/utils" ) func (opts *ExportOptions) readStatements( @@ -36,8 +38,29 @@ func (opts *ExportOptions) readStatements( Total: mon.Count(), }) - if err := opts.readTransactions(appMap, filter, bar, false /* readTraces */); err != nil { - return nil, err + iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { + if tx, err := opts.Conn.GetTransactionByAppearance(&app, false); err != nil { + return err + } else { + passes, _ := filter.ApplyTxFilters(tx) + if passes { + *value = *tx + } + if bar != nil { + bar.Tick() + } + return nil + } + } + + // Set up and interate over the map calling iterFunc for each appearance + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + errChan := make(chan error) + go utils.IterateOverMap(iterCtx, errChan, appMap, iterFunc) + if stepErr := <-errChan; stepErr != nil { + errorChan <- stepErr + return nil, stepErr } txArray := make([]*types.SimpleTransaction, 0, len(appMap)) diff --git a/src/apps/chifra/internal/export/iterate_traces.go b/src/apps/chifra/internal/export/iterate_traces.go index 613d99a583..3555eff431 100644 --- a/src/apps/chifra/internal/export/iterate_traces.go +++ b/src/apps/chifra/internal/export/iterate_traces.go @@ -5,6 +5,7 @@ package exportPkg import ( + "context" "fmt" "sort" @@ -13,6 +14,7 @@ import ( "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/logger" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/monitor" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" + "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/utils" ) func (opts *ExportOptions) readTraces( @@ -39,8 +41,29 @@ func (opts *ExportOptions) readTraces( Total: mon.Count(), }) - if err := opts.readTransactions(appMap, filter, bar, true /* readTraces */); err != nil { - return nil, err + iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { + if tx, err := opts.Conn.GetTransactionByAppearance(&app, true); err != nil { + return err + } else { + passes, _ := filter.ApplyTxFilters(tx) + if passes { + *value = *tx + } + if bar != nil { + bar.Tick() + } + return nil + } + } + + // Set up and interate over the map calling iterFunc for each appearance + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + errChan := make(chan error) + go utils.IterateOverMap(iterCtx, errChan, appMap, iterFunc) + if stepErr := <-errChan; stepErr != nil { + errorChan <- stepErr + return nil, stepErr } // Sort the items back into an ordered array by block number diff --git a/src/apps/chifra/internal/export/iterate_transactions.go b/src/apps/chifra/internal/export/iterate_transactions.go deleted file mode 100644 index f150f95776..0000000000 --- a/src/apps/chifra/internal/export/iterate_transactions.go +++ /dev/null @@ -1,43 +0,0 @@ -package exportPkg - -import ( - "context" - - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/filter" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/logger" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/utils" -) - -func (opts *ExportOptions) readTransactions( - theMap map[types.SimpleAppearance]*types.SimpleTransaction, - filt *filter.AppearanceFilter, - bar *logger.ProgressBar, - readTraces bool, -) error { - iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { - if tx, err := opts.Conn.GetTransactionByAppearance(&app, readTraces); err != nil { - return err - } else { - passes, _ := filt.ApplyTxFilters(tx) - if passes { - *value = *tx - } - if bar != nil { - bar.Tick() - } - return nil - } - } - - // Set up and interate over the map calling iterFunc for each appearance - iterCtx, iterCancel := context.WithCancel(context.Background()) - defer iterCancel() - errChan := make(chan error) - go utils.IterateOverMap(iterCtx, errChan, theMap, iterFunc) - if stepErr := <-errChan; stepErr != nil { - return stepErr - } - - return nil -} From 2c0a3c6f32d2944d0a7c9fa2d5fd10abc3b14c27 Mon Sep 17 00:00:00 2001 From: tjayrush Date: Fri, 1 Dec 2023 02:18:21 -0500 Subject: [PATCH 13/25] sliceOfMaps method for chifra export --logs and --traces --- .../chifra/internal/export/handle_logs.go | 96 ++++++++++++- .../chifra/internal/export/handle_traces.go | 123 +++++++++++++++- .../chifra/internal/export/iterate_logs.go | 102 ------------- .../chifra/internal/export/iterate_traces.go | 135 ------------------ 4 files changed, 207 insertions(+), 249 deletions(-) delete mode 100644 src/apps/chifra/internal/export/iterate_logs.go delete mode 100644 src/apps/chifra/internal/export/iterate_traces.go diff --git a/src/apps/chifra/internal/export/handle_logs.go b/src/apps/chifra/internal/export/handle_logs.go index 6774885e5f..6ff5c6013f 100644 --- a/src/apps/chifra/internal/export/handle_logs.go +++ b/src/apps/chifra/internal/export/handle_logs.go @@ -6,14 +6,18 @@ package exportPkg import ( "context" + "fmt" + "sort" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/articulate" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/base" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/filter" + "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/logger" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/monitor" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/names" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/output" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" + "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/utils" ) func (opts *ExportOptions) HandleLogs(monitorArray []monitor.Monitor) error { @@ -33,18 +37,96 @@ func (opts *ExportOptions) HandleLogs(monitorArray []monitor.Monitor) error { addrArray = append(addrArray, mon.Address) } - ctx := context.Background() + ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawLog], errorChan chan error) { for _, mon := range monitorArray { - mon := mon - if items, err := opts.readLogs(addrArray, &mon, filter, errorChan, abiCache); err != nil { + if sliceOfMaps, cnt, err := monitor.SliceOfMaps_AsMaps[types.SimpleTransaction](&mon, filter); err != nil { errorChan <- err - continue + cancel() + + } else if cnt == 0 { + errorChan <- fmt.Errorf("no appearances found for %s", mon.Address.Hex()) + cancel() + } else { - for _, item := range items { - item := item - modelChan <- item + bar := logger.NewBar(logger.BarOptions{ + Prefix: mon.Address.Hex(), + Enabled: !testMode && !utils.IsTerminal(), + Total: int64(cnt), + }) + + for _, thisMap := range sliceOfMaps { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(types.SimpleTransaction) + } + + iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { + if tx, err := opts.Conn.GetTransactionByAppearance(&app, false); err != nil { + return err + } else { + passes, _ := filter.ApplyTxFilters(tx) + if passes { + *value = *tx + } + if bar != nil { + bar.Tick() + } + return nil + } + } + + // Set up and interate over the map calling iterFunc for each appearance + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + errChan := make(chan error) + go utils.IterateOverMap(iterCtx, errChan, thisMap, iterFunc) + if stepErr := <-errChan; stepErr != nil { + errorChan <- stepErr + iterCancel() + return + } + + // Sort the items back into an ordered array by block number + items := make([]*types.SimpleLog, 0, len(thisMap)) + for _, tx := range thisMap { + if tx.Receipt == nil { + continue + } + for _, log := range tx.Receipt.Logs { + log := log + if filter.ApplyLogFilter(&log, addrArray) && opts.matchesFilter(&log) { + if opts.Articulate { + if err := abiCache.ArticulateLog(&log); err != nil { + errorChan <- fmt.Errorf("error articulating log: %v", err) + } + } + items = append(items, &log) + } + } + } + + sort.Slice(items, func(i, j int) bool { + if opts.Reversed { + i, j = j, i + } + itemI := items[i] + itemJ := items[j] + if itemI.BlockNumber == itemJ.BlockNumber { + if itemI.TransactionIndex == itemJ.TransactionIndex { + return itemI.LogIndex < itemJ.LogIndex + } + return itemI.TransactionIndex < itemJ.TransactionIndex + } + return itemI.BlockNumber < itemJ.BlockNumber + }) + + for _, item := range items { + item := item + modelChan <- item + } } + bar.Finish(true) } } } diff --git a/src/apps/chifra/internal/export/handle_traces.go b/src/apps/chifra/internal/export/handle_traces.go index 8c144819c3..dfcc847b01 100644 --- a/src/apps/chifra/internal/export/handle_traces.go +++ b/src/apps/chifra/internal/export/handle_traces.go @@ -6,14 +6,18 @@ package exportPkg import ( "context" + "fmt" + "sort" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/articulate" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/base" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/filter" + "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/logger" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/monitor" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/names" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/output" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" + "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/utils" ) func (opts *ExportOptions) HandleTraces(monitorArray []monitor.Monitor) error { @@ -28,17 +32,94 @@ func (opts *ExportOptions) HandleTraces(monitorArray []monitor.Monitor) error { base.RecordRange{First: opts.FirstRecord, Last: opts.GetMax()}, ) - ctx := context.Background() + ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawTrace], errorChan chan error) { for _, mon := range monitorArray { - if items, err := opts.readTraces(monitorArray, &mon, filter, errorChan, abiCache); err != nil { + if sliceOfMaps, cnt, err := monitor.SliceOfMaps_AsMaps[types.SimpleTransaction](&mon, filter); err != nil { errorChan <- err + cancel() + + } else if cnt == 0 { + errorChan <- fmt.Errorf("no appearances found for %s", mon.Address.Hex()) continue + } else { - for _, item := range items { - item := item - modelChan <- item + bar := logger.NewBar(logger.BarOptions{ + Prefix: mon.Address.Hex(), + Enabled: !testMode && !utils.IsTerminal(), + Total: int64(cnt), + }) + + for _, thisMap := range sliceOfMaps { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(types.SimpleTransaction) + } + + iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { + if tx, err := opts.Conn.GetTransactionByAppearance(&app, true); err != nil { + return err + } else { + passes, _ := filter.ApplyTxFilters(tx) + if passes { + *value = *tx + } + if bar != nil { + bar.Tick() + } + return nil + } + } + + // Set up and interate over the map calling iterFunc for each appearance + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + errChan := make(chan error) + go utils.IterateOverMap(iterCtx, errChan, thisMap, iterFunc) + if stepErr := <-errChan; stepErr != nil { + errorChan <- stepErr + iterCancel() + return + } + + // Sort the items back into an ordered array by block number + items := make([]*types.SimpleTrace, 0, len(thisMap)) + for _, tx := range thisMap { + for index, trace := range tx.Traces { + trace := trace + trace.TraceIndex = uint64(index) + isCreate := trace.Action.CallType == "creation" || trace.TraceType == "create" + if !opts.Factory || isCreate { + if opts.Articulate { + if err := abiCache.ArticulateTrace(&trace); err != nil { + errorChan <- fmt.Errorf("error articulating trace: %v", err) + } + } + items = append(items, &trace) + } + } + } + sort.Slice(items, func(i, j int) bool { + if opts.Reversed { + i, j = j, i + } + itemI := items[i] + itemJ := items[j] + if itemI.BlockNumber == itemJ.BlockNumber { + if itemI.TransactionIndex == itemJ.TransactionIndex { + return itemI.TraceIndex < itemJ.TraceIndex + } + return itemI.TransactionIndex < itemJ.TransactionIndex + } + return itemI.BlockNumber < itemJ.BlockNumber + }) + + for _, item := range items { + item := item + modelChan <- item + } } + bar.Finish(true) } } } @@ -60,3 +141,35 @@ func (opts *ExportOptions) HandleTraces(monitorArray []monitor.Monitor) error { return output.StreamMany(ctx, fetchData, opts.Globals.OutputOptsWithExtra(extra)) } + +/* +TODO: NOTE + bool isSelfDestruct = trace.action.selfDestructed != ""; + if (isSelfDestruct) { + copy.action.from = trace.action.selfDestructed; + copy.action.to = trace.action.refundAddress; + copy.action.callType = "suicide"; + copy.action.value = trace.action.balance; + copy.traceAddress.push_back("s"); + copy.transactionHash = uint_2_Hex(trace.blockNumber * 100000 + trace.transactionIndex); + copy.action.input = "0x"; + } + cout << ((isJson() && !opt->firstOut) ? ", " : ""); + cout << copy; + opt->firstOut = false; + bool isCreation = trace.result.address != ""; + if (isCreation) { + copy.action.from = "0x0"; + copy.action.to = trace.result.address; + copy.action.callType = "creation"; + copy.action.value = trace.action.value; + if (copy.traceAddress.size() == 0) + copy.traceAddress.push_back("null"); + copy.traceAddress.push_back("s"); + copy.transactionHash = uint_2_Hex(trace.blockNumber * 100000 + trace.transactionIndex); + copy.action.input = trace.action.input; + cout << ((isJson() && !opt->firstOut) ? ", " : ""); + cout << copy; + opt->firstOut = false; + +*/ diff --git a/src/apps/chifra/internal/export/iterate_logs.go b/src/apps/chifra/internal/export/iterate_logs.go deleted file mode 100644 index 61e3a97642..0000000000 --- a/src/apps/chifra/internal/export/iterate_logs.go +++ /dev/null @@ -1,102 +0,0 @@ -package exportPkg - -import ( - "context" - "fmt" - "sort" - - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/articulate" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/base" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/filter" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/logger" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/monitor" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/utils" -) - -func (opts *ExportOptions) readLogs( - addrArray []base.Address, - mon *monitor.Monitor, - filter *filter.AppearanceFilter, - errorChan chan error, - abiCache *articulate.AbiCache, -) ([]*types.SimpleLog, error) { - var cnt int - var err error - var appMap map[types.SimpleAppearance]*types.SimpleTransaction - if appMap, cnt, err = monitor.AsMap[types.SimpleTransaction](mon, filter); err != nil { - errorChan <- err - return nil, err - } else if opts.NoZero && cnt == 0 { - errorChan <- fmt.Errorf("no appearances found for %s", mon.Address.Hex()) - return nil, nil - } - - bar := logger.NewBar(logger.BarOptions{ - Prefix: mon.Address.Hex(), - Enabled: !opts.Globals.TestMode, - Total: mon.Count(), - }) - - iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { - if tx, err := opts.Conn.GetTransactionByAppearance(&app, false); err != nil { - return err - } else { - passes, _ := filter.ApplyTxFilters(tx) - if passes { - *value = *tx - } - if bar != nil { - bar.Tick() - } - return nil - } - } - - // Set up and interate over the map calling iterFunc for each appearance - iterCtx, iterCancel := context.WithCancel(context.Background()) - defer iterCancel() - errChan := make(chan error) - go utils.IterateOverMap(iterCtx, errChan, appMap, iterFunc) - if stepErr := <-errChan; stepErr != nil { - errorChan <- stepErr - return nil, stepErr - } - - // Sort the items back into an ordered array by block number - items := make([]*types.SimpleLog, 0, len(appMap)) - for _, tx := range appMap { - if tx.Receipt == nil { - continue - } - for _, log := range tx.Receipt.Logs { - log := log - if filter.ApplyLogFilter(&log, addrArray) && opts.matchesFilter(&log) { - if opts.Articulate { - if err := abiCache.ArticulateLog(&log); err != nil { - errorChan <- fmt.Errorf("error articulating log: %v", err) - } - } - items = append(items, &log) - } - } - } - - sort.Slice(items, func(i, j int) bool { - if opts.Reversed { - i, j = j, i - } - itemI := items[i] - itemJ := items[j] - if itemI.BlockNumber == itemJ.BlockNumber { - if itemI.TransactionIndex == itemJ.TransactionIndex { - return itemI.LogIndex < itemJ.LogIndex - } - return itemI.TransactionIndex < itemJ.TransactionIndex - } - return itemI.BlockNumber < itemJ.BlockNumber - }) - - // Return the array of items - return items, nil -} diff --git a/src/apps/chifra/internal/export/iterate_traces.go b/src/apps/chifra/internal/export/iterate_traces.go deleted file mode 100644 index 3555eff431..0000000000 --- a/src/apps/chifra/internal/export/iterate_traces.go +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright 2021 The TrueBlocks Authors. All rights reserved. -// Use of this source code is governed by a license that can -// be found in the LICENSE file. - -package exportPkg - -import ( - "context" - "fmt" - "sort" - - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/articulate" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/filter" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/logger" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/monitor" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/utils" -) - -func (opts *ExportOptions) readTraces( - monitorArray []monitor.Monitor, - mon *monitor.Monitor, - filter *filter.AppearanceFilter, - errorChan chan error, - abiCache *articulate.AbiCache, -) ([]*types.SimpleTrace, error) { - var cnt int - var err error - var appMap map[types.SimpleAppearance]*types.SimpleTransaction - if appMap, cnt, err = monitor.AsMap[types.SimpleTransaction](mon, filter); err != nil { - errorChan <- err - return nil, err - } else if opts.NoZero && cnt == 0 { - errorChan <- fmt.Errorf("no appearances found for %s", mon.Address.Hex()) - return nil, nil - } - - bar := logger.NewBar(logger.BarOptions{ - Prefix: mon.Address.Hex(), - Enabled: !opts.Globals.TestMode, - Total: mon.Count(), - }) - - iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { - if tx, err := opts.Conn.GetTransactionByAppearance(&app, true); err != nil { - return err - } else { - passes, _ := filter.ApplyTxFilters(tx) - if passes { - *value = *tx - } - if bar != nil { - bar.Tick() - } - return nil - } - } - - // Set up and interate over the map calling iterFunc for each appearance - iterCtx, iterCancel := context.WithCancel(context.Background()) - defer iterCancel() - errChan := make(chan error) - go utils.IterateOverMap(iterCtx, errChan, appMap, iterFunc) - if stepErr := <-errChan; stepErr != nil { - errorChan <- stepErr - return nil, stepErr - } - - // Sort the items back into an ordered array by block number - items := make([]*types.SimpleTrace, 0, len(appMap)) - for _, tx := range appMap { - for index, trace := range tx.Traces { - trace := trace - trace.TraceIndex = uint64(index) - isCreate := trace.Action.CallType == "creation" || trace.TraceType == "create" - if !opts.Factory || isCreate { - if opts.Articulate { - if err := abiCache.ArticulateTrace(&trace); err != nil { - errorChan <- fmt.Errorf("error articulating trace: %v", err) - } - } - items = append(items, &trace) - } - } - } - sort.Slice(items, func(i, j int) bool { - if opts.Reversed { - i, j = j, i - } - itemI := items[i] - itemJ := items[j] - if itemI.BlockNumber == itemJ.BlockNumber { - if itemI.TransactionIndex == itemJ.TransactionIndex { - return itemI.TraceIndex < itemJ.TraceIndex - } - return itemI.TransactionIndex < itemJ.TransactionIndex - } - return itemI.BlockNumber < itemJ.BlockNumber - }) - - // Return the array of items - return items, nil -} - -/* -TODO: NOTE - bool isSelfDestruct = trace.action.selfDestructed != ""; - if (isSelfDestruct) { - copy.action.from = trace.action.selfDestructed; - copy.action.to = trace.action.refundAddress; - copy.action.callType = "suicide"; - copy.action.value = trace.action.balance; - copy.traceAddress.push_back("s"); - copy.transactionHash = uint_2_Hex(trace.blockNumber * 100000 + trace.transactionIndex); - copy.action.input = "0x"; - } - cout << ((isJson() && !opt->firstOut) ? ", " : ""); - cout << copy; - opt->firstOut = false; - bool isCreation = trace.result.address != ""; - if (isCreation) { - copy.action.from = "0x0"; - copy.action.to = trace.result.address; - copy.action.callType = "creation"; - copy.action.value = trace.action.value; - if (copy.traceAddress.size() == 0) - copy.traceAddress.push_back("null"); - copy.traceAddress.push_back("s"); - copy.transactionHash = uint_2_Hex(trace.blockNumber * 100000 + trace.transactionIndex); - copy.action.input = trace.action.input; - cout << ((isJson() && !opt->firstOut) ? ", " : ""); - cout << copy; - opt->firstOut = false; - -*/ From dfb2fc84831ac3dd5dce5121005d0f5fce33c025 Mon Sep 17 00:00:00 2001 From: tjayrush Date: Fri, 1 Dec 2023 02:32:50 -0500 Subject: [PATCH 14/25] sliceOfMaps method for chifra export --receipts --- .../chifra/internal/export/handle_receipts.go | 94 ++++++++++++++++-- .../internal/export/iterate_receipts.go | 99 ------------------- 2 files changed, 87 insertions(+), 106 deletions(-) delete mode 100644 src/apps/chifra/internal/export/iterate_receipts.go diff --git a/src/apps/chifra/internal/export/handle_receipts.go b/src/apps/chifra/internal/export/handle_receipts.go index 011600c0df..5f69c0c258 100644 --- a/src/apps/chifra/internal/export/handle_receipts.go +++ b/src/apps/chifra/internal/export/handle_receipts.go @@ -6,14 +6,18 @@ package exportPkg import ( "context" + "fmt" + "sort" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/articulate" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/base" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/filter" + "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/logger" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/monitor" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/names" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/output" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" + "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/utils" ) func (opts *ExportOptions) HandleReceipts(monitorArray []monitor.Monitor) error { @@ -33,17 +37,93 @@ func (opts *ExportOptions) HandleReceipts(monitorArray []monitor.Monitor) error addrArray = append(addrArray, mon.Address) } - ctx := context.Background() + ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawReceipt], errorChan chan error) { for _, mon := range monitorArray { - mon := mon - if items, err := opts.readReceipts(addrArray, &mon, filter, errorChan, abiCache); err != nil { + if sliceOfMaps, cnt, err := monitor.SliceOfMaps_AsMaps[types.SimpleTransaction](&mon, filter); err != nil { errorChan <- err - continue + cancel() + + } else if opts.NoZero && cnt == 0 { + errorChan <- fmt.Errorf("no appearances found for %s", mon.Address.Hex()) + cancel() + } else { - for _, item := range items { - item := item - modelChan <- item + bar := logger.NewBar(logger.BarOptions{ + Prefix: mon.Address.Hex(), + Enabled: !testMode && !utils.IsTerminal(), + Total: int64(cnt), + }) + + for _, thisMap := range sliceOfMaps { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(types.SimpleTransaction) + } + + iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { + if tx, err := opts.Conn.GetTransactionByAppearance(&app, false); err != nil { + return err + } else { + passes, _ := filter.ApplyTxFilters(tx) + if passes { + *value = *tx + } + if bar != nil { + bar.Tick() + } + return nil + } + } + + // Set up and interate over the map calling iterFunc for each appearance + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + errChan := make(chan error) + go utils.IterateOverMap(iterCtx, errChan, thisMap, iterFunc) + if stepErr := <-errChan; stepErr != nil { + errorChan <- stepErr + iterCancel() + return + } + + items := make([]*types.SimpleReceipt, 0, len(thisMap)) + for _, tx := range thisMap { + if tx.Receipt == nil { + continue + } + filteredLogs := make([]types.SimpleLog, 0, len(tx.Receipt.Logs)) + for _, log := range tx.Receipt.Logs { + log := log + if filter.ApplyLogFilter(&log, addrArray) && opts.matchesFilter(&log) { + if opts.Articulate { + if err := abiCache.ArticulateLog(&log); err != nil { + errorChan <- fmt.Errorf("error articulating log: %v", err) + } + } + filteredLogs = append(filteredLogs, log) + } + } + tx.Receipt.Logs = filteredLogs + items = append(items, tx.Receipt) + } + + sort.Slice(items, func(i, j int) bool { + if opts.Reversed { + i, j = j, i + } + itemI := items[i] + itemJ := items[j] + if itemI.BlockNumber == itemJ.BlockNumber { + return itemI.TransactionIndex < itemJ.TransactionIndex + } + return itemI.BlockNumber < itemJ.BlockNumber + }) + + for _, item := range items { + item := item + modelChan <- item + } } } } diff --git a/src/apps/chifra/internal/export/iterate_receipts.go b/src/apps/chifra/internal/export/iterate_receipts.go deleted file mode 100644 index c038a57844..0000000000 --- a/src/apps/chifra/internal/export/iterate_receipts.go +++ /dev/null @@ -1,99 +0,0 @@ -package exportPkg - -import ( - "context" - "fmt" - "sort" - - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/articulate" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/base" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/filter" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/logger" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/monitor" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/utils" -) - -func (opts *ExportOptions) readReceipts( - addrArray []base.Address, - mon *monitor.Monitor, - filter *filter.AppearanceFilter, - errorChan chan error, - abiCache *articulate.AbiCache, -) ([]*types.SimpleReceipt, error) { - var cnt int - var err error - var appMap map[types.SimpleAppearance]*types.SimpleTransaction - if appMap, cnt, err = monitor.AsMap[types.SimpleTransaction](mon, filter); err != nil { - errorChan <- err - return nil, err - } else if opts.NoZero && cnt == 0 { - errorChan <- fmt.Errorf("no appearances found for %s", mon.Address.Hex()) - return nil, nil - } - - bar := logger.NewBar(logger.BarOptions{ - Prefix: mon.Address.Hex(), - Enabled: !opts.Globals.TestMode, - Total: mon.Count(), - }) - - iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { - if tx, err := opts.Conn.GetTransactionByAppearance(&app, false); err != nil { - return err - } else { - passes, _ := filter.ApplyTxFilters(tx) - if passes { - *value = *tx - } - if bar != nil { - bar.Tick() - } - return nil - } - } - - // Set up and interate over the map calling iterFunc for each appearance - iterCtx, iterCancel := context.WithCancel(context.Background()) - defer iterCancel() - errChan := make(chan error) - go utils.IterateOverMap(iterCtx, errChan, appMap, iterFunc) - if stepErr := <-errChan; stepErr != nil { - errorChan <- stepErr - return nil, stepErr - } - - items := make([]*types.SimpleReceipt, 0, len(appMap)) - for _, tx := range appMap { - if tx.Receipt == nil { - continue - } - filteredLogs := make([]types.SimpleLog, 0, len(tx.Receipt.Logs)) - for _, log := range tx.Receipt.Logs { - log := log - if filter.ApplyLogFilter(&log, addrArray) && opts.matchesFilter(&log) { - if opts.Articulate { - if err := abiCache.ArticulateLog(&log); err != nil { - errorChan <- fmt.Errorf("error articulating log: %v", err) - } - } - filteredLogs = append(filteredLogs, log) - } - } - tx.Receipt.Logs = filteredLogs - items = append(items, tx.Receipt) - } - sort.Slice(items, func(i, j int) bool { - if opts.Reversed { - i, j = j, i - } - itemI := items[i] - itemJ := items[j] - if itemI.BlockNumber == itemJ.BlockNumber { - return itemI.TransactionIndex < itemJ.TransactionIndex - } - return itemI.BlockNumber < itemJ.BlockNumber - }) - - return items, nil -} From d98d412e758a67bb228c8bc65b26401297444e5d Mon Sep 17 00:00:00 2001 From: tjayrush Date: Fri, 1 Dec 2023 02:43:36 -0500 Subject: [PATCH 15/25] sliceOfMaps method for chifra export --statements --- .../internal/export/handle_statements.go | 128 ++++++++++++++++- .../internal/export/iterate_statements.go | 132 ------------------ 2 files changed, 121 insertions(+), 139 deletions(-) delete mode 100644 src/apps/chifra/internal/export/iterate_statements.go diff --git a/src/apps/chifra/internal/export/handle_statements.go b/src/apps/chifra/internal/export/handle_statements.go index 76a8c368d3..387862f66b 100644 --- a/src/apps/chifra/internal/export/handle_statements.go +++ b/src/apps/chifra/internal/export/handle_statements.go @@ -6,19 +6,22 @@ package exportPkg import ( "context" + "fmt" + "sort" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/articulate" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/base" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/filter" + "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/ledger" + "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/logger" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/monitor" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/names" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/output" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" + "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/utils" ) func (opts *ExportOptions) HandleStatements(monitorArray []monitor.Monitor) error { chain := opts.Globals.Chain - abiCache := articulate.NewAbiCache(opts.Conn, opts.Articulate) testMode := opts.Globals.TestMode filter := filter.NewFilter( opts.Reversed, @@ -28,16 +31,127 @@ func (opts *ExportOptions) HandleStatements(monitorArray []monitor.Monitor) erro base.RecordRange{First: opts.FirstRecord, Last: opts.GetMax()}, ) - ctx := context.Background() + ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawStatement], errorChan chan error) { for _, mon := range monitorArray { - if statements, err := opts.readStatements(monitorArray, &mon, filter, errorChan, abiCache); err != nil { + if sliceOfMaps, cnt, err := monitor.SliceOfMaps_AsMaps[types.SimpleTransaction](&mon, filter); err != nil { errorChan <- err + cancel() + + } else if opts.NoZero && cnt == 0 { + errorChan <- fmt.Errorf("no appearances found for %s", mon.Address.Hex()) + continue + } else { - for _, statement := range statements { - statement := statement - modelChan <- statement + bar := logger.NewBar(logger.BarOptions{ + Prefix: mon.Address.Hex(), + Enabled: !testMode && !utils.IsTerminal(), + Total: int64(cnt), + }) + + for _, thisMap := range sliceOfMaps { + thisMap := thisMap + for app := range thisMap { + thisMap[app] = new(types.SimpleTransaction) + } + + iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { + if tx, err := opts.Conn.GetTransactionByAppearance(&app, false); err != nil { + return err + } else { + passes, _ := filter.ApplyTxFilters(tx) + if passes { + *value = *tx + } + if bar != nil { + bar.Tick() + } + return nil + } + } + + // Set up and interate over the map calling iterFunc for each appearance + iterCtx, iterCancel := context.WithCancel(context.Background()) + defer iterCancel() + errChan := make(chan error) + go utils.IterateOverMap(iterCtx, errChan, thisMap, iterFunc) + if stepErr := <-errChan; stepErr != nil { + errorChan <- stepErr + iterCancel() + return + } + + txArray := make([]*types.SimpleTransaction, 0, len(thisMap)) + for _, tx := range thisMap { + txArray = append(txArray, tx) + } + + sort.Slice(txArray, func(i, j int) bool { + if txArray[i].BlockNumber == txArray[j].BlockNumber { + return txArray[i].TransactionIndex < txArray[j].TransactionIndex + } + return txArray[i].BlockNumber < txArray[j].BlockNumber + }) + + // Sort the items back into an ordered array by block number + items := make([]*types.SimpleStatement, 0, len(thisMap)) + + chain := opts.Globals.Chain + testMode := opts.Globals.TestMode + ledgers := ledger.NewLedger( + opts.Conn, + mon.Address, + opts.FirstBlock, + opts.LastBlock, + opts.Globals.Ether, + testMode, + opts.NoZero, + opts.Traces, + &opts.Asset, + ) + + apps := make([]types.SimpleAppearance, 0, len(thisMap)) + for _, tx := range txArray { + apps = append(apps, types.SimpleAppearance{ + BlockNumber: uint32(tx.BlockNumber), + TransactionIndex: uint32(tx.TransactionIndex), + }) + } + _ = ledgers.SetContexts(chain, apps, filter.GetOuterBounds()) + + // we need them sorted for the following to work + for _, tx := range txArray { + ledgers.Tx = tx // we need this below + if stmts := ledgers.GetStatementsFromTransaction(opts.Conn, filter, tx); len(stmts) > 0 { + for _, statement := range stmts { + statement := statement + items = append(items, statement) + } + } + } + + sort.Slice(items, func(i, j int) bool { + if opts.Reversed { + i, j = j, i + } + itemI := items[i] + itemJ := items[j] + if itemI.BlockNumber == itemJ.BlockNumber { + if itemI.TransactionIndex == itemJ.TransactionIndex { + return itemI.LogIndex < itemJ.LogIndex + } + return itemI.TransactionIndex < itemJ.TransactionIndex + } + return itemI.BlockNumber < itemJ.BlockNumber + }) + + for _, statement := range items { + statement := statement + modelChan <- statement + } } + + bar.Finish(true) } } } diff --git a/src/apps/chifra/internal/export/iterate_statements.go b/src/apps/chifra/internal/export/iterate_statements.go deleted file mode 100644 index 33fb75f907..0000000000 --- a/src/apps/chifra/internal/export/iterate_statements.go +++ /dev/null @@ -1,132 +0,0 @@ -package exportPkg - -import ( - "context" - "fmt" - "sort" - - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/articulate" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/filter" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/ledger" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/logger" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/monitor" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" - "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/utils" -) - -func (opts *ExportOptions) readStatements( - monitorArray []monitor.Monitor, - mon *monitor.Monitor, - filter *filter.AppearanceFilter, - errorChan chan error, - abiCache *articulate.AbiCache, -) ([]*types.SimpleStatement, error) { - var cnt int - var err error - var appMap map[types.SimpleAppearance]*types.SimpleTransaction - if appMap, cnt, err = monitor.AsMap[types.SimpleTransaction](mon, filter); err != nil { - errorChan <- err - return nil, err - } else if opts.NoZero && cnt == 0 { - errorChan <- fmt.Errorf("no appearances found for %s", mon.Address.Hex()) - return nil, nil - } - - bar := logger.NewBar(logger.BarOptions{ - Prefix: mon.Address.Hex(), - Enabled: !opts.Globals.TestMode, - Total: mon.Count(), - }) - - iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { - if tx, err := opts.Conn.GetTransactionByAppearance(&app, false); err != nil { - return err - } else { - passes, _ := filter.ApplyTxFilters(tx) - if passes { - *value = *tx - } - if bar != nil { - bar.Tick() - } - return nil - } - } - - // Set up and interate over the map calling iterFunc for each appearance - iterCtx, iterCancel := context.WithCancel(context.Background()) - defer iterCancel() - errChan := make(chan error) - go utils.IterateOverMap(iterCtx, errChan, appMap, iterFunc) - if stepErr := <-errChan; stepErr != nil { - errorChan <- stepErr - return nil, stepErr - } - - txArray := make([]*types.SimpleTransaction, 0, len(appMap)) - for _, tx := range appMap { - txArray = append(txArray, tx) - } - - sort.Slice(txArray, func(i, j int) bool { - if txArray[i].BlockNumber == txArray[j].BlockNumber { - return txArray[i].TransactionIndex < txArray[j].TransactionIndex - } - return txArray[i].BlockNumber < txArray[j].BlockNumber - }) - - // Sort the items back into an ordered array by block number - items := make([]*types.SimpleStatement, 0, len(appMap)) - - chain := opts.Globals.Chain - testMode := opts.Globals.TestMode - ledgers := ledger.NewLedger( - opts.Conn, - mon.Address, - opts.FirstBlock, - opts.LastBlock, - opts.Globals.Ether, - testMode, - opts.NoZero, - opts.Traces, - &opts.Asset, - ) - - apps := make([]types.SimpleAppearance, 0, len(appMap)) - for _, tx := range txArray { - apps = append(apps, types.SimpleAppearance{ - BlockNumber: uint32(tx.BlockNumber), - TransactionIndex: uint32(tx.TransactionIndex), - }) - } - _ = ledgers.SetContexts(chain, apps, filter.GetOuterBounds()) - - // we need them sorted for the following to work - for _, tx := range txArray { - ledgers.Tx = tx // we need this below - if stmts := ledgers.GetStatementsFromTransaction(opts.Conn, filter, tx); len(stmts) > 0 { - for _, statement := range stmts { - statement := statement - items = append(items, statement) - } - } - } - - sort.Slice(items, func(i, j int) bool { - if opts.Reversed { - i, j = j, i - } - itemI := items[i] - itemJ := items[j] - if itemI.BlockNumber == itemJ.BlockNumber { - if itemI.TransactionIndex == itemJ.TransactionIndex { - return itemI.LogIndex < itemJ.LogIndex - } - return itemI.TransactionIndex < itemJ.TransactionIndex - } - return itemI.BlockNumber < itemJ.BlockNumber - }) - - // Return the array of items - return items, nil -} From 03f38936d67988461383f2429c03182d96447654 Mon Sep 17 00:00:00 2001 From: tjayrush Date: Fri, 1 Dec 2023 03:09:01 -0500 Subject: [PATCH 16/25] sliceOfMaps method cleanup --- .../chifra/internal/blocks/handle_hashes.go | 2 +- .../chifra/internal/blocks/handle_logs.go | 2 +- .../chifra/internal/blocks/handle_show.go | 2 +- .../chifra/internal/blocks/handle_uncles.go | 2 +- .../chifra/internal/blocks/handle_uniq.go | 2 +- .../internal/blocks/handle_withdrawals.go | 2 +- .../chifra/internal/export/handle_balances.go | 6 ++--- .../chifra/internal/export/handle_logs.go | 4 +-- .../internal/export/handle_neighbors.go | 6 ++--- .../chifra/internal/export/handle_receipts.go | 6 ++--- .../chifra/internal/export/handle_show.go | 4 +-- .../internal/export/handle_statements.go | 4 +-- .../chifra/internal/export/handle_traces.go | 2 +- .../internal/export/handle_withdrawals.go | 8 +++--- src/apps/chifra/internal/logs/handle_show.go | 2 +- .../chifra/internal/receipts/handle_show.go | 2 +- src/apps/chifra/internal/state/handle_call.go | 2 +- .../chifra/internal/traces/handle_counts.go | 2 +- .../chifra/internal/traces/handle_filter.go | 2 +- .../chifra/internal/traces/handle_show.go | 2 +- .../internal/transactions/handle_logs.go | 2 +- .../internal/transactions/handle_show.go | 2 +- src/apps/chifra/pkg/identifiers/app_map.go | 2 +- src/apps/chifra/pkg/monitor/monitor_read.go | 25 +------------------ src/examples/findFirst/findFirst.go | 2 +- 25 files changed, 36 insertions(+), 61 deletions(-) diff --git a/src/apps/chifra/internal/blocks/handle_hashes.go b/src/apps/chifra/internal/blocks/handle_hashes.go index c19ce81ebf..39a8b6be89 100644 --- a/src/apps/chifra/internal/blocks/handle_hashes.go +++ b/src/apps/chifra/internal/blocks/handle_hashes.go @@ -25,7 +25,7 @@ func (opts *BlocksOptions) HandleHashes() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawBlock], errorChan chan error) { - if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleBlock[string]](chain, opts.BlockIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.AsSliceOfMaps[types.SimpleBlock[string]](chain, opts.BlockIds); err != nil { errorChan <- err cancel() diff --git a/src/apps/chifra/internal/blocks/handle_logs.go b/src/apps/chifra/internal/blocks/handle_logs.go index 45cd646188..9239b1d638 100644 --- a/src/apps/chifra/internal/blocks/handle_logs.go +++ b/src/apps/chifra/internal/blocks/handle_logs.go @@ -39,7 +39,7 @@ func (opts *BlocksOptions) HandleLogs() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawLog], errorChan chan error) { - if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleTransaction](chain, opts.BlockIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.AsSliceOfMaps[types.SimpleTransaction](chain, opts.BlockIds); err != nil { errorChan <- err cancel() diff --git a/src/apps/chifra/internal/blocks/handle_show.go b/src/apps/chifra/internal/blocks/handle_show.go index 1c0dbaed9f..808c960694 100644 --- a/src/apps/chifra/internal/blocks/handle_show.go +++ b/src/apps/chifra/internal/blocks/handle_show.go @@ -24,7 +24,7 @@ func (opts *BlocksOptions) HandleShow() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawBlock], errorChan chan error) { - if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleBlock[types.SimpleTransaction]](chain, opts.BlockIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.AsSliceOfMaps[types.SimpleBlock[types.SimpleTransaction]](chain, opts.BlockIds); err != nil { errorChan <- err cancel() diff --git a/src/apps/chifra/internal/blocks/handle_uncles.go b/src/apps/chifra/internal/blocks/handle_uncles.go index 2daea9ca1a..78414444ec 100644 --- a/src/apps/chifra/internal/blocks/handle_uncles.go +++ b/src/apps/chifra/internal/blocks/handle_uncles.go @@ -25,7 +25,7 @@ func (opts *BlocksOptions) HandleUncles() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawBlock], errorChan chan error) { - if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleBlock[string]](chain, opts.BlockIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.AsSliceOfMaps[types.SimpleBlock[string]](chain, opts.BlockIds); err != nil { errorChan <- err cancel() diff --git a/src/apps/chifra/internal/blocks/handle_uniq.go b/src/apps/chifra/internal/blocks/handle_uniq.go index 7eb204ae5e..644f7fe637 100644 --- a/src/apps/chifra/internal/blocks/handle_uniq.go +++ b/src/apps/chifra/internal/blocks/handle_uniq.go @@ -26,7 +26,7 @@ func (opts *BlocksOptions) HandleUniq() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawAppearance], errorChan chan error) { - if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleAppearance](chain, opts.BlockIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.AsSliceOfMaps[types.SimpleAppearance](chain, opts.BlockIds); err != nil { errorChan <- err cancel() diff --git a/src/apps/chifra/internal/blocks/handle_withdrawals.go b/src/apps/chifra/internal/blocks/handle_withdrawals.go index e1d0e5797a..3478ba2b97 100644 --- a/src/apps/chifra/internal/blocks/handle_withdrawals.go +++ b/src/apps/chifra/internal/blocks/handle_withdrawals.go @@ -23,7 +23,7 @@ func (opts *BlocksOptions) HandleWithdrawals() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawWithdrawal], errorChan chan error) { - if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleBlock[string]](chain, opts.BlockIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.AsSliceOfMaps[types.SimpleBlock[string]](chain, opts.BlockIds); err != nil { errorChan <- err cancel() diff --git a/src/apps/chifra/internal/export/handle_balances.go b/src/apps/chifra/internal/export/handle_balances.go index dde05f1dd5..6940c86fb4 100644 --- a/src/apps/chifra/internal/export/handle_balances.go +++ b/src/apps/chifra/internal/export/handle_balances.go @@ -53,19 +53,19 @@ func (opts *ExportOptions) HandleBalances(monitorArray []monitor.Monitor) error } for _, mon := range monitorArray { - if sliceOfMaps, cnt, err := monitor.SliceOfMaps_AsMaps[types.SimpleToken](&mon, filter); err != nil { + if sliceOfMaps, cnt, err := monitor.AsSliceOfMaps[types.SimpleToken](&mon, filter); err != nil { errorChan <- err cancel() } else if cnt == 0 { errorChan <- fmt.Errorf("no appearances found for %s", mon.Address.Hex()) - cancel() + continue } else { bar := logger.NewBar(logger.BarOptions{ Prefix: mon.Address.Hex(), Enabled: !testMode && !utils.IsTerminal(), - Total: mon.Count(), + Total: int64(cnt), }) for _, thisMap := range sliceOfMaps { diff --git a/src/apps/chifra/internal/export/handle_logs.go b/src/apps/chifra/internal/export/handle_logs.go index 6ff5c6013f..6d1a58e992 100644 --- a/src/apps/chifra/internal/export/handle_logs.go +++ b/src/apps/chifra/internal/export/handle_logs.go @@ -40,13 +40,13 @@ func (opts *ExportOptions) HandleLogs(monitorArray []monitor.Monitor) error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawLog], errorChan chan error) { for _, mon := range monitorArray { - if sliceOfMaps, cnt, err := monitor.SliceOfMaps_AsMaps[types.SimpleTransaction](&mon, filter); err != nil { + if sliceOfMaps, cnt, err := monitor.AsSliceOfMaps[types.SimpleTransaction](&mon, filter); err != nil { errorChan <- err cancel() } else if cnt == 0 { errorChan <- fmt.Errorf("no appearances found for %s", mon.Address.Hex()) - cancel() + continue } else { bar := logger.NewBar(logger.BarOptions{ diff --git a/src/apps/chifra/internal/export/handle_neighbors.go b/src/apps/chifra/internal/export/handle_neighbors.go index 4ba2888bf6..639f744e96 100644 --- a/src/apps/chifra/internal/export/handle_neighbors.go +++ b/src/apps/chifra/internal/export/handle_neighbors.go @@ -32,19 +32,19 @@ func (opts *ExportOptions) HandleNeighbors(monitorArray []monitor.Monitor) error ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawAppearance], errorChan chan error) { for _, mon := range monitorArray { - if sliceOfMaps, cnt, err := monitor.SliceOfMaps_AsMaps[bool](&mon, filter); err != nil { + if sliceOfMaps, cnt, err := monitor.AsSliceOfMaps[bool](&mon, filter); err != nil { errorChan <- err cancel() } else if cnt == 0 { errorChan <- fmt.Errorf("no appearances found for %s", mon.Address.Hex()) - cancel() + continue } else { bar := logger.NewBar(logger.BarOptions{ Prefix: mon.Address.Hex(), Enabled: !testMode && !utils.IsTerminal(), - Total: mon.Count(), + Total: int64(cnt), }) for _, thisMap := range sliceOfMaps { diff --git a/src/apps/chifra/internal/export/handle_receipts.go b/src/apps/chifra/internal/export/handle_receipts.go index 5f69c0c258..5760491512 100644 --- a/src/apps/chifra/internal/export/handle_receipts.go +++ b/src/apps/chifra/internal/export/handle_receipts.go @@ -40,13 +40,13 @@ func (opts *ExportOptions) HandleReceipts(monitorArray []monitor.Monitor) error ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawReceipt], errorChan chan error) { for _, mon := range monitorArray { - if sliceOfMaps, cnt, err := monitor.SliceOfMaps_AsMaps[types.SimpleTransaction](&mon, filter); err != nil { + if sliceOfMaps, cnt, err := monitor.AsSliceOfMaps[types.SimpleTransaction](&mon, filter); err != nil { errorChan <- err cancel() - } else if opts.NoZero && cnt == 0 { + } else if cnt == 0 { errorChan <- fmt.Errorf("no appearances found for %s", mon.Address.Hex()) - cancel() + continue } else { bar := logger.NewBar(logger.BarOptions{ diff --git a/src/apps/chifra/internal/export/handle_show.go b/src/apps/chifra/internal/export/handle_show.go index 443005a773..972fd17a22 100644 --- a/src/apps/chifra/internal/export/handle_show.go +++ b/src/apps/chifra/internal/export/handle_show.go @@ -35,7 +35,7 @@ func (opts *ExportOptions) HandleShow(monitorArray []monitor.Monitor) error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawTransaction], errorChan chan error) { for _, mon := range monitorArray { - if sliceOfMaps, cnt, err := monitor.SliceOfMaps_AsMaps[types.SimpleTransaction](&mon, filter); err != nil { + if sliceOfMaps, cnt, err := monitor.AsSliceOfMaps[types.SimpleTransaction](&mon, filter); err != nil { errorChan <- err cancel() @@ -47,7 +47,7 @@ func (opts *ExportOptions) HandleShow(monitorArray []monitor.Monitor) error { bar := logger.NewBar(logger.BarOptions{ Prefix: mon.Address.Hex(), Enabled: !testMode && !utils.IsTerminal(), - Total: mon.Count(), + Total: int64(cnt), }) for _, thisMap := range sliceOfMaps { diff --git a/src/apps/chifra/internal/export/handle_statements.go b/src/apps/chifra/internal/export/handle_statements.go index 387862f66b..6cd8b9413d 100644 --- a/src/apps/chifra/internal/export/handle_statements.go +++ b/src/apps/chifra/internal/export/handle_statements.go @@ -34,11 +34,11 @@ func (opts *ExportOptions) HandleStatements(monitorArray []monitor.Monitor) erro ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawStatement], errorChan chan error) { for _, mon := range monitorArray { - if sliceOfMaps, cnt, err := monitor.SliceOfMaps_AsMaps[types.SimpleTransaction](&mon, filter); err != nil { + if sliceOfMaps, cnt, err := monitor.AsSliceOfMaps[types.SimpleTransaction](&mon, filter); err != nil { errorChan <- err cancel() - } else if opts.NoZero && cnt == 0 { + } else if cnt == 0 { errorChan <- fmt.Errorf("no appearances found for %s", mon.Address.Hex()) continue diff --git a/src/apps/chifra/internal/export/handle_traces.go b/src/apps/chifra/internal/export/handle_traces.go index dfcc847b01..929be258fe 100644 --- a/src/apps/chifra/internal/export/handle_traces.go +++ b/src/apps/chifra/internal/export/handle_traces.go @@ -35,7 +35,7 @@ func (opts *ExportOptions) HandleTraces(monitorArray []monitor.Monitor) error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawTrace], errorChan chan error) { for _, mon := range monitorArray { - if sliceOfMaps, cnt, err := monitor.SliceOfMaps_AsMaps[types.SimpleTransaction](&mon, filter); err != nil { + if sliceOfMaps, cnt, err := monitor.AsSliceOfMaps[types.SimpleTransaction](&mon, filter); err != nil { errorChan <- err cancel() diff --git a/src/apps/chifra/internal/export/handle_withdrawals.go b/src/apps/chifra/internal/export/handle_withdrawals.go index 22c38b7f2b..b9363cac90 100644 --- a/src/apps/chifra/internal/export/handle_withdrawals.go +++ b/src/apps/chifra/internal/export/handle_withdrawals.go @@ -22,6 +22,7 @@ import ( func (opts *ExportOptions) HandleWithdrawals(monitorArray []monitor.Monitor) error { chain := opts.Globals.Chain testMode := opts.Globals.TestMode + nErrors := 0 first := utils.Max(base.KnownBlock(chain, "shanghai"), opts.FirstBlock) filter := filter.NewFilter( opts.Reversed, @@ -34,10 +35,7 @@ func (opts *ExportOptions) HandleWithdrawals(monitorArray []monitor.Monitor) err ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawWithdrawal], errorChan chan error) { for _, mon := range monitorArray { - testMode := opts.Globals.TestMode - nErrors := 0 - - if sliceOfMaps, cnt, err := monitor.SliceOfMaps_AsMaps[types.SimpleBlock[string]](&mon, filter); err != nil { + if sliceOfMaps, cnt, err := monitor.AsSliceOfMaps[types.SimpleBlock[string]](&mon, filter); err != nil { errorChan <- err cancel() @@ -48,7 +46,7 @@ func (opts *ExportOptions) HandleWithdrawals(monitorArray []monitor.Monitor) err } else { bar := logger.NewBar(logger.BarOptions{ Prefix: mon.Address.Hex(), - Enabled: !testMode, + Enabled: !testMode && !utils.IsTerminal(), Total: int64(cnt), }) diff --git a/src/apps/chifra/internal/logs/handle_show.go b/src/apps/chifra/internal/logs/handle_show.go index ca04fff846..f251eeac6c 100644 --- a/src/apps/chifra/internal/logs/handle_show.go +++ b/src/apps/chifra/internal/logs/handle_show.go @@ -21,7 +21,7 @@ func (opts *LogsOptions) HandleShow() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawLog], errorChan chan error) { - if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.AsSliceOfMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { errorChan <- err cancel() diff --git a/src/apps/chifra/internal/receipts/handle_show.go b/src/apps/chifra/internal/receipts/handle_show.go index 92b21107d5..2e8bcf2b8b 100644 --- a/src/apps/chifra/internal/receipts/handle_show.go +++ b/src/apps/chifra/internal/receipts/handle_show.go @@ -21,7 +21,7 @@ func (opts *ReceiptsOptions) HandleShow() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawReceipt], errorChan chan error) { - if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.AsSliceOfMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { errorChan <- err cancel() diff --git a/src/apps/chifra/internal/state/handle_call.go b/src/apps/chifra/internal/state/handle_call.go index 3b5265358b..f0142e5bc2 100644 --- a/src/apps/chifra/internal/state/handle_call.go +++ b/src/apps/chifra/internal/state/handle_call.go @@ -31,7 +31,7 @@ func (opts *StateOptions) HandleCall() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawResult], errorChan chan error) { - if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleResult](chain, opts.BlockIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.AsSliceOfMaps[types.SimpleResult](chain, opts.BlockIds); err != nil { errorChan <- err cancel() diff --git a/src/apps/chifra/internal/traces/handle_counts.go b/src/apps/chifra/internal/traces/handle_counts.go index dd9effe5ba..fa88b608d5 100644 --- a/src/apps/chifra/internal/traces/handle_counts.go +++ b/src/apps/chifra/internal/traces/handle_counts.go @@ -23,7 +23,7 @@ func (opts *TracesOptions) HandleCounts() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawModeler], errorChan chan error) { - if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.AsSliceOfMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { errorChan <- err cancel() diff --git a/src/apps/chifra/internal/traces/handle_filter.go b/src/apps/chifra/internal/traces/handle_filter.go index a9415da298..5325613a78 100644 --- a/src/apps/chifra/internal/traces/handle_filter.go +++ b/src/apps/chifra/internal/traces/handle_filter.go @@ -34,7 +34,7 @@ func (opts *TracesOptions) HandleFilter() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawTrace], errorChan chan error) { - if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.AsSliceOfMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { errorChan <- err cancel() diff --git a/src/apps/chifra/internal/traces/handle_show.go b/src/apps/chifra/internal/traces/handle_show.go index 18bb21dc65..de0d1e78cc 100644 --- a/src/apps/chifra/internal/traces/handle_show.go +++ b/src/apps/chifra/internal/traces/handle_show.go @@ -25,7 +25,7 @@ func (opts *TracesOptions) HandleShow() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawTrace], errorChan chan error) { - if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.AsSliceOfMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { errorChan <- err cancel() diff --git a/src/apps/chifra/internal/transactions/handle_logs.go b/src/apps/chifra/internal/transactions/handle_logs.go index e5f0a636f9..dd30b054c5 100644 --- a/src/apps/chifra/internal/transactions/handle_logs.go +++ b/src/apps/chifra/internal/transactions/handle_logs.go @@ -39,7 +39,7 @@ func (opts *TransactionsOptions) HandleLogs() error { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawLog], errorChan chan error) { - if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.AsSliceOfMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { errorChan <- err cancel() diff --git a/src/apps/chifra/internal/transactions/handle_show.go b/src/apps/chifra/internal/transactions/handle_show.go index 102bcee75a..4d069a1ad0 100644 --- a/src/apps/chifra/internal/transactions/handle_show.go +++ b/src/apps/chifra/internal/transactions/handle_show.go @@ -21,7 +21,7 @@ func (opts *TransactionsOptions) HandleShow() (err error) { ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawTransaction], errorChan chan error) { - if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.AsSliceOfMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { errorChan <- err cancel() diff --git a/src/apps/chifra/pkg/identifiers/app_map.go b/src/apps/chifra/pkg/identifiers/app_map.go index 6d58d5714e..9c1040bfb6 100644 --- a/src/apps/chifra/pkg/identifiers/app_map.go +++ b/src/apps/chifra/pkg/identifiers/app_map.go @@ -16,7 +16,7 @@ type mappedType interface { types.SimpleResult } -func SliceOfMaps_AsMaps[T mappedType](chain string, ids []Identifier) ([]map[types.SimpleAppearance]*T, int, error) { +func AsSliceOfMaps[T mappedType](chain string, ids []Identifier) ([]map[types.SimpleAppearance]*T, int, error) { ret := make([]types.SimpleAppearance, 0, 100 /* good guess */) for index, rng := range ids { if rawIds, err := rng.ResolveTxs(chain); err != nil { diff --git a/src/apps/chifra/pkg/monitor/monitor_read.go b/src/apps/chifra/pkg/monitor/monitor_read.go index 3917e9d27f..0699addb1a 100644 --- a/src/apps/chifra/pkg/monitor/monitor_read.go +++ b/src/apps/chifra/pkg/monitor/monitor_read.go @@ -64,30 +64,7 @@ func (mon *Monitor) ReadAppearanceAt(idx int64, app *index.AppearanceRecord) (er return } -// AsMap reads all appearances from the monitor and returns a map of the appearances to the given type. -func AsMap[T any](mon *Monitor, filter *filter.AppearanceFilter) (map[types.SimpleAppearance]*T, int, error) { - if apps, cnt, err := mon.ReadAndFilterAppearances(filter); err != nil { - return nil, 0, err - } else if cnt == 0 { - return nil, 0, nil - } else { - m := make(map[types.SimpleAppearance]*T, mon.Count()) - for _, app := range apps { - if filter.BlocksOnly { - app = types.SimpleAppearance{ - BlockNumber: app.BlockNumber, - TransactionIndex: uint32(^uint32(0)), - } - m[app] = new(T) - } else { - m[app] = new(T) - } - } - return m, len(m), nil - } -} - -func SliceOfMaps_AsMaps[T any](mon *Monitor, filter *filter.AppearanceFilter) ([]map[types.SimpleAppearance]*T, int, error) { +func AsSliceOfMaps[T any](mon *Monitor, filter *filter.AppearanceFilter) ([]map[types.SimpleAppearance]*T, int, error) { if ret, cnt, err := mon.ReadAndFilterAppearances(filter); err != nil { return nil, 0, err } else if cnt == 0 { diff --git a/src/examples/findFirst/findFirst.go b/src/examples/findFirst/findFirst.go index 77bf65ad4b..3428689424 100644 --- a/src/examples/findFirst/findFirst.go +++ b/src/examples/findFirst/findFirst.go @@ -62,7 +62,7 @@ func fastWay(conn *rpc.Connection) { fmt.Println(err) } - if sliceOfMaps, cnt, err := identifiers.SliceOfMaps_AsMaps[types.SimpleBlock[string]](chain, BlockIds); err != nil { + if sliceOfMaps, cnt, err := identifiers.AsSliceOfMaps[types.SimpleBlock[string]](chain, BlockIds); err != nil { fmt.Println(err) } else if cnt != 0 { From 8a41328f2e234005b3ea508b6b70ec2fa317e771 Mon Sep 17 00:00:00 2001 From: tjayrush Date: Fri, 1 Dec 2023 03:14:13 -0500 Subject: [PATCH 17/25] Fixes tests --- src/dev_tools/testRunner/testCases/apps/acctExport.csv | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/dev_tools/testRunner/testCases/apps/acctExport.csv b/src/dev_tools/testRunner/testCases/apps/acctExport.csv index 17dc5ee129..eb27e298e2 100644 --- a/src/dev_tools/testRunner/testCases/apps/acctExport.csv +++ b/src/dev_tools/testRunner/testCases/apps/acctExport.csv @@ -257,7 +257,7 @@ acct ,both ,fast ,export ,apps/acctExport ,accounting_to_cache ,y on ,both ,fast ,export ,apps/acctExport ,statement_filtered ,y ,addrs = 0xf503017d7baf7fbc0fff7492b751025c6a78179b & accounting & statements & first_block = 8860513 & last_block = 8860531 & ether & asset = 0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359 & fmt = json slow ,both ,fast ,export ,apps/acctExport ,failed_statement_2572_2 ,y ,addrs = 0x65b0d5e1dc0dee0704f53f660aa865c72e986fc7 & accounting & statements & ether & fmt = json & first_block = 11670418 & last_block = 11670420 & asset = 0xc713e5e149d5d0715dcd1c156a020976e7e56b88 & max_records = 40 slow ,both ,fast ,export ,apps/acctExport ,statements_wei_2_3 ,y ,addrs = 0x05a56e2d52c817161883f50c441c3228cfe54d9f & accounting & statements & fmt = json & first_block = 15700073 & last_block = 15700075 -on ,both ,fast ,export ,apps/acctExport ,failed_statement_2572_1 ,y ,addrs = 0x054993ab0f2b1acc0fdc65405ee203b4271bebe6 & accounting & statements & ether & fmt = json & last_block = 15549163 & asset = 0xf5b2c59f6db42ffcdfc1625999c81fdf17953384 & max_records = 40 +local ,both ,fast ,export ,apps/acctExport ,failed_statement_2572_1 ,y ,addrs = 0x054993ab0f2b1acc0fdc65405ee203b4271bebe6 & accounting & statements & ether & fmt = json & last_block = 15549163 & asset = 0xf5b2c59f6db42ffcdfc1625999c81fdf17953384 & max_records = 40 # still broken on ,both ,fast ,export ,apps/acctExport ,accounting_wei_1 ,y ,addrs = 0x001d14804b399c6ef80e64576f657660804fec0b & max_records = 3 & accounting & fmt = json @@ -265,7 +265,7 @@ acct ,both ,fast ,export ,apps/acctExport ,accounting_intra_tokens ,y acct ,both ,fast ,export ,apps/acctExport ,statements_wei_2_1 ,y ,addrs = 0x05a56e2d52c817161883f50c441c3228cfe54d9f & accounting & statements & fmt = json & first_record = 0 & max_records = 15 # Inter-block token transfers don't reconcile -on ,both ,fast ,export ,apps/acctExport ,statements_wei_2_2 ,y ,addrs = 0x05a56e2d52c817161883f50c441c3228cfe54d9f & accounting & statements & fmt = json & first_record = 250 & max_records = 15 +acct ,both ,fast ,export ,apps/acctExport ,statements_wei_2_2 ,y ,addrs = 0x05a56e2d52c817161883f50c441c3228cfe54d9f & accounting & statements & fmt = json & first_record = 250 & max_records = 15 acct ,both ,fast ,export ,apps/acctExport ,statement_token_ibt ,y ,addrs = 0xec3ef464bf821c3b10a18adf9ac7177a628e87cc & accounting & statements & first_block = 7005600 & last_block = 7005780 & ether & fmt = json acct ,both ,fast ,export ,apps/acctExport ,statement_token_ibt_2 ,y ,addrs = 0xf503017d7baf7fbc0fff7492b751025c6a78179b & accounting & statements & first_block = 12704456 & last_block = 12705893 & ether & fmt = json & max_records = 4000 From 2e51b8f2cf45db0d79f63dd3312d843398d68b02 Mon Sep 17 00:00:00 2001 From: tjayrush Date: Fri, 1 Dec 2023 08:36:42 -0500 Subject: [PATCH 18/25] Consistancy --- .../chifra/internal/blocks/handle_show.go | 6 ++++-- .../chifra/internal/blocks/handle_uncles.go | 21 +++++++++---------- .../internal/transactions/handle_show.go | 5 +++++ 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/apps/chifra/internal/blocks/handle_show.go b/src/apps/chifra/internal/blocks/handle_show.go index 808c960694..4fe164279d 100644 --- a/src/apps/chifra/internal/blocks/handle_show.go +++ b/src/apps/chifra/internal/blocks/handle_show.go @@ -7,6 +7,7 @@ package blocksPkg import ( "context" "errors" + "fmt" "sort" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/identifiers" @@ -29,7 +30,7 @@ func (opts *BlocksOptions) HandleShow() error { cancel() } else if cnt == 0 { - errorChan <- errors.New("no blocks found") + errorChan <- fmt.Errorf("no blocks found for the query") cancel() } else { @@ -45,7 +46,8 @@ func (opts *BlocksOptions) HandleShow() error { } iterFunc := func(app types.SimpleAppearance, value *types.SimpleBlock[types.SimpleTransaction]) error { - if block, err := opts.Conn.GetBlockBodyByNumber(uint64(app.BlockNumber)); err != nil { + bn := uint64(app.BlockNumber) + if block, err := opts.Conn.GetBlockBodyByNumber(bn); err != nil { errorChan <- err if errors.Is(err, ethereum.NotFound) { errorChan <- errors.New("uncles not found") diff --git a/src/apps/chifra/internal/blocks/handle_uncles.go b/src/apps/chifra/internal/blocks/handle_uncles.go index 78414444ec..50f7bdd39c 100644 --- a/src/apps/chifra/internal/blocks/handle_uncles.go +++ b/src/apps/chifra/internal/blocks/handle_uncles.go @@ -34,7 +34,6 @@ func (opts *BlocksOptions) HandleUncles() error { cancel() } else { - bar := logger.NewBar(logger.BarOptions{ Enabled: !testMode && !utils.IsTerminal(), Total: int64(cnt), @@ -46,10 +45,10 @@ func (opts *BlocksOptions) HandleUncles() error { thisMap[app] = new(types.SimpleBlock[string]) } - uncles := make([]types.SimpleBlock[types.SimpleTransaction], 0, len(thisMap)) + items := make([]types.SimpleBlock[types.SimpleTransaction], 0, len(thisMap)) iterFunc := func(app types.SimpleAppearance, value *types.SimpleBlock[string]) error { bn := uint64(app.BlockNumber) - if uncs, err := opts.Conn.GetUncleBodiesByNumber(bn); err != nil { + if uncles, err := opts.Conn.GetUncleBodiesByNumber(bn); err != nil { errorChan <- err if errors.Is(err, ethereum.NotFound) { errorChan <- errors.New("uncles not found") @@ -57,13 +56,13 @@ func (opts *BlocksOptions) HandleUncles() error { cancel() return nil } else { - for _, uncle := range uncs { + for _, uncle := range uncles { uncle := uncle - bar.Tick() if uncle.BlockNumber > 0 { - uncles = append(uncles, uncle) + items = append(items, uncle) } } + bar.Tick() } return nil } @@ -79,14 +78,14 @@ func (opts *BlocksOptions) HandleUncles() error { } } - sort.Slice(uncles, func(i, j int) bool { - if uncles[i].BlockNumber == uncles[j].BlockNumber { - return uncles[i].Hash.Hex() < uncles[j].Hash.Hex() + sort.Slice(items, func(i, j int) bool { + if items[i].BlockNumber == items[j].BlockNumber { + return items[i].Hash.Hex() < items[j].Hash.Hex() } - return uncles[i].BlockNumber < uncles[j].BlockNumber + return items[i].BlockNumber < items[j].BlockNumber }) - for _, item := range uncles { + for _, item := range items { item := item modelChan <- &item } diff --git a/src/apps/chifra/internal/transactions/handle_show.go b/src/apps/chifra/internal/transactions/handle_show.go index 4d069a1ad0..2709a58d15 100644 --- a/src/apps/chifra/internal/transactions/handle_show.go +++ b/src/apps/chifra/internal/transactions/handle_show.go @@ -1,3 +1,7 @@ +// Copyright 2021 The TrueBlocks Authors. All rights reserved. +// Use of this source code is governed by a license that can +// be found in the LICENSE file. + package transactionsPkg import ( @@ -79,6 +83,7 @@ func (opts *TransactionsOptions) HandleShow() (err error) { } return items[i].BlockNumber < items[j].BlockNumber }) + for _, item := range items { item := item if !item.BlockHash.IsZero() { From 7c38d86e45690739fac4f71f1de5414dd3b98b3f Mon Sep 17 00:00:00 2001 From: tjayrush Date: Fri, 1 Dec 2023 11:45:08 -0500 Subject: [PATCH 19/25] Bump --- src/apps/chifra/internal/logs/handle_show.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/apps/chifra/internal/logs/handle_show.go b/src/apps/chifra/internal/logs/handle_show.go index f251eeac6c..d537ecb015 100644 --- a/src/apps/chifra/internal/logs/handle_show.go +++ b/src/apps/chifra/internal/logs/handle_show.go @@ -1,3 +1,7 @@ +// Copyright 2021 The TrueBlocks Authors. All rights reserved. +// Use of this source code is governed by a license that can +// be found in the LICENSE file. + package logsPkg import ( From 411873559cfb84b75ada574a9b750d969fe2e5b1 Mon Sep 17 00:00:00 2001 From: tjayrush Date: Fri, 1 Dec 2023 12:34:10 -0500 Subject: [PATCH 20/25] Make block queries a tiny bit more consistent --- src/apps/chifra/internal/blocks/handle_hashes.go | 4 ++-- src/apps/chifra/internal/blocks/handle_logs.go | 6 ++---- src/apps/chifra/internal/blocks/handle_show.go | 4 ++-- src/apps/chifra/internal/blocks/handle_uncles.go | 8 +++----- src/apps/chifra/internal/blocks/handle_withdrawals.go | 4 ++-- 5 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/apps/chifra/internal/blocks/handle_hashes.go b/src/apps/chifra/internal/blocks/handle_hashes.go index 39a8b6be89..7d01c9566f 100644 --- a/src/apps/chifra/internal/blocks/handle_hashes.go +++ b/src/apps/chifra/internal/blocks/handle_hashes.go @@ -45,6 +45,7 @@ func (opts *BlocksOptions) HandleHashes() error { thisMap[app] = new(types.SimpleBlock[string]) } + items := make([]*types.SimpleBlock[string], 0, len(thisMap)) iterFunc := func(app types.SimpleAppearance, value *types.SimpleBlock[string]) error { bn := uint64(app.BlockNumber) if block, err := opts.Conn.GetBlockHeaderByNumber(bn); err != nil { @@ -55,8 +56,8 @@ func (opts *BlocksOptions) HandleHashes() error { cancel() return nil } else { - bar.Tick() *value = block + bar.Tick() } return nil } @@ -72,7 +73,6 @@ func (opts *BlocksOptions) HandleHashes() error { } } - items := make([]*types.SimpleBlock[string], 0, len(thisMap)) for _, item := range thisMap { items = append(items, item) } diff --git a/src/apps/chifra/internal/blocks/handle_logs.go b/src/apps/chifra/internal/blocks/handle_logs.go index 9239b1d638..bbbc6849e3 100644 --- a/src/apps/chifra/internal/blocks/handle_logs.go +++ b/src/apps/chifra/internal/blocks/handle_logs.go @@ -84,10 +84,10 @@ func (opts *BlocksOptions) HandleLogs() error { } l = append(l, logs[index]) } - bar.Tick() value.Receipt.Logs = append(value.Receipt.Logs, l...) + bar.Tick() + return nil } - return nil } iterErrorChan := make(chan error) @@ -97,8 +97,6 @@ func (opts *BlocksOptions) HandleLogs() error { for err := range iterErrorChan { if !testMode || nErrors == 0 { errorChan <- err - // Reporting more than one error causes tests to fail because they - // appear concurrently so sort differently nErrors++ } } diff --git a/src/apps/chifra/internal/blocks/handle_show.go b/src/apps/chifra/internal/blocks/handle_show.go index 4fe164279d..558e8c3329 100644 --- a/src/apps/chifra/internal/blocks/handle_show.go +++ b/src/apps/chifra/internal/blocks/handle_show.go @@ -45,6 +45,7 @@ func (opts *BlocksOptions) HandleShow() error { thisMap[app] = new(types.SimpleBlock[types.SimpleTransaction]) } + items := make([]*types.SimpleBlock[types.SimpleTransaction], 0, len(thisMap)) iterFunc := func(app types.SimpleAppearance, value *types.SimpleBlock[types.SimpleTransaction]) error { bn := uint64(app.BlockNumber) if block, err := opts.Conn.GetBlockBodyByNumber(bn); err != nil { @@ -55,8 +56,8 @@ func (opts *BlocksOptions) HandleShow() error { cancel() return nil } else { - bar.Tick() *value = block + bar.Tick() } return nil } @@ -72,7 +73,6 @@ func (opts *BlocksOptions) HandleShow() error { } } - items := make([]*types.SimpleBlock[types.SimpleTransaction], 0, len(thisMap)) for _, item := range thisMap { items = append(items, item) } diff --git a/src/apps/chifra/internal/blocks/handle_uncles.go b/src/apps/chifra/internal/blocks/handle_uncles.go index 50f7bdd39c..423212ae43 100644 --- a/src/apps/chifra/internal/blocks/handle_uncles.go +++ b/src/apps/chifra/internal/blocks/handle_uncles.go @@ -45,7 +45,7 @@ func (opts *BlocksOptions) HandleUncles() error { thisMap[app] = new(types.SimpleBlock[string]) } - items := make([]types.SimpleBlock[types.SimpleTransaction], 0, len(thisMap)) + items := make([]*types.SimpleBlock[types.SimpleTransaction], 0, len(thisMap)) iterFunc := func(app types.SimpleAppearance, value *types.SimpleBlock[string]) error { bn := uint64(app.BlockNumber) if uncles, err := opts.Conn.GetUncleBodiesByNumber(bn); err != nil { @@ -58,9 +58,7 @@ func (opts *BlocksOptions) HandleUncles() error { } else { for _, uncle := range uncles { uncle := uncle - if uncle.BlockNumber > 0 { - items = append(items, uncle) - } + items = append(items, &uncle) } bar.Tick() } @@ -87,7 +85,7 @@ func (opts *BlocksOptions) HandleUncles() error { for _, item := range items { item := item - modelChan <- &item + modelChan <- item } } bar.Finish(true) diff --git a/src/apps/chifra/internal/blocks/handle_withdrawals.go b/src/apps/chifra/internal/blocks/handle_withdrawals.go index 3478ba2b97..48d2a70c13 100644 --- a/src/apps/chifra/internal/blocks/handle_withdrawals.go +++ b/src/apps/chifra/internal/blocks/handle_withdrawals.go @@ -43,6 +43,7 @@ func (opts *BlocksOptions) HandleWithdrawals() error { thisMap[app] = new(types.SimpleBlock[string]) } + items := make([]*types.SimpleWithdrawal, 0, len(thisMap)) iterFunc := func(app types.SimpleAppearance, value *types.SimpleBlock[string]) error { bn := uint64(app.BlockNumber) if block, err := opts.Conn.GetBlockHeaderByNumber(bn); err != nil { @@ -50,8 +51,8 @@ func (opts *BlocksOptions) HandleWithdrawals() error { cancel() return nil } else { - bar.Tick() *value = block + bar.Tick() } return nil } @@ -67,7 +68,6 @@ func (opts *BlocksOptions) HandleWithdrawals() error { } } - items := make([]*types.SimpleWithdrawal, 0, len(thisMap)) for _, item := range thisMap { for _, w := range item.Withdrawals { w := w From e8d039480377351cc61678050dfcf35eca3911ce Mon Sep 17 00:00:00 2001 From: tjayrush Date: Fri, 1 Dec 2023 12:34:44 -0500 Subject: [PATCH 21/25] Make transaction queries a tiny bit more consistent --- src/apps/chifra/internal/logs/handle_show.go | 8 ++++---- .../chifra/internal/receipts/handle_show.go | 12 ++++++++---- .../chifra/internal/traces/handle_counts.go | 17 ++++++++--------- .../chifra/internal/traces/handle_filter.go | 2 ++ src/apps/chifra/internal/traces/handle_show.go | 6 ++---- .../chifra/internal/transactions/handle_logs.go | 15 ++++++++------- .../chifra/internal/transactions/handle_show.go | 8 ++++---- 7 files changed, 36 insertions(+), 32 deletions(-) diff --git a/src/apps/chifra/internal/logs/handle_show.go b/src/apps/chifra/internal/logs/handle_show.go index d537ecb015..84c1e4c9b9 100644 --- a/src/apps/chifra/internal/logs/handle_show.go +++ b/src/apps/chifra/internal/logs/handle_show.go @@ -19,10 +19,10 @@ import ( func (opts *LogsOptions) HandleShow() error { chain := opts.Globals.Chain - abiCache := articulate.NewAbiCache(opts.Conn, opts.Articulate) testMode := opts.Globals.TestMode nErrors := 0 + abiCache := articulate.NewAbiCache(opts.Conn, opts.Articulate) ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawLog], errorChan chan error) { if sliceOfMaps, cnt, err := identifiers.AsSliceOfMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { @@ -48,8 +48,10 @@ func (opts *LogsOptions) HandleShow() error { iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { if tx, err := opts.Conn.GetTransactionByAppearance(&app, false /* needsTraces */); err != nil { return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) + } else if tx == nil || tx.Receipt == nil || len(tx.Receipt.Logs) == 0 { return fmt.Errorf("transaction at %s has no logs", app.Orig()) + } else { for index := range tx.Receipt.Logs { if opts.Articulate { @@ -93,9 +95,7 @@ func (opts *LogsOptions) HandleShow() error { for _, item := range items { item := item - if item.BlockNumber != 0 { - modelChan <- &item - } + modelChan <- &item } } bar.Finish(true) diff --git a/src/apps/chifra/internal/receipts/handle_show.go b/src/apps/chifra/internal/receipts/handle_show.go index 2e8bcf2b8b..dfaf073d41 100644 --- a/src/apps/chifra/internal/receipts/handle_show.go +++ b/src/apps/chifra/internal/receipts/handle_show.go @@ -1,3 +1,7 @@ +// Copyright 2021 The TrueBlocks Authors. All rights reserved. +// Use of this source code is governed by a license that can +// be found in the LICENSE file. + package receiptsPkg import ( @@ -15,10 +19,10 @@ import ( func (opts *ReceiptsOptions) HandleShow() error { chain := opts.Globals.Chain - abiCache := articulate.NewAbiCache(opts.Conn, opts.Articulate) testMode := opts.Globals.TestMode nErrors := 0 + abiCache := articulate.NewAbiCache(opts.Conn, opts.Articulate) ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawReceipt], errorChan chan error) { if sliceOfMaps, cnt, err := identifiers.AsSliceOfMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { @@ -44,8 +48,10 @@ func (opts *ReceiptsOptions) HandleShow() error { iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { if tx, err := opts.Conn.GetTransactionByAppearance(&app, false /* needsTraces */); err != nil { return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) + } else if tx == nil || tx.Receipt == nil { return fmt.Errorf("transaction at %s has no receipts", app.Orig()) + } else { if opts.Articulate { if err = abiCache.ArticulateReceipt(tx.Receipt); err != nil { @@ -84,9 +90,7 @@ func (opts *ReceiptsOptions) HandleShow() error { for _, item := range items { item := item - if item.BlockNumber != 0 { - modelChan <- &item - } + modelChan <- &item } } bar.Finish(true) diff --git a/src/apps/chifra/internal/traces/handle_counts.go b/src/apps/chifra/internal/traces/handle_counts.go index fa88b608d5..560e6a447a 100644 --- a/src/apps/chifra/internal/traces/handle_counts.go +++ b/src/apps/chifra/internal/traces/handle_counts.go @@ -80,18 +80,17 @@ func (opts *TracesOptions) HandleCounts() error { } return items[i].BlockNumber < items[j].BlockNumber }) + for _, item := range items { item := item - if !item.BlockHash.IsZero() { - counter := simpleTraceCount{ - BlockNumber: uint64(item.BlockNumber), - TransactionIndex: uint64(item.TransactionIndex), - TransactionHash: item.Hash, - Timestamp: item.Timestamp, - TracesCnt: uint64(len(item.Traces)), - } - modelChan <- &counter + counter := simpleTraceCount{ + BlockNumber: uint64(item.BlockNumber), + TransactionIndex: uint64(item.TransactionIndex), + TransactionHash: item.Hash, + Timestamp: item.Timestamp, + TracesCnt: uint64(len(item.Traces)), } + modelChan <- &counter } } bar.Finish(true) diff --git a/src/apps/chifra/internal/traces/handle_filter.go b/src/apps/chifra/internal/traces/handle_filter.go index 5325613a78..96db967084 100644 --- a/src/apps/chifra/internal/traces/handle_filter.go +++ b/src/apps/chifra/internal/traces/handle_filter.go @@ -22,6 +22,7 @@ func (opts *TracesOptions) HandleFilter() error { chain := opts.Globals.Chain testMode := opts.Globals.TestMode nErrors := 0 + abiCache := articulate.NewAbiCache(opts.Conn, opts.Articulate) traceFilter := types.SimpleTraceFilter{} _, br := traceFilter.ParseBangString(chain, opts.Filter) @@ -58,6 +59,7 @@ func (opts *TracesOptions) HandleFilter() error { if block, err := opts.Conn.GetBlockBodyByNumber(uint64(app.BlockNumber)); err != nil { errorChan <- fmt.Errorf("block at %s returned an error: %w", app.Orig(), err) return nil + } else { for _, tx := range block.Transactions { tx := tx diff --git a/src/apps/chifra/internal/traces/handle_show.go b/src/apps/chifra/internal/traces/handle_show.go index de0d1e78cc..3ee02c1fda 100644 --- a/src/apps/chifra/internal/traces/handle_show.go +++ b/src/apps/chifra/internal/traces/handle_show.go @@ -19,10 +19,10 @@ import ( func (opts *TracesOptions) HandleShow() error { chain := opts.Globals.Chain - abiCache := articulate.NewAbiCache(opts.Conn, opts.Articulate) testMode := opts.Globals.TestMode nErrors := 0 + abiCache := articulate.NewAbiCache(opts.Conn, opts.Articulate) ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawTrace], errorChan chan error) { if sliceOfMaps, cnt, err := identifiers.AsSliceOfMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { @@ -95,9 +95,7 @@ func (opts *TracesOptions) HandleShow() error { for _, item := range items { item := item - if !item.BlockHash.IsZero() { - modelChan <- &item - } + modelChan <- &item } } bar.Finish(true) diff --git a/src/apps/chifra/internal/transactions/handle_logs.go b/src/apps/chifra/internal/transactions/handle_logs.go index dd30b054c5..9b85bd41f9 100644 --- a/src/apps/chifra/internal/transactions/handle_logs.go +++ b/src/apps/chifra/internal/transactions/handle_logs.go @@ -20,10 +20,10 @@ import ( func (opts *TransactionsOptions) HandleLogs() error { chain := opts.Globals.Chain - abiCache := articulate.NewAbiCache(opts.Conn, opts.Articulate) testMode := opts.Globals.TestMode nErrors := 0 + abiCache := articulate.NewAbiCache(opts.Conn, opts.Articulate) emitters := []base.Address{} for _, e := range opts.Emitter { emitters = append(emitters, base.HexToAddress(e)) @@ -62,8 +62,10 @@ func (opts *TransactionsOptions) HandleLogs() error { iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { if tx, err := opts.Conn.GetTransactionByAppearance(&app, opts.Traces /* needsTraces */); err != nil { return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) + } else if tx == nil { return fmt.Errorf("transaction at %s has no logs", app.Orig()) + } else { if opts.Articulate && tx.ArticulatedTx == nil { if err = abiCache.ArticulateTransaction(tx); err != nil { @@ -100,12 +102,10 @@ func (opts *TransactionsOptions) HandleLogs() error { for _, item := range items { item := item - if !item.BlockHash.IsZero() { - for _, log := range item.Receipt.Logs { - log := log - if logFilter.PassesFilter(&log) { - modelChan <- &log - } + for _, log := range item.Receipt.Logs { + log := log + if logFilter.PassesFilter(&log) { + modelChan <- &log } } } @@ -119,5 +119,6 @@ func (opts *TransactionsOptions) HandleLogs() error { "traces": opts.Traces, "addresses": opts.Uniq, } + return output.StreamMany(ctx, fetchData, opts.Globals.OutputOptsWithExtra(extra)) } diff --git a/src/apps/chifra/internal/transactions/handle_show.go b/src/apps/chifra/internal/transactions/handle_show.go index 2709a58d15..d471ea7291 100644 --- a/src/apps/chifra/internal/transactions/handle_show.go +++ b/src/apps/chifra/internal/transactions/handle_show.go @@ -19,10 +19,10 @@ import ( func (opts *TransactionsOptions) HandleShow() (err error) { chain := opts.Globals.Chain - abiCache := articulate.NewAbiCache(opts.Conn, opts.Articulate) testMode := opts.Globals.TestMode nErrors := 0 + abiCache := articulate.NewAbiCache(opts.Conn, opts.Articulate) ctx, cancel := context.WithCancel(context.Background()) fetchData := func(modelChan chan types.Modeler[types.RawTransaction], errorChan chan error) { if sliceOfMaps, cnt, err := identifiers.AsSliceOfMaps[types.SimpleTransaction](chain, opts.TransactionIds); err != nil { @@ -48,8 +48,10 @@ func (opts *TransactionsOptions) HandleShow() (err error) { iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { if tx, err := opts.Conn.GetTransactionByAppearance(&app, opts.Traces /* needsTraces */); err != nil { return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) + } else if tx == nil { return fmt.Errorf("transaction at %s has no logs", app.Orig()) + } else { if opts.Articulate && tx.ArticulatedTx == nil { if err = abiCache.ArticulateTransaction(tx); err != nil { @@ -86,9 +88,7 @@ func (opts *TransactionsOptions) HandleShow() (err error) { for _, item := range items { item := item - if !item.BlockHash.IsZero() { - modelChan <- &item - } + modelChan <- &item } } bar.Finish(true) From da2119254b736ae1ba771ded04ce19042f5db6a1 Mon Sep 17 00:00:00 2001 From: tjayrush Date: Fri, 1 Dec 2023 12:42:06 -0500 Subject: [PATCH 22/25] Cleaning --- src/apps/chifra/internal/blocks/handle_hashes.go | 2 +- src/apps/chifra/internal/blocks/handle_logs.go | 2 +- src/apps/chifra/internal/blocks/handle_show.go | 2 +- src/apps/chifra/internal/blocks/handle_uncles.go | 2 +- src/apps/chifra/internal/blocks/handle_uniq.go | 2 +- src/apps/chifra/internal/blocks/handle_withdrawals.go | 2 +- src/apps/chifra/internal/chunks/handle_check_deep.go | 2 +- src/apps/chifra/internal/chunks/handle_tag.go | 2 +- src/apps/chifra/internal/chunks/handle_truncate.go | 4 ++-- src/apps/chifra/internal/export/handle_balances.go | 2 +- src/apps/chifra/internal/export/handle_logs.go | 2 +- src/apps/chifra/internal/export/handle_neighbors.go | 2 +- src/apps/chifra/internal/export/handle_statements.go | 2 +- src/apps/chifra/internal/export/handle_traces.go | 2 +- src/apps/chifra/internal/export/handle_withdrawals.go | 2 +- src/apps/chifra/internal/logs/handle_show.go | 2 +- src/apps/chifra/internal/receipts/handle_show.go | 2 +- src/apps/chifra/internal/slurp/handle_appearances.go | 2 +- src/apps/chifra/internal/slurp/handle_show.go | 2 +- src/apps/chifra/internal/state/handle_call.go | 8 +++++++- src/apps/chifra/internal/traces/handle_counts.go | 2 +- src/apps/chifra/internal/traces/handle_filter.go | 2 +- src/apps/chifra/internal/traces/handle_show.go | 2 +- src/apps/chifra/internal/transactions/handle_logs.go | 2 +- src/apps/chifra/internal/transactions/handle_show.go | 2 +- src/apps/chifra/internal/transactions/handle_uniq.go | 2 +- src/apps/chifra/pkg/decache/decache.go | 4 ++-- src/apps/chifra/pkg/pinning/list_pins.go | 2 +- src/examples/allContracts/allContracts.go | 2 +- src/examples/findFirst/findFirst.go | 6 +++--- 30 files changed, 40 insertions(+), 34 deletions(-) diff --git a/src/apps/chifra/internal/blocks/handle_hashes.go b/src/apps/chifra/internal/blocks/handle_hashes.go index 7d01c9566f..10758b710c 100644 --- a/src/apps/chifra/internal/blocks/handle_hashes.go +++ b/src/apps/chifra/internal/blocks/handle_hashes.go @@ -88,7 +88,7 @@ func (opts *BlocksOptions) HandleHashes() error { modelChan <- item } } - bar.Finish(true) + bar.Finish(true /* newLine */) } } diff --git a/src/apps/chifra/internal/blocks/handle_logs.go b/src/apps/chifra/internal/blocks/handle_logs.go index bbbc6849e3..b5b4475c0f 100644 --- a/src/apps/chifra/internal/blocks/handle_logs.go +++ b/src/apps/chifra/internal/blocks/handle_logs.go @@ -124,7 +124,7 @@ func (opts *BlocksOptions) HandleLogs() error { modelChan <- &item } } - bar.Finish(true) + bar.Finish(true /* newLine */) } } diff --git a/src/apps/chifra/internal/blocks/handle_show.go b/src/apps/chifra/internal/blocks/handle_show.go index 558e8c3329..021b26f5fc 100644 --- a/src/apps/chifra/internal/blocks/handle_show.go +++ b/src/apps/chifra/internal/blocks/handle_show.go @@ -88,7 +88,7 @@ func (opts *BlocksOptions) HandleShow() error { modelChan <- item } } - bar.Finish(true) + bar.Finish(true /* newLine */) } } diff --git a/src/apps/chifra/internal/blocks/handle_uncles.go b/src/apps/chifra/internal/blocks/handle_uncles.go index 423212ae43..5897d388b5 100644 --- a/src/apps/chifra/internal/blocks/handle_uncles.go +++ b/src/apps/chifra/internal/blocks/handle_uncles.go @@ -88,7 +88,7 @@ func (opts *BlocksOptions) HandleUncles() error { modelChan <- item } } - bar.Finish(true) + bar.Finish(true /* newLine */) } } diff --git a/src/apps/chifra/internal/blocks/handle_uniq.go b/src/apps/chifra/internal/blocks/handle_uniq.go index 644f7fe637..6b227ff1e8 100644 --- a/src/apps/chifra/internal/blocks/handle_uniq.go +++ b/src/apps/chifra/internal/blocks/handle_uniq.go @@ -49,12 +49,12 @@ func (opts *BlocksOptions) HandleUniq() error { apps := make([]types.SimpleAppearance, 0, len(thisMap)) iterFunc := func(app types.SimpleAppearance, value *types.SimpleAppearance) error { bn := uint64(app.BlockNumber) - bar.Tick() procFunc := func(s *types.SimpleAppearance) error { apps = append(apps, *s) return nil } + bar.Tick() if err := uniq.GetUniqAddressesInBlock(chain, opts.Flow, opts.Conn, procFunc, bn); err != nil { errorChan <- err if errors.Is(err, ethereum.NotFound) { diff --git a/src/apps/chifra/internal/blocks/handle_withdrawals.go b/src/apps/chifra/internal/blocks/handle_withdrawals.go index 48d2a70c13..f9f13b4685 100644 --- a/src/apps/chifra/internal/blocks/handle_withdrawals.go +++ b/src/apps/chifra/internal/blocks/handle_withdrawals.go @@ -88,7 +88,7 @@ func (opts *BlocksOptions) HandleWithdrawals() error { modelChan <- item } } - bar.Finish(true) + bar.Finish(true /* newLine */) } } diff --git a/src/apps/chifra/internal/chunks/handle_check_deep.go b/src/apps/chifra/internal/chunks/handle_check_deep.go index bb9375b138..2e41fafda6 100644 --- a/src/apps/chifra/internal/chunks/handle_check_deep.go +++ b/src/apps/chifra/internal/chunks/handle_check_deep.go @@ -131,7 +131,7 @@ func (opts *ChunksOptions) CheckDeep(cacheMan *manifest.Manifest, report *simple nErrors++ } } - bar.Finish(true) + bar.Finish(true /* newLine */) return nil } diff --git a/src/apps/chifra/internal/chunks/handle_tag.go b/src/apps/chifra/internal/chunks/handle_tag.go index f868125ff7..1668254983 100644 --- a/src/apps/chifra/internal/chunks/handle_tag.go +++ b/src/apps/chifra/internal/chunks/handle_tag.go @@ -80,7 +80,7 @@ func (opts *ChunksOptions) HandleTag(blockNums []uint64) error { cancel() } else { - bar.Finish(true) + bar.Finish(true /* newLine */) man.Version = opts.Tag man.Specification = base.IpfsHash(config.SpecTags[opts.Tag]) diff --git a/src/apps/chifra/internal/chunks/handle_truncate.go b/src/apps/chifra/internal/chunks/handle_truncate.go index 980fedf812..3f87563aed 100644 --- a/src/apps/chifra/internal/chunks/handle_truncate.go +++ b/src/apps/chifra/internal/chunks/handle_truncate.go @@ -97,7 +97,7 @@ func (opts *ChunksOptions) HandleTruncate(blockNums []uint64) error { } else { bar.Prefix = fmt.Sprintf("Truncated to %d ", opts.Truncate) - bar.Finish(true) + bar.Finish(true /* newLine */) bar = logger.NewBar(logger.BarOptions{ Enabled: !testMode, Total: 20, @@ -131,7 +131,7 @@ func (opts *ChunksOptions) HandleTruncate(blockNums []uint64) error { } _ = filepath.Walk(config.PathToCache(chain)+"monitors", truncateMonitor) bar.Prefix = fmt.Sprintf("Truncated monitors to %d ", opts.Truncate) - bar.Finish(true) + bar.Finish(true /* newLine */) // All that's left to do is report on what happened. fin := "." diff --git a/src/apps/chifra/internal/export/handle_balances.go b/src/apps/chifra/internal/export/handle_balances.go index 6940c86fb4..a182601e1a 100644 --- a/src/apps/chifra/internal/export/handle_balances.go +++ b/src/apps/chifra/internal/export/handle_balances.go @@ -122,7 +122,7 @@ func (opts *ExportOptions) HandleBalances(monitorArray []monitor.Monitor) error } } - bar.Finish(true) + bar.Finish(true /* newLine */) } prevBalance = big.NewInt(0) } diff --git a/src/apps/chifra/internal/export/handle_logs.go b/src/apps/chifra/internal/export/handle_logs.go index 6d1a58e992..b4f7b677e7 100644 --- a/src/apps/chifra/internal/export/handle_logs.go +++ b/src/apps/chifra/internal/export/handle_logs.go @@ -126,7 +126,7 @@ func (opts *ExportOptions) HandleLogs(monitorArray []monitor.Monitor) error { modelChan <- item } } - bar.Finish(true) + bar.Finish(true /* newLine */) } } } diff --git a/src/apps/chifra/internal/export/handle_neighbors.go b/src/apps/chifra/internal/export/handle_neighbors.go index 639f744e96..9ef2edb5c7 100644 --- a/src/apps/chifra/internal/export/handle_neighbors.go +++ b/src/apps/chifra/internal/export/handle_neighbors.go @@ -103,7 +103,7 @@ func (opts *ExportOptions) HandleNeighbors(monitorArray []monitor.Monitor) error modelChan <- &n } } - bar.Finish(true) + bar.Finish(true /* newLine */) } } } diff --git a/src/apps/chifra/internal/export/handle_statements.go b/src/apps/chifra/internal/export/handle_statements.go index 6cd8b9413d..f40ae2bcc6 100644 --- a/src/apps/chifra/internal/export/handle_statements.go +++ b/src/apps/chifra/internal/export/handle_statements.go @@ -151,7 +151,7 @@ func (opts *ExportOptions) HandleStatements(monitorArray []monitor.Monitor) erro } } - bar.Finish(true) + bar.Finish(true /* newLine */) } } } diff --git a/src/apps/chifra/internal/export/handle_traces.go b/src/apps/chifra/internal/export/handle_traces.go index 929be258fe..3a041d81e4 100644 --- a/src/apps/chifra/internal/export/handle_traces.go +++ b/src/apps/chifra/internal/export/handle_traces.go @@ -119,7 +119,7 @@ func (opts *ExportOptions) HandleTraces(monitorArray []monitor.Monitor) error { modelChan <- item } } - bar.Finish(true) + bar.Finish(true /* newLine */) } } } diff --git a/src/apps/chifra/internal/export/handle_withdrawals.go b/src/apps/chifra/internal/export/handle_withdrawals.go index b9363cac90..d31112baa0 100644 --- a/src/apps/chifra/internal/export/handle_withdrawals.go +++ b/src/apps/chifra/internal/export/handle_withdrawals.go @@ -106,7 +106,7 @@ func (opts *ExportOptions) HandleWithdrawals(monitorArray []monitor.Monitor) err modelChan <- item } } - bar.Finish(true) + bar.Finish(true /* newLine */) } } } diff --git a/src/apps/chifra/internal/logs/handle_show.go b/src/apps/chifra/internal/logs/handle_show.go index 84c1e4c9b9..92e90a2d60 100644 --- a/src/apps/chifra/internal/logs/handle_show.go +++ b/src/apps/chifra/internal/logs/handle_show.go @@ -98,7 +98,7 @@ func (opts *LogsOptions) HandleShow() error { modelChan <- &item } } - bar.Finish(true) + bar.Finish(true /* newLine */) } } diff --git a/src/apps/chifra/internal/receipts/handle_show.go b/src/apps/chifra/internal/receipts/handle_show.go index dfaf073d41..ba5c5813be 100644 --- a/src/apps/chifra/internal/receipts/handle_show.go +++ b/src/apps/chifra/internal/receipts/handle_show.go @@ -93,7 +93,7 @@ func (opts *ReceiptsOptions) HandleShow() error { modelChan <- &item } } - bar.Finish(true) + bar.Finish(true /* newLine */) } } diff --git a/src/apps/chifra/internal/slurp/handle_appearances.go b/src/apps/chifra/internal/slurp/handle_appearances.go index 076756db27..eaf17d215d 100644 --- a/src/apps/chifra/internal/slurp/handle_appearances.go +++ b/src/apps/chifra/internal/slurp/handle_appearances.go @@ -69,7 +69,7 @@ func (opts *SlurpOptions) HandleAppearances() error { time.Sleep(ms) } } - bar.Finish(true) + bar.Finish(true /* newLine */) } } diff --git a/src/apps/chifra/internal/slurp/handle_show.go b/src/apps/chifra/internal/slurp/handle_show.go index d4a7bb8fd1..e76c813620 100644 --- a/src/apps/chifra/internal/slurp/handle_show.go +++ b/src/apps/chifra/internal/slurp/handle_show.go @@ -62,7 +62,7 @@ func (opts *SlurpOptions) HandleShow() error { time.Sleep(ms) } } - bar.Finish(true) + bar.Finish(true /* newLine */) } } diff --git a/src/apps/chifra/internal/state/handle_call.go b/src/apps/chifra/internal/state/handle_call.go index f0142e5bc2..035dd89c39 100644 --- a/src/apps/chifra/internal/state/handle_call.go +++ b/src/apps/chifra/internal/state/handle_call.go @@ -1,3 +1,7 @@ +// Copyright 2021 The TrueBlocks Authors. All rights reserved. +// Use of this source code is governed by a license that can +// be found in the LICENSE file. + package statePkg import ( @@ -57,6 +61,7 @@ func (opts *StateOptions) HandleCall() error { wrapped := fmt.Errorf("the --call value provided (%s) was not found: %s", opts.Call, err) errorChan <- wrapped cancel() + } else { contractCall.BlockNumber = bn results, err := contractCall.Call(artFunc) @@ -87,6 +92,7 @@ func (opts *StateOptions) HandleCall() error { v := v items = append(items, *v) } + sort.Slice(items, func(i, j int) bool { return items[i].BlockNumber < items[j].BlockNumber }) @@ -96,7 +102,7 @@ func (opts *StateOptions) HandleCall() error { modelChan <- &item } } - bar.Finish(true) + bar.Finish(true /* newLine */) } } diff --git a/src/apps/chifra/internal/traces/handle_counts.go b/src/apps/chifra/internal/traces/handle_counts.go index 560e6a447a..089481e10b 100644 --- a/src/apps/chifra/internal/traces/handle_counts.go +++ b/src/apps/chifra/internal/traces/handle_counts.go @@ -93,7 +93,7 @@ func (opts *TracesOptions) HandleCounts() error { modelChan <- &counter } } - bar.Finish(true) + bar.Finish(true /* newLine */) } } diff --git a/src/apps/chifra/internal/traces/handle_filter.go b/src/apps/chifra/internal/traces/handle_filter.go index 96db967084..138b083dfa 100644 --- a/src/apps/chifra/internal/traces/handle_filter.go +++ b/src/apps/chifra/internal/traces/handle_filter.go @@ -130,7 +130,7 @@ func (opts *TracesOptions) HandleFilter() error { } } } - bar.Finish(true) + bar.Finish(true /* newLine */) } } diff --git a/src/apps/chifra/internal/traces/handle_show.go b/src/apps/chifra/internal/traces/handle_show.go index 3ee02c1fda..c70b31e931 100644 --- a/src/apps/chifra/internal/traces/handle_show.go +++ b/src/apps/chifra/internal/traces/handle_show.go @@ -98,7 +98,7 @@ func (opts *TracesOptions) HandleShow() error { modelChan <- &item } } - bar.Finish(true) + bar.Finish(true /* newLine */) } } diff --git a/src/apps/chifra/internal/transactions/handle_logs.go b/src/apps/chifra/internal/transactions/handle_logs.go index 9b85bd41f9..829de03a80 100644 --- a/src/apps/chifra/internal/transactions/handle_logs.go +++ b/src/apps/chifra/internal/transactions/handle_logs.go @@ -110,7 +110,7 @@ func (opts *TransactionsOptions) HandleLogs() error { } } } - bar.Finish(true) + bar.Finish(true /* newLine */) } } diff --git a/src/apps/chifra/internal/transactions/handle_show.go b/src/apps/chifra/internal/transactions/handle_show.go index d471ea7291..850f167d21 100644 --- a/src/apps/chifra/internal/transactions/handle_show.go +++ b/src/apps/chifra/internal/transactions/handle_show.go @@ -91,7 +91,7 @@ func (opts *TransactionsOptions) HandleShow() (err error) { modelChan <- &item } } - bar.Finish(true) + bar.Finish(true /* newLine */) } } diff --git a/src/apps/chifra/internal/transactions/handle_uniq.go b/src/apps/chifra/internal/transactions/handle_uniq.go index 7afa176b94..ffaefdad75 100644 --- a/src/apps/chifra/internal/transactions/handle_uniq.go +++ b/src/apps/chifra/internal/transactions/handle_uniq.go @@ -52,7 +52,7 @@ func (opts *TransactionsOptions) HandleUniq() (err error) { } } } - bar.Finish(true) + bar.Finish(true /* newLine */) } extra := map[string]interface{}{ diff --git a/src/apps/chifra/pkg/decache/decache.go b/src/apps/chifra/pkg/decache/decache.go index 7c3f24c7c0..445aa272e9 100644 --- a/src/apps/chifra/pkg/decache/decache.go +++ b/src/apps/chifra/pkg/decache/decache.go @@ -32,9 +32,9 @@ func Decache(conn *rpc.Connection, locs []cache.Locator, silent bool, cT walk.Ca } if err := conn.Store.Decache(locs, processorFunc); err != nil { - bar.Finish(true) + bar.Finish(true /* newLine */) return "", err } - bar.Finish(true) + bar.Finish(true /* newLine */) return fmt.Sprintf("%d items totaling %d bytes were removed from the %s cache.", itemsProcessed, bytesProcessed, cacheName), nil } diff --git a/src/apps/chifra/pkg/pinning/list_pins.go b/src/apps/chifra/pkg/pinning/list_pins.go index ae9c81699c..5ad219883c 100644 --- a/src/apps/chifra/pkg/pinning/list_pins.go +++ b/src/apps/chifra/pkg/pinning/list_pins.go @@ -69,7 +69,7 @@ func ListPins(chain, status string, countOnly bool, pageSize int, dur time.Durat bar.Tick() time.Sleep(dur) } - bar.Finish(true) + bar.Finish(true /* newLine */) } return ret, nil } diff --git a/src/examples/allContracts/allContracts.go b/src/examples/allContracts/allContracts.go index 2b3449115f..28fdb2f285 100644 --- a/src/examples/allContracts/allContracts.go +++ b/src/examples/allContracts/allContracts.go @@ -20,7 +20,7 @@ func main() { conn := rpc.TempConnection(chain) latest := conn.GetLatestBlockNumber() forEveryTrace(46000, latest, visitTrace) - bar.Finish(true) + bar.Finish(true /* newLine */) } func visitTrace(trace *types.SimpleTrace, data *any) error { diff --git a/src/examples/findFirst/findFirst.go b/src/examples/findFirst/findFirst.go index 3428689424..30cd2b3350 100644 --- a/src/examples/findFirst/findFirst.go +++ b/src/examples/findFirst/findFirst.go @@ -44,7 +44,7 @@ func slowWay(conn *rpc.Connection) { fmt.Println(err) } else { if len(block.Transactions) > 0 { - bar.Finish(true) + bar.Finish(true /* newLine */) done := time.Since(start) fmt.Println("Time taken:", done, "seconds") fmt.Println(i, block.Hash.String(), "in", done, "seconds") @@ -110,9 +110,9 @@ func fastWay(conn *rpc.Connection) { fmt.Println(err) } - timeTaken := bar.Finish(true) + timeTaken := bar.Finish(true /* newLine */) fmt.Println(firstBlock.BlockNumber, firstBlock.Hash.String(), "in", timeTaken, "seconds") } - bar.Finish(true) + bar.Finish(true /* newLine */) } } From 6ec7d1d27dc4d3997a705583dd4a305d94fd090a Mon Sep 17 00:00:00 2001 From: tjayrush Date: Fri, 1 Dec 2023 17:08:03 -0500 Subject: [PATCH 23/25] Improves error handling in iterFuncs --- src/apps/chifra/internal/blocks/handle_hashes.go | 10 ++-------- src/apps/chifra/internal/blocks/handle_logs.go | 8 ++++---- src/apps/chifra/internal/blocks/handle_show.go | 10 ++-------- src/apps/chifra/internal/blocks/handle_uncles.go | 12 +++--------- src/apps/chifra/internal/blocks/handle_uniq.go | 11 +++-------- .../chifra/internal/blocks/handle_withdrawals.go | 5 ++--- src/apps/chifra/internal/logs/handle_show.go | 2 ++ src/apps/chifra/internal/receipts/handle_show.go | 2 ++ src/apps/chifra/internal/state/handle_call.go | 9 ++++----- src/apps/chifra/internal/traces/handle_counts.go | 8 ++++---- src/apps/chifra/internal/traces/handle_filter.go | 8 ++++---- src/apps/chifra/internal/traces/handle_show.go | 8 ++++---- src/apps/chifra/internal/transactions/handle_logs.go | 2 ++ src/apps/chifra/internal/transactions/handle_show.go | 2 ++ src/apps/chifra/pkg/ledger/stmnt_from_tx.go | 2 +- src/apps/chifra/pkg/rpc/get_uncle.go | 6 ++++-- src/apps/chifra/pkg/sigintTrap/trap.go | 6 ++---- src/apps/chifra/pkg/types/types_function.go | 2 +- src/apps/chifra/pkg/utils/iteration.go | 10 +++------- .../api_tests/getBlocks_count_uncles_uniq.txt | 4 ++-- .../tools/getBlocks/getBlocks_count_uncles_uniq.txt | 4 ++-- 21 files changed, 55 insertions(+), 76 deletions(-) diff --git a/src/apps/chifra/internal/blocks/handle_hashes.go b/src/apps/chifra/internal/blocks/handle_hashes.go index 10758b710c..b713973956 100644 --- a/src/apps/chifra/internal/blocks/handle_hashes.go +++ b/src/apps/chifra/internal/blocks/handle_hashes.go @@ -6,7 +6,6 @@ package blocksPkg import ( "context" - "errors" "fmt" "sort" @@ -15,7 +14,6 @@ import ( "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/output" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/utils" - "github.com/ethereum/go-ethereum" ) func (opts *BlocksOptions) HandleHashes() error { @@ -49,12 +47,8 @@ func (opts *BlocksOptions) HandleHashes() error { iterFunc := func(app types.SimpleAppearance, value *types.SimpleBlock[string]) error { bn := uint64(app.BlockNumber) if block, err := opts.Conn.GetBlockHeaderByNumber(bn); err != nil { - errorChan <- err - if errors.Is(err, ethereum.NotFound) { - errorChan <- errors.New("uncles not found") - } - cancel() - return nil + delete(thisMap, app) + return err } else { *value = block bar.Tick() diff --git a/src/apps/chifra/internal/blocks/handle_logs.go b/src/apps/chifra/internal/blocks/handle_logs.go index b5b4475c0f..d411f0b175 100644 --- a/src/apps/chifra/internal/blocks/handle_logs.go +++ b/src/apps/chifra/internal/blocks/handle_logs.go @@ -67,12 +67,12 @@ func (opts *BlocksOptions) HandleLogs() error { bn := uint64(app.BlockNumber) ts := opts.Conn.GetBlockTimestamp(bn) if logs, err := opts.Conn.GetLogsByNumber(bn, ts); err != nil { - errorChan <- fmt.Errorf("block at %d returned an error: %w", bn, err) - return nil + delete(thisMap, app) + return fmt.Errorf("block at %d returned an error: %w", bn, err) } else if len(logs) == 0 { - errorChan <- fmt.Errorf("block at %d has no logs", bn) - return nil + delete(thisMap, app) + return fmt.Errorf("block at %d has no logs", bn) } else { l := make([]types.SimpleLog, 0, len(logs)) diff --git a/src/apps/chifra/internal/blocks/handle_show.go b/src/apps/chifra/internal/blocks/handle_show.go index 021b26f5fc..e7464bbc3c 100644 --- a/src/apps/chifra/internal/blocks/handle_show.go +++ b/src/apps/chifra/internal/blocks/handle_show.go @@ -6,7 +6,6 @@ package blocksPkg import ( "context" - "errors" "fmt" "sort" @@ -15,7 +14,6 @@ import ( "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/output" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/utils" - "github.com/ethereum/go-ethereum" ) func (opts *BlocksOptions) HandleShow() error { @@ -49,12 +47,8 @@ func (opts *BlocksOptions) HandleShow() error { iterFunc := func(app types.SimpleAppearance, value *types.SimpleBlock[types.SimpleTransaction]) error { bn := uint64(app.BlockNumber) if block, err := opts.Conn.GetBlockBodyByNumber(bn); err != nil { - errorChan <- err - if errors.Is(err, ethereum.NotFound) { - errorChan <- errors.New("uncles not found") - } - cancel() - return nil + delete(thisMap, app) + return err } else { *value = block bar.Tick() diff --git a/src/apps/chifra/internal/blocks/handle_uncles.go b/src/apps/chifra/internal/blocks/handle_uncles.go index 5897d388b5..e550d5ac10 100644 --- a/src/apps/chifra/internal/blocks/handle_uncles.go +++ b/src/apps/chifra/internal/blocks/handle_uncles.go @@ -6,7 +6,6 @@ package blocksPkg import ( "context" - "errors" "fmt" "sort" @@ -15,7 +14,6 @@ import ( "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/output" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/utils" - "github.com/ethereum/go-ethereum" ) func (opts *BlocksOptions) HandleUncles() error { @@ -49,20 +47,16 @@ func (opts *BlocksOptions) HandleUncles() error { iterFunc := func(app types.SimpleAppearance, value *types.SimpleBlock[string]) error { bn := uint64(app.BlockNumber) if uncles, err := opts.Conn.GetUncleBodiesByNumber(bn); err != nil { - errorChan <- err - if errors.Is(err, ethereum.NotFound) { - errorChan <- errors.New("uncles not found") - } - cancel() - return nil + delete(thisMap, app) + return err } else { for _, uncle := range uncles { uncle := uncle items = append(items, &uncle) } bar.Tick() + return nil } - return nil } iterErrorChan := make(chan error) diff --git a/src/apps/chifra/internal/blocks/handle_uniq.go b/src/apps/chifra/internal/blocks/handle_uniq.go index 6b227ff1e8..00b2777308 100644 --- a/src/apps/chifra/internal/blocks/handle_uniq.go +++ b/src/apps/chifra/internal/blocks/handle_uniq.go @@ -6,7 +6,6 @@ package blocksPkg import ( "context" - "errors" "fmt" "sort" @@ -16,7 +15,6 @@ import ( "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/uniq" "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/utils" - "github.com/ethereum/go-ethereum" ) func (opts *BlocksOptions) HandleUniq() error { @@ -54,14 +52,11 @@ func (opts *BlocksOptions) HandleUniq() error { return nil } - bar.Tick() if err := uniq.GetUniqAddressesInBlock(chain, opts.Flow, opts.Conn, procFunc, bn); err != nil { - errorChan <- err - if errors.Is(err, ethereum.NotFound) { - return nil - } - cancel() + delete(thisMap, app) + return err } + bar.Tick() return nil } diff --git a/src/apps/chifra/internal/blocks/handle_withdrawals.go b/src/apps/chifra/internal/blocks/handle_withdrawals.go index f9f13b4685..b705e76fa8 100644 --- a/src/apps/chifra/internal/blocks/handle_withdrawals.go +++ b/src/apps/chifra/internal/blocks/handle_withdrawals.go @@ -47,9 +47,8 @@ func (opts *BlocksOptions) HandleWithdrawals() error { iterFunc := func(app types.SimpleAppearance, value *types.SimpleBlock[string]) error { bn := uint64(app.BlockNumber) if block, err := opts.Conn.GetBlockHeaderByNumber(bn); err != nil { - errorChan <- err - cancel() - return nil + delete(thisMap, app) + return err } else { *value = block bar.Tick() diff --git a/src/apps/chifra/internal/logs/handle_show.go b/src/apps/chifra/internal/logs/handle_show.go index 92e90a2d60..1ed1fe1308 100644 --- a/src/apps/chifra/internal/logs/handle_show.go +++ b/src/apps/chifra/internal/logs/handle_show.go @@ -47,9 +47,11 @@ func (opts *LogsOptions) HandleShow() error { iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { if tx, err := opts.Conn.GetTransactionByAppearance(&app, false /* needsTraces */); err != nil { + delete(thisMap, app) return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) } else if tx == nil || tx.Receipt == nil || len(tx.Receipt.Logs) == 0 { + delete(thisMap, app) return fmt.Errorf("transaction at %s has no logs", app.Orig()) } else { diff --git a/src/apps/chifra/internal/receipts/handle_show.go b/src/apps/chifra/internal/receipts/handle_show.go index ba5c5813be..d6ce4c5a3a 100644 --- a/src/apps/chifra/internal/receipts/handle_show.go +++ b/src/apps/chifra/internal/receipts/handle_show.go @@ -47,9 +47,11 @@ func (opts *ReceiptsOptions) HandleShow() error { iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { if tx, err := opts.Conn.GetTransactionByAppearance(&app, false /* needsTraces */); err != nil { + delete(thisMap, app) return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) } else if tx == nil || tx.Receipt == nil { + delete(thisMap, app) return fmt.Errorf("transaction at %s has no receipts", app.Orig()) } else { diff --git a/src/apps/chifra/internal/state/handle_call.go b/src/apps/chifra/internal/state/handle_call.go index 035dd89c39..09be72b6ee 100644 --- a/src/apps/chifra/internal/state/handle_call.go +++ b/src/apps/chifra/internal/state/handle_call.go @@ -58,16 +58,15 @@ func (opts *StateOptions) HandleCall() error { iterFunc := func(app types.SimpleAppearance, value *types.SimpleResult) error { bn := uint64(app.BlockNumber) if contractCall, _, err := call.NewContractCall(opts.Conn, callAddress, opts.Call); err != nil { - wrapped := fmt.Errorf("the --call value provided (%s) was not found: %s", opts.Call, err) - errorChan <- wrapped - cancel() + delete(thisMap, app) + return fmt.Errorf("the --call value provided (%s) was not found: %s", opts.Call, err) } else { contractCall.BlockNumber = bn results, err := contractCall.Call(artFunc) if err != nil { - errorChan <- err - cancel() + delete(thisMap, app) + return err } else { bar.Tick() *value = *results diff --git a/src/apps/chifra/internal/traces/handle_counts.go b/src/apps/chifra/internal/traces/handle_counts.go index 089481e10b..a3fbb76408 100644 --- a/src/apps/chifra/internal/traces/handle_counts.go +++ b/src/apps/chifra/internal/traces/handle_counts.go @@ -45,12 +45,12 @@ func (opts *TracesOptions) HandleCounts() error { iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { if tx, err := opts.Conn.GetTransactionByAppearance(&app, true); err != nil { - errorChan <- fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) - return nil + delete(thisMap, app) + return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) } else if tx == nil || len(tx.Traces) == 0 { - errorChan <- fmt.Errorf("transaction at %s has no traces", app.Orig()) - return nil + delete(thisMap, app) + return fmt.Errorf("transaction at %s has no traces", app.Orig()) } else { *value = *tx diff --git a/src/apps/chifra/internal/traces/handle_filter.go b/src/apps/chifra/internal/traces/handle_filter.go index 138b083dfa..ca89954dbc 100644 --- a/src/apps/chifra/internal/traces/handle_filter.go +++ b/src/apps/chifra/internal/traces/handle_filter.go @@ -64,12 +64,12 @@ func (opts *TracesOptions) HandleFilter() error { for _, tx := range block.Transactions { tx := tx if traces, err := opts.Conn.GetTracesByTransactionHash(tx.Hash.Hex(), &tx); err != nil { - errorChan <- fmt.Errorf("block at %s returned an error: %w", app.Orig(), err) - return nil + delete(thisMap, app) + return fmt.Errorf("block at %s returned an error: %w", app.Orig(), err) } else if len(traces) == 0 { - errorChan <- fmt.Errorf("block at %s has no traces", app.Orig()) - return nil + delete(thisMap, app) + return fmt.Errorf("block at %s has no traces", app.Orig()) } else { tr := make([]types.SimpleTrace, 0, len(traces)) diff --git a/src/apps/chifra/internal/traces/handle_show.go b/src/apps/chifra/internal/traces/handle_show.go index c70b31e931..bd52361d26 100644 --- a/src/apps/chifra/internal/traces/handle_show.go +++ b/src/apps/chifra/internal/traces/handle_show.go @@ -47,12 +47,12 @@ func (opts *TracesOptions) HandleShow() error { iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { if tx, err := opts.Conn.GetTransactionByAppearance(&app, true); err != nil { - errorChan <- fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) - return nil + delete(thisMap, app) + return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) } else if tx == nil || len(tx.Traces) == 0 { - errorChan <- fmt.Errorf("transaction at %s has no traces", app.Orig()) - return nil + delete(thisMap, app) + return fmt.Errorf("transaction at %s has no traces", app.Orig()) } else { for index := range tx.Traces { diff --git a/src/apps/chifra/internal/transactions/handle_logs.go b/src/apps/chifra/internal/transactions/handle_logs.go index 829de03a80..3dd3527ef1 100644 --- a/src/apps/chifra/internal/transactions/handle_logs.go +++ b/src/apps/chifra/internal/transactions/handle_logs.go @@ -61,9 +61,11 @@ func (opts *TransactionsOptions) HandleLogs() error { iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { if tx, err := opts.Conn.GetTransactionByAppearance(&app, opts.Traces /* needsTraces */); err != nil { + delete(thisMap, app) return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) } else if tx == nil { + delete(thisMap, app) return fmt.Errorf("transaction at %s has no logs", app.Orig()) } else { diff --git a/src/apps/chifra/internal/transactions/handle_show.go b/src/apps/chifra/internal/transactions/handle_show.go index 850f167d21..c9282de642 100644 --- a/src/apps/chifra/internal/transactions/handle_show.go +++ b/src/apps/chifra/internal/transactions/handle_show.go @@ -47,9 +47,11 @@ func (opts *TransactionsOptions) HandleShow() (err error) { iterFunc := func(app types.SimpleAppearance, value *types.SimpleTransaction) error { if tx, err := opts.Conn.GetTransactionByAppearance(&app, opts.Traces /* needsTraces */); err != nil { + delete(thisMap, app) return fmt.Errorf("transaction at %s returned an error: %w", app.Orig(), err) } else if tx == nil { + delete(thisMap, app) return fmt.Errorf("transaction at %s has no logs", app.Orig()) } else { diff --git a/src/apps/chifra/pkg/ledger/stmnt_from_tx.go b/src/apps/chifra/pkg/ledger/stmnt_from_tx.go index 15ce293b75..59afbd88ca 100644 --- a/src/apps/chifra/pkg/ledger/stmnt_from_tx.go +++ b/src/apps/chifra/pkg/ledger/stmnt_from_tx.go @@ -142,7 +142,7 @@ func (l *Ledger) GetStatementsFromTransaction( } if false && l.Conn.StoreWritable() && l.Conn.EnabledMap["statements"] && base.IsFinal(l.Conn.LatestBlockTimestamp, trans.Timestamp) { - objects := make([]types.SimpleStatement, len(statements)) + objects := make([]types.SimpleStatement, 0, len(statements)) for _, ptr := range statements { objects = append(objects, *ptr) } diff --git a/src/apps/chifra/pkg/rpc/get_uncle.go b/src/apps/chifra/pkg/rpc/get_uncle.go index eda7b8451f..b074685c83 100644 --- a/src/apps/chifra/pkg/rpc/get_uncle.go +++ b/src/apps/chifra/pkg/rpc/get_uncle.go @@ -18,10 +18,12 @@ import ( func (conn *Connection) GetUncleBodiesByNumber(bn uint64) ([]types.SimpleBlock[types.SimpleTransaction], error) { if count, err := conn.GetUnclesCountInBlock(bn); err != nil { return nil, err + } else if count == 0 { return []types.SimpleBlock[types.SimpleTransaction]{}, nil + } else { - ret := make([]types.SimpleBlock[types.SimpleTransaction], count) + ret := make([]types.SimpleBlock[types.SimpleTransaction], 0, count) for i := uint64(0); i < count; i++ { method := "eth_getUncleByBlockNumberAndIndex" params := query.Params{ @@ -58,7 +60,7 @@ func (conn *Connection) GetUnclesHashesByNumber(bn uint64) ([]base.Hash, error) } else if count == 0 { return []base.Hash{}, nil } else { - ret := make([]base.Hash, count) + ret := make([]base.Hash, 0, count) for i := uint64(0); i < count; i++ { method := "eth_getUncleByBlockNumberAndIndex" params := query.Params{ diff --git a/src/apps/chifra/pkg/sigintTrap/trap.go b/src/apps/chifra/pkg/sigintTrap/trap.go index 6262552bf0..95b8876dea 100644 --- a/src/apps/chifra/pkg/sigintTrap/trap.go +++ b/src/apps/chifra/pkg/sigintTrap/trap.go @@ -6,7 +6,6 @@ package sigintTrap import ( "context" - "errors" "os" "os/signal" "sync" @@ -15,8 +14,7 @@ import ( ) var TrapMessage = colors.Yellow + "Ctrl+C. Finishing..." + colors.Off -var ErrInterrupted = errors.New("interrupted") -var SigintMessageOnce sync.Once +var sigintMessageOnce sync.Once type CleanupFunction func() @@ -30,7 +28,7 @@ func Enable(ctx context.Context, cancel context.CancelFunc, cleanUp CleanupFunct for { select { case <-signals: - SigintMessageOnce.Do(cleanUp) + sigintMessageOnce.Do(cleanUp) if cancel != nil { cancel() } diff --git a/src/apps/chifra/pkg/types/types_function.go b/src/apps/chifra/pkg/types/types_function.go index 0fe9fb07cf..a859a02718 100644 --- a/src/apps/chifra/pkg/types/types_function.go +++ b/src/apps/chifra/pkg/types/types_function.go @@ -98,7 +98,7 @@ func (s *SimpleFunction) Model(chain, format string, verbose bool, extraOptions if format == "json" { getParameterModels := func(params []SimpleParameter) []map[string]any { - result := make([]map[string]any, len(params)) + result := make([]map[string]any, 0, len(params)) for index, param := range params { result[index] = param.Model(chain, format, verbose, extraOptions).Data result[index]["name"] = param.DisplayName(index) diff --git a/src/apps/chifra/pkg/utils/iteration.go b/src/apps/chifra/pkg/utils/iteration.go index 951a6f4b8d..2df6417442 100644 --- a/src/apps/chifra/pkg/utils/iteration.go +++ b/src/apps/chifra/pkg/utils/iteration.go @@ -19,19 +19,15 @@ func IterateOverMap[Key comparable, Value any](ctx context.Context, errorChan ch var wg sync.WaitGroup defer close(errorChan) - itemsPerPool := len(target) / runtime.GOMAXPROCS(0) - if itemsPerPool < 1 { - // We don't really want this to happen, if target is small then synchronous iteration - // will be faster. - itemsPerPool = 1 - } + nRoutines := Max(1, runtime.GOMAXPROCS(0)) + itemsPerPool := Max(1, len(target)/nRoutines) type stepArguments struct { key Key value Value } - pool, err := ants.NewPoolWithFunc(runtime.GOMAXPROCS(0), func(i interface{}) { + pool, err := ants.NewPoolWithFunc(nRoutines, func(i interface{}) { defer wg.Done() select { case <-ctx.Done(): diff --git a/test/gold/tools/getBlocks/api_tests/getBlocks_count_uncles_uniq.txt b/test/gold/tools/getBlocks/api_tests/getBlocks_count_uncles_uniq.txt index 70ad5f5680..b3238a07d4 100644 --- a/test/gold/tools/getBlocks/api_tests/getBlocks_count_uncles_uniq.txt +++ b/test/gold/tools/getBlocks/api_tests/getBlocks_count_uncles_uniq.txt @@ -2,13 +2,13 @@ blocks?blocks=3%20469&count&uncles&uniq&fmt=json { "data": [ { - "addressCnt": 3, + "addressCnt": 2, "blockNumber": 3, "transactionsCnt": 0, "unclesCnt": 1 }, { - "addressCnt": 3, + "addressCnt": 2, "blockNumber": 469, "transactionsCnt": 0, "unclesCnt": 2 diff --git a/test/gold/tools/getBlocks/getBlocks_count_uncles_uniq.txt b/test/gold/tools/getBlocks/getBlocks_count_uncles_uniq.txt index f8de2b8456..c9dcc0b819 100644 --- a/test/gold/tools/getBlocks/getBlocks_count_uncles_uniq.txt +++ b/test/gold/tools/getBlocks/getBlocks_count_uncles_uniq.txt @@ -8,13 +8,13 @@ TEST[DATE|TIME] Format: json { "data": [ { - "addressCnt": 3, + "addressCnt": 2, "blockNumber": 3, "transactionsCnt": 0, "unclesCnt": 1 }, { - "addressCnt": 3, + "addressCnt": 2, "blockNumber": 469, "transactionsCnt": 0, "unclesCnt": 2 From 0dedd91c237103b98cdedf834012c756edbea31c Mon Sep 17 00:00:00 2001 From: tjayrush Date: Fri, 1 Dec 2023 20:54:10 -0500 Subject: [PATCH 24/25] Fixing tests --- src/dev_tools/testRunner/testCases/tools/grabABI.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dev_tools/testRunner/testCases/tools/grabABI.csv b/src/dev_tools/testRunner/testCases/tools/grabABI.csv index ad80a117c6..249105246d 100644 --- a/src/dev_tools/testRunner/testCases/tools/grabABI.csv +++ b/src/dev_tools/testRunner/testCases/tools/grabABI.csv @@ -7,7 +7,7 @@ on ,both ,fast ,abis ,tools/grabABI ,invalid_option ,y ,addrs = on ,both ,fast ,abis ,tools/grabABI ,no_abi1 ,y ,addrs = 0x1728039ce0d18a799c081c5c7fa2090dd365a8d0 on ,both ,fast ,abis ,tools/grabABI ,no_abi2 ,y ,addrs = 0x1728039ce0d18a799c081c5c7fa2090dd365a8d0 on ,both ,fast ,abis ,tools/grabABI ,const ,y ,addrs = 0xbb9bc244d798123fde783fcc1c72d3bb8c189413 -on ,both ,fast ,abis ,tools/grabABI ,verbose1 ,y ,addrs = 0xbb9bc244d798123fde783fcc1c72d3bb8c189413 & verbose +local ,both ,fast ,abis ,tools/grabABI ,verbose1 ,y ,addrs = 0xbb9bc244d798123fde783fcc1c72d3bb8c189413 & verbose on ,both ,fast ,abis ,tools/grabABI ,underbar_functions ,y ,addrs = 0xdac17f958d2ee523a2206206994597c13d831ec7 on ,both ,fast ,abis ,tools/grabABI ,known_bug1 ,y ,addrs = 0xe94327d07fc17907b4db788e5adf2ed424addff6 & fmt = json on ,both ,fast ,abis ,tools/grabABI ,known_bug1_again ,y ,addrs = 0xe94327d07fc17907b4db788e5adf2ed424addff6 & fmt = json From 4f06316c296159067babf392bdc370720c401040 Mon Sep 17 00:00:00 2001 From: tjayrush Date: Fri, 1 Dec 2023 21:27:54 -0500 Subject: [PATCH 25/25] Bumps version to v2.5.0-release --- docs/content/api/openapi.yaml | 2 +- src/apps/chifra/pkg/version/version_strings.go | 2 +- src/dev_tools/utillib/version.cpp | 2 +- test/gold/tools/ethNames/ethNames_show_version.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/content/api/openapi.yaml b/docs/content/api/openapi.yaml index 7a89974c68..ab62fd3f39 100644 --- a/docs/content/api/openapi.yaml +++ b/docs/content/api/openapi.yaml @@ -7,7 +7,7 @@ info: license: name: GPL 3.0 url: http://www.gnu.org/licenses/ - version: 2.2.0-release + version: 2.5.0-release description: > A REST layer over the TrueBlocks application. With `chifra daemon`, you can diff --git a/src/apps/chifra/pkg/version/version_strings.go b/src/apps/chifra/pkg/version/version_strings.go index 1f5993f968..fb625b2a40 100644 --- a/src/apps/chifra/pkg/version/version_strings.go +++ b/src/apps/chifra/pkg/version/version_strings.go @@ -7,4 +7,4 @@ package version -const LibraryVersion = "GHC-TrueBlocks//2.2.0-release" +const LibraryVersion = "GHC-TrueBlocks//2.5.0-release" diff --git a/src/dev_tools/utillib/version.cpp b/src/dev_tools/utillib/version.cpp index 319be7b1aa..f034c9c066 100644 --- a/src/dev_tools/utillib/version.cpp +++ b/src/dev_tools/utillib/version.cpp @@ -18,7 +18,7 @@ namespace qblocks { // Run make generate in order for this to take effect // search: change-version #define MAJOR 2 -#define MINOR 2 +#define MINOR 5 #define BUILD 0 // Run make generate in order for this to take effect diff --git a/test/gold/tools/ethNames/ethNames_show_version.txt b/test/gold/tools/ethNames/ethNames_show_version.txt index 4da802deb4..63f8266b64 100644 --- a/test/gold/tools/ethNames/ethNames_show_version.txt +++ b/test/gold/tools/ethNames/ethNames_show_version.txt @@ -1,2 +1,2 @@ chifra names --version -names version GHC-TrueBlocks//2.2.0-release +names version GHC-TrueBlocks//2.5.0-release