-
Notifications
You must be signed in to change notification settings - Fork 11.9k
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
Bubble up returndata
from reverted Create2 deployments
#5052
Merged
Amxx
merged 8 commits into
OpenZeppelin:master
from
dimitriospapathanasiou:feature/fix-issue-#5046
May 27, 2024
Merged
Changes from all commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
fbcf8de
Update contract deployment to fix returndata ignoring
dimitriospapathanasiou 446eb84
refactor revert bubble + testing
Amxx f31d3cc
Update Create2.sol
Amxx a45f786
up
ernestognw 705d715
Fix upgradeable tests
ernestognw f51b439
Update .changeset/nervous-eyes-teach.md
ernestognw 15e4aca
Merge branch 'master' into feature/fix-issue-#5046
ernestognw 42fe09f
Merge branch 'master' into feature/fix-issue-#5046
Amxx File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
--- | ||
'openzeppelin-solidity': minor | ||
--- | ||
|
||
`Create2`: Bubbles up returndata from a deployed contract that reverted during construction. |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
// SPDX-License-Identifier: MIT | ||
|
||
pragma solidity ^0.8.20; | ||
|
||
contract ConstructorMock { | ||
bool foo; | ||
|
||
enum RevertType { | ||
None, | ||
RevertWithoutMessage, | ||
RevertWithMessage, | ||
RevertWithCustomError, | ||
Panic | ||
} | ||
|
||
error CustomError(); | ||
|
||
constructor(RevertType error) { | ||
// After transpilation to upgradeable contract, the constructor will become an initializer | ||
// To silence the `... can be restricted to view` warning, we write to state | ||
foo = true; | ||
|
||
if (error == RevertType.RevertWithoutMessage) { | ||
revert(); | ||
} else if (error == RevertType.RevertWithMessage) { | ||
revert("ConstructorMock: reverting"); | ||
} else if (error == RevertType.RevertWithCustomError) { | ||
revert CustomError(); | ||
} else if (error == RevertType.Panic) { | ||
uint256 a = uint256(0) / uint256(0); | ||
a; | ||
} | ||
} | ||
} |
This file contains 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
This file contains 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
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.
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 snippet is explicitly mentioned in Solidity documentation as something that is not memory-safe.
https://docs.soliditylang.org/en/latest/assembly.html#memory-safety
cc @Amxx @ernestognw
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.
See #5057
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.
Been thinking about the consequences of this, but does it even matter given it's reverting? It's "memory unsafe" because it may overwrite memory but there's no way to do something unsafe afterwards.
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.
Yeah the docs say it matters if the assembly block reverts and this exact snippet is used to illustrate the point.
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.
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.
Yeah, it's kinda unclear what's the relationship between being "mainly about the optimizer" and still needing to ensure memory safetiness
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.
Yeah I should look into this for my next blog post to give you a reason to read it. 😁