forked from cerc-io/plugeth
core, core/rawdb, eth/sync: no tx indexing during snap sync (#28703)
This change simplifies the logic for indexing transactions and enhances the UX when transaction is not found by returning more information to users. Transaction indexing is now considered as a part of the initial sync, and `eth.syncing` will thus be `true` if transaction indexing is not yet finished. API consumers can use the syncing status to determine if the node is ready to serve users.
This commit is contained in:
+11
-3
@@ -230,8 +230,8 @@ func (t *Transaction) resolve(ctx context.Context) (*types.Transaction, *Block)
|
||||
return t.tx, t.block
|
||||
}
|
||||
// Try to return an already finalized transaction
|
||||
tx, blockHash, _, index, err := t.r.backend.GetTransaction(ctx, t.hash)
|
||||
if err == nil && tx != nil {
|
||||
found, tx, blockHash, _, index, _ := t.r.backend.GetTransaction(ctx, t.hash)
|
||||
if found {
|
||||
t.tx = tx
|
||||
blockNrOrHash := rpc.BlockNumberOrHashWithHash(blockHash, false)
|
||||
t.block = &Block{
|
||||
@@ -1509,6 +1509,12 @@ func (s *SyncState) HealingTrienodes() hexutil.Uint64 {
|
||||
func (s *SyncState) HealingBytecode() hexutil.Uint64 {
|
||||
return hexutil.Uint64(s.progress.HealingBytecode)
|
||||
}
|
||||
func (s *SyncState) TxIndexFinishedBlocks() hexutil.Uint64 {
|
||||
return hexutil.Uint64(s.progress.TxIndexFinishedBlocks)
|
||||
}
|
||||
func (s *SyncState) TxIndexRemainingBlocks() hexutil.Uint64 {
|
||||
return hexutil.Uint64(s.progress.TxIndexRemainingBlocks)
|
||||
}
|
||||
|
||||
// Syncing returns false in case the node is currently not syncing with the network. It can be up-to-date or has not
|
||||
// yet received the latest block headers from its pears. In case it is synchronizing:
|
||||
@@ -1527,11 +1533,13 @@ func (s *SyncState) HealingBytecode() hexutil.Uint64 {
|
||||
// - healedBytecodeBytes: number of bytecodes persisted to disk
|
||||
// - healingTrienodes: number of state trie nodes pending
|
||||
// - healingBytecode: number of bytecodes pending
|
||||
// - txIndexFinishedBlocks: number of blocks whose transactions are indexed
|
||||
// - txIndexRemainingBlocks: number of blocks whose transactions are not indexed yet
|
||||
func (r *Resolver) Syncing() (*SyncState, error) {
|
||||
progress := r.backend.SyncProgress()
|
||||
|
||||
// Return not syncing if the synchronisation already completed
|
||||
if progress.CurrentBlock >= progress.HighestBlock {
|
||||
if progress.Done() {
|
||||
return nil, nil
|
||||
}
|
||||
// Otherwise gather the block sync stats
|
||||
|
||||
Reference in New Issue
Block a user