eth/fetcher: always expect transaction metadata in announcement (#30288)

This pull request drops the legacy transaction retrieval support from before
eth68, adding the restrictions that transaction metadata must be provided
along with the transaction announment.
pull/30305/head
rjl493456442 1 month ago committed by GitHub
parent 2f2e5b088a
commit c4b01d80b9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 19
      eth/fetcher/tx_fetcher.go
  2. 967
      eth/fetcher/tx_fetcher_test.go

@ -114,7 +114,7 @@ var errTerminated = errors.New("terminated")
type txAnnounce struct { type txAnnounce struct {
origin string // Identifier of the peer originating the notification origin string // Identifier of the peer originating the notification
hashes []common.Hash // Batch of transaction hashes being announced hashes []common.Hash // Batch of transaction hashes being announced
metas []*txMetadata // Batch of metadatas associated with the hashes (nil before eth/68) metas []*txMetadata // Batch of metadata associated with the hashes
} }
// txMetadata is a set of extra data transmitted along the announcement for better // txMetadata is a set of extra data transmitted along the announcement for better
@ -137,7 +137,7 @@ type txRequest struct {
type txDelivery struct { type txDelivery struct {
origin string // Identifier of the peer originating the notification origin string // Identifier of the peer originating the notification
hashes []common.Hash // Batch of transaction hashes having been delivered hashes []common.Hash // Batch of transaction hashes having been delivered
metas []txMetadata // Batch of metadatas associated with the delivered hashes metas []txMetadata // Batch of metadata associated with the delivered hashes
direct bool // Whether this is a direct reply or a broadcast direct bool // Whether this is a direct reply or a broadcast
} }
@ -260,13 +260,13 @@ func (f *TxFetcher) Notify(peer string, types []byte, sizes []uint32, hashes []c
underpriced++ underpriced++
default: default:
unknownHashes = append(unknownHashes, hash) unknownHashes = append(unknownHashes, hash)
if types == nil {
unknownMetas = append(unknownMetas, nil) // Transaction metadata has been available since eth68, and all
} else { // legacy eth protocols (prior to eth68) have been deprecated.
// Therefore, metadata is always expected in the announcement.
unknownMetas = append(unknownMetas, &txMetadata{kind: types[i], size: sizes[i]}) unknownMetas = append(unknownMetas, &txMetadata{kind: types[i], size: sizes[i]})
} }
} }
}
txAnnounceKnownMeter.Mark(duplicate) txAnnounceKnownMeter.Mark(duplicate)
txAnnounceUnderpricedMeter.Mark(underpriced) txAnnounceUnderpricedMeter.Mark(underpriced)
@ -892,13 +892,8 @@ func (f *TxFetcher) scheduleFetches(timer *mclock.Timer, timeout chan struct{},
if len(hashes) >= maxTxRetrievals { if len(hashes) >= maxTxRetrievals {
return false // break in the for-each return false // break in the for-each
} }
if meta != nil { // Only set eth/68 and upwards
bytes += uint64(meta.size) bytes += uint64(meta.size)
if bytes >= maxTxRetrievalSize { return bytes < maxTxRetrievalSize
return false
}
}
return true // scheduled, try to add more
}) })
// If any hashes were allocated, request them from the peer // If any hashes were allocated, request them from the peer
if len(hashes) > 0 { if len(hashes) > 0 {

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save