30 GnosisSafe合约如何完成合约升级?

  • 官方的升级方法(非openZepplin+hardhat插件合约升级)
请先 登录 后评论

最佳答案 2022-10-10 16:21

参考 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 地址就会被改变。

请先 登录 后评论

其它 0 个回答

  • 1 关注
  • 1 收藏,2544 浏览
  • KT 提出于 2022-10-10 11:25