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.
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
Add FV specification for ERC20Wrapper #4100
Add FV specification for ERC20Wrapper #4100
Changes from 6 commits
099bf14
03c35b0
2a74f88
4a9b4d2
056cc3f
55aa62a
9f73887
ebf8df6
3e14352
1b621ad
df17e38
8c7ce2b
fbdbddd
3800164
0c57f1b
File filter
Filter by extension
Conversations
Jump to
There are no files selected for viewing
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.
When we specify an
invariant
, is it only checked for the methods listed in this block? What happens if we add a new function in the Solidity code and we don't add it here?I just noticed this in the docs and I find it concerning!
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.
AFAIK:
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.
Can't we write:
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.
since we are in the definition of
totalSupplyIsSmallerThanUnderlyingBalance
that would be saying
totalSupplyIsSmallerThanUnderlyingBalance
holds assumingtotalSupplyIsSmallerThanUnderlyingBalance
. I hope the prover will reject that. It a bit like using a variable inside its own declaration.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.
we could do
sumOfUnderlyingBalancesLowerThanUnderlyingSupply(currentContract, 0);
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.
No, that is not the case according to the docs on invariants. The
preserve
block is included as a precondition, so by using a "recursive"requireInvariant
in its own preserve block, we're just stating that this is an inductive property.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.
Isn't the whole point of an invariant that its a precondition of itself?
I don't understand what requiring it adds, since its already assumed to hold before the function call