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.
This is a claim for the invariants check bounty.
I know the bounty says to provide multiple proofs, but simply running running junod on the genesis file is a quick enough test. Instead of 10 hours, it now takes about 30 seconds - less than 1% of the previous time.
The root problem was not the sequential nature of the invariant checks, but one particular method used by the "can-withdraw" check. The issue is fairly deep in the cosmos code -- ultimately it was an issue with a cache not getting processed appropriately.
I submitted a PR (cosmos/cosmos-sdk#12885) on cosmos-sdk which contains a fix for this issue. It amortizes the cost of processing cache entries and speeds things up dramatically. Since it's a lower level fix, it may also improve/prevent other issues unrelated to this specific issue.
You can get a build of junod with the change included here: (https://github.com/blazeroni/juno-bounty/tree/v9.0.0-invariants).
Let me know if you have any questions or need any more info. Cheers!