Best effort for decoding nested errors in reverts#98
Open
davecrighton wants to merge 4 commits intohyperledger:mainfrom
Open
Best effort for decoding nested errors in reverts#98davecrighton wants to merge 4 commits intohyperledger:mainfrom
davecrighton wants to merge 4 commits intohyperledger:mainfrom
Conversation
Signed-off-by: Dave Crighton <dave.crighton@kaleido.io>
Signed-off-by: Dave Crighton <dave.crighton@kaleido.io>
Signed-off-by: Dave Crighton <dave.crighton@kaleido.io>
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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 PR creates a common utility function that can be used to give a best-effort decoding of nested error strings in revert reasons. See hyperledger/firefly#1717 for further details.
The logic here is to scan to unwrap an error string as normal then walk through it looking at 4 byte chunks and comparing that to the list of known error ABI selectors (including the default). If we detect a known error ABI then we use the existing methods to decode and format this otherwise we will recursively unwrap up to depth 10.
If we are unable to decode, or if any error string contains non printable characters then the output is hex encoded instead.