-
Notifications
You must be signed in to change notification settings - Fork 973
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
1.4.1 Feature: Backport migration contracts to 1.4.1 #795
Conversation
Fixes: #787 This PR adds a general migration contract that takes address of the Safe, SafeL2 and fallback handler contracts during deployment. The contract allows Safe to update the Singleton at `address(0)`. - Uses error strings rather than error types because Solidity version 0.7.6 doesn't support it. As of now tests cover below migration paths: - 1.3.0 to 1.5.0 - 1.3.0 to 1.4.1 - 14.1 to 1.5.0 See `SafeMigration.spec.ts` to see how tests are organised. Do share if you any thoughts to better run same tests on different migration paths. The migration contract stores address of the Safe singletons and fallback handler rather than using code hash and requiring the user to provide singleton address as described in the issue. The reason being as follows: Checking codehash of the target singleton means user has to provide the address of the target singleton. Also, checking code hash has higher gas costs. The only argument for using code hash for upgrades is that it also allows unofficial singletons to be used for migration using official migration contract. But, users/projects can also deploy their own version of migration contract by providing singleton addresses in the constructor and have similar security guarantees as the official migration contract. - Create a general migration contract which is not tightly bound to any specific Safe version - Update tests - Remove other migration contract as this PR supersedes it Unlike `Safe150Migration.sol`, this new contract does not check if slot(0) of the contract stores an address having some non-empty code. I think this check is not need because this contract is not intended to be used in general by other proxy contracts and checking slot(0) value is only a partially correct way. Would like to know thought of others. --------- Co-authored-by: Nicholas Rodrigues Lordello <[email protected]> Co-authored-by: Shebin John <[email protected]> Co-authored-by: Mikhail <[email protected]>
* Add contract to migrate a Safe from not L2 to L2 * Related to safe-global/safe-transaction-service#1703
Pull Request Test Coverage Report for Build 10039158260Details
💛 - Coveralls |
Nit: can we rename the branch to |
/** | ||
* @notice Address of this contract | ||
*/ | ||
address public immutable MIGRATION_SINGLETON; |
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.
These lints are annoying - can we fix the linter settings?
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.
I think it's fixed by upgrading the linter to the latest version, I would ignore it (like human ignore) and not add anything to keep the diff to a minimum.
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.
LGTM, assume that the SafeL2Setup
contract will come in a follwo up?
oops, I absolutely missed it - but I think a follow up PR is better anyway |
This PR implements #781.
It migrates the migration contracts from:
I had to refactor tests quite a bit because a lot has changed since the release of 1.4.1 like we added typechain types, migrated to ethers v6, etc