-
Notifications
You must be signed in to change notification settings - Fork 1.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix batch tx send encoding #11500
Merged
Merged
Fix batch tx send encoding #11500
Changes from all commits
Commits
Show all changes
13 commits
Select commit
Hold shift + click to select a range
3533802
Changed signed tx encoding to use MarshalBinary
amit-momin 6cfd636
Added tests and CHANGELOG entry
amit-momin 9a344d1
Fixed linting
amit-momin fee5ee9
Cleaned up ClassifySendError method signature
amit-momin c01b243
Fixed linting
amit-momin 6f4e4dc
Consolidated error logs to avoid duplicate logging by caller
amit-momin fc715bb
Merge branch 'develop' into bug/fix-batch-tx-encoding
amit-momin cd63e08
Isolated encoding change for batch resend logic
amit-momin 839b06c
Reverted models test changes
amit-momin bab739a
Merge branch 'develop' into bug/fix-batch-tx-encoding
amit-momin a23125c
Added comments
amit-momin 07994cc
Merge branch 'develop' into bug/fix-batch-tx-encoding
amit-momin 0fc4c3d
Merge branch 'develop' into bug/fix-batch-tx-encoding
amit-momin File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -35,25 +35,36 @@ func batchSendTransactions( | |
reqs := make([]rpc.BatchElem, len(attempts)) | ||
ethTxIDs := make([]int64, len(attempts)) | ||
hashes := make([]string, len(attempts)) | ||
now := time.Now() | ||
successfulBroadcast := []int64{} | ||
for i, attempt := range attempts { | ||
ethTxIDs[i] = attempt.TxID | ||
hashes[i] = attempt.Hash.String() | ||
// Decode the signed raw tx back into a Transaction object | ||
signedTx, decodeErr := GetGethSignedTx(attempt.SignedRawTx) | ||
if decodeErr != nil { | ||
return reqs, now, successfulBroadcast, fmt.Errorf("failed to decode signed raw tx into Transaction object: %w", decodeErr) | ||
} | ||
// Get the canonical encoding of the Transaction object needed for the eth_sendRawTransaction request | ||
// The signed raw tx cannot be used directly because it uses a different encoding | ||
txBytes, marshalErr := signedTx.MarshalBinary() | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Could you explain via a comment, why do we have to decode the raw tx and encode it again before sending in batched req? |
||
if marshalErr != nil { | ||
return reqs, now, successfulBroadcast, fmt.Errorf("failed to marshal tx into canonical encoding: %w", marshalErr) | ||
} | ||
req := rpc.BatchElem{ | ||
Method: "eth_sendRawTransaction", | ||
Args: []interface{}{hexutil.Encode(attempt.SignedRawTx)}, | ||
Args: []interface{}{hexutil.Encode(txBytes)}, | ||
Result: &common.Hash{}, | ||
} | ||
reqs[i] = req | ||
} | ||
|
||
logger.Debugw(fmt.Sprintf("Batch sending %d unconfirmed transactions.", len(attempts)), "n", len(attempts), "ethTxIDs", ethTxIDs, "hashes", hashes) | ||
|
||
now := time.Now() | ||
if batchSize == 0 { | ||
batchSize = len(reqs) | ||
} | ||
|
||
successfulBroadcast := []int64{} | ||
for i := 0; i < len(reqs); i += batchSize { | ||
j := i + batchSize | ||
if j > len(reqs) { | ||
|
Oops, something went wrong.
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
what scenarios can the attempt.FromAddress differ from the tx.FromAddress?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we're just resorting to getting the from address from the attempt here because you can't get it through the
go-ethereum
Transaction
txThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
sorry didnt see you previous message :)