Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var DumpblocksCmd = &cobra.Command{ Use: "dumpblocks start end", Short: "Export a range of blocks from a JSON-RPC endpoint.", Long: usage, Args: cobra.MinimumNArgs(2), PersistentPreRun: func(cmd *cobra.Command, args []string) { rpcUrlFlagValue := flag_loader.GetRpcUrlFlagValue(cmd) inputDumpblocks.RpcUrl = *rpcUrlFlagValue }, PreRunE: func(cmd *cobra.Command, args []string) error { return checkFlags(args) }, RunE: func(cmd *cobra.Command, args []string) error { ctx := cmd.Context() ec, err := ethrpc.DialContext(ctx, inputDumpblocks.RpcUrl) if err != nil { return err } var wg sync.WaitGroup log.Info().Uint("thread", inputDumpblocks.Threads).Msg("Thread count") var pool = make(chan bool, inputDumpblocks.Threads) start := inputDumpblocks.Start end := inputDumpblocks.End for start <= end { rangeStart := start rangeEnd := min(rangeStart+inputDumpblocks.BatchSize-1, end) pool <- true wg.Add(1) log.Info().Uint64("start", rangeStart).Uint64("end", rangeEnd).Msg("Getting range") go func() { defer wg.Done() for { failCount := 0 blocks, err := util.GetBlockRange(ctx, rangeStart, rangeEnd, ec, inputDumpblocks.OnlyTxHashes) if err != nil { failCount = failCount + 1 if failCount > 5 { log.Error().Uint64("rangeStart", rangeStart).Uint64("rangeEnd", rangeEnd).Msg("Unable to fetch blocks") break } time.Sleep(5 * time.Second) continue } blocks = filterBlocks(blocks) if inputDumpblocks.ShouldDumpBlocks { err = writeResponses(blocks, "block") if err != nil { log.Error().Err(err).Msg("Error writing blocks") } } if inputDumpblocks.ShouldDumpReceipts { failCount = 0 receipts, err := util.GetReceipts(ctx, blocks, ec, inputDumpblocks.BatchSize) if err != nil { failCount = failCount + 1 if failCount > 5 { log.Error().Uint64("rangeStart", rangeStart).Uint64("rangeEnd", rangeEnd).Msg("Unable to fetch receipts") break } time.Sleep(5 * time.Second) continue } err = writeResponses(receipts, "transaction") if err != nil { log.Error().Err(err).Msg("Error writing receipts") } } break } <-pool }() start = rangeEnd + 1 } log.Info().Msg("Finished requesting data starting to wait") wg.Wait() log.Info().Msg("Done") return nil }, }
dumpblocksCmd represents the dumpblocks command
Functions ¶
This section is empty.
Types ¶
Click to show internal directories.
Click to hide internal directories.