ethclient: fix tx sender cache miss detection #23877
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
types.Sender
caches signers' recovered addresses for transactions.senderFromServer
takes advantage of that with two different invocations:blockhash
andaddr
specified to populate the cache.senderFromServer
will return the already known address, whichtypes.Sender
will remember and attach to the transaction.blockhash
specified to query the cache.senderFromServer
'sEqual
implementation only checks theblockhash
, so if the address was previously cached for this block hash,types.Sender
will remember that and return it. However, if the cache misses,senderFromServer
should return an error, as it doesn't know the address. That's what this PR fixes. Previously, the check for a cache miss was ifblockhash
was empty, which is never the case. This PR fixes that and changes the check to ifaddr
is empty, which is the case whensenderFromServer
is being used to query the cache instead of populate it. Now, when that happens buttypes.Sender
's cache misses,senderFromServer
will correctly return an error.This mechanism is used by
*ethclient.Client
'sTransactionSender
method. This bug manifested as that method returning an empty address when the cache missed, instead of querying the server as intended.