参考 https://github.com/safe-global/safe-contracts/blob/main/test/libraries/Migration.spec.ts
具体步骤就是先编写一个Migration合约,为了和多签钱包合约保持一样的 storage 布局和此合约必须继承 GnosisSafeStorage 合约,然后写一个 migrate
方法用于改变 singleton
地址的值(多签钱包的逻辑由 singleton
负责执行,通过修改 singleton
地址可以升级用户的钱包合约,singleton
通常是部署的 GnosisSafe.sol 或者 GnosisSafeL2.sol 合约)。
然后部署 Migration 合约,再调用多签钱包合约的 execTransaction
方法用 DelegateCall 的方式去调用 Migration 合约的 migrate
方法,之后多签钱包合约的 singleton
地址就会被改变。