Do not verify signatures for nw transactions that was already processed #4949
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.
When handling user transaction coming from narwhal we currently do two things before setting shared locks:
(1) Verify signatures on the transactions
(2) Verify if transaction were already processed
If you compare consensus utilization and txn verification utilization in consensus you can see that essentially 99% of the consensus task is spent in signature verification. (Details on how utilization counters work are in #4584)
This PR swaps those two steps - we simply do not verify signatures on the transaction that was already processed.
Because signature verification dominates time in consensus task, this change will significantly increase consensus task throughput.
Given that currently each node submits transaction to consensus this effect will be massive - for example for private testnet this will increase shared txn throughput by 20x. (We can confirm this by looking at consensus utilization after deploying this fix)
We should still look into not submitting txn from each node to consensus, but this fix is still useful regardless of that.