据我所知,部署智能契约的方法有两种:使用Ethereum地址或通过单尔顿工厂智能契约进行正常部署。
何时使用Singleton Factory智能契约来部署智能契约?与正常部署相比,这样做有什么好处?
发布于 2022-01-05 00:17:36
不确定这个答案是否有一个正确的答案。
就我个人而言,我开始为安全使用一个单例工厂(有不同的工厂),因为我们希望使每个人都能够将合同部署到相同的地址(例如,在本地网络上)。
但这并不是唯一的优势。通过使用这样的工厂,合同地址本身就是代码的证明(至少在大多数情况下.有很多方法可以绕开)。这样就可以很容易地在网络上验证契约是否相同,因为您只需比较地址。另外,当您的合同是代理合同设置的实现(以前通常称为主副本)契约时,这也提供了额外的安全性层,因为在发生意外自毁的情况下,可以重新部署此契约(请参见奇偶情况)。
在需要更多单个契约实例的情况下,而不是单个实例,我想说的是,使用正常的部署流更有意义。
注意: Singleton Factory依赖于不使用重放保护的预签名事务。不可能在所有网络上使用这一交易,因为有些网络需要重放保护(例如,雪崩和乐观)。
编辑(跟进“有绕过它的方法”):
单例工厂使用create2
操作码使部署尽可能具有确定性。在这种情况下,新合同的地址取决于工厂地址、部署代码和salt。
了解部署代码是如何使用的非常重要。通常,部署代码运行构造函数,将“运行时”代码加载到内存中,然后返回“运行时”代码,以便将其存储在块链中(这里有一个不错的博客帖子 )。
但是,构建部署代码的方式可以是从另一个契约加载代码,在该契约中,代码可以存储在可以更改的变量中。因此,相同的部署代码将生成不同的运行时代码。所以地址是一样的,但是代码会不同。
https://ethereum.stackexchange.com/questions/118009
复制相似问题