在 工厂合约 一文中,我们了解了两种创建合约的方式:
- CREATE 创建的合约地址由 创建者地址 和 创建者Nonce 确定
- CREATE2 创建的合约地址由 创建者地址 和 salt 和 合约字节码 确定
在同一地址部署不同合约的步骤:
- 使用 CREATE2 部署 代理合约
- 代理合约 使用 CREATE 部署 合约A
- 销毁 合约A 和 代理合约
- 第二次使用 CREATE2 部署 代理合约
- 代理合约 使用 CREATE 部署 合约B
在上面的过程中,在第1步和第4步,只要保证 salt 和 合约字节码 不变,代理合约地址就不变。第2步和第4步中,代理合约 地址和Nonce都没有变,所以即使 合约A 和 合约B 不同,它们部署的地址也是相同的。
参考