为什么有人会使用create2()内联汇编代码来创建工厂模式中的子合同,而不是使用newContract()来创建"newContract“实例?
使用一种而另一种的好处和缺点是什么?
发布于 2021-06-04 17:19:11
在部署智能契约时,默认情况下使用CREATE操作码。所部署的契约地址按如下方式计算。
keccak256(senderAddress, nonce)稍后将介绍CREATE2操作码,并允许您预先确定合同地址。合同地址是这样计算的。
keccak256(0xFF, senderAddress, salt, bytecode)0xFF参数是防止与CREATE操作码发生冲突的常量。
salt参数是发送方在部署契约时发送的值。
您可能已经猜到,bytecode参数是您想要部署的智能契约的字节码。
如果您想在部署之前预先确定契约地址,您可以简单地循环不同的salt值并选择您喜欢的(或想要的)。
这里可以看到使用CREATE2的一个很好的例子。适用于CREATE2操作码
编辑:使用new关键字创建一个契约要求您了解合同的源代码。使用new关键字创建契约之后,它将返回创建的契约地址。
这还使用后面的CREATE操作码来创建契约。
https://ethereum.stackexchange.com/questions/101336
复制相似问题