-
Notifications
You must be signed in to change notification settings - Fork 28
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(l1): fix hangs on the tx spammer #1413
Conversation
…ons on double getPayloads
Now the behaviour we've seen between lighthouse and geth is replicated with our node. Here are some logs showing it: CL Logs
El Logs
As we've seen with geth, 2 payload request were received, one with the old payload which was discarded by the consensus client due to being the same as a previous one, and the next one correct, not missing the block and publishing the correct one. There is also possible to just receive the old payload (which we've also seen in geth) and miss the block entirely. |
ENCLAVE ?= lambdanet | ||
|
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.
This change was made to been able to compare two different executions at the same time using make localnet
with different enclaves.
Motivation
The spammer hanged in one of 2 forms, either it wait for tx that weren't added in the second phase of each spam and timeout after 5 minutes resuming the execution or it hangs ad infinitum if the issue happens in the first phase. This indicate that we were losing transactions.
Description
This is a mid-term solution, the explanation about what happened is done on the issue, in this particular comment, but TLDR: we were receiving
engine_getPayload
request with oldpayload_ids
and we filled AGAIN the block but with new transactions. the block was discarded as orphan by consensus and we lost those txs from mempool on the immediate subsequent request. This was caused because we were missing the update of the payload when it was modified in the second step of our build process.The current solution stores the whole payload, i.e. the block, block value and the blobs bunde. Given our current implementation (a naive 2-step build process) we either filled the transaction and ended the build process or not, a simple closed flag was added to the payload store to signal this and avoid refilling transactions, this is clearer than just check if there are any but could be changed if preferred.
Next Steps
Enhance the build process to make it async and interactive instead of the naive 2-step all-or-nothing implementation we had right now.
Resolves #1120