以太坊区块链平台以其去中心化和智能合约功能而著称,这些功能为开发者提供了创建可编程资产的能力,在以太坊中,部署智能合约的过程通常通过“create”和“create2”这两个特殊的交易类型来实现,虽然两者都用于部署智能合约,但它们在功能和安全性方面有显著差异。

让我们来了解一下“create”函数,当一个合约使用“create”函数被部署时,它会创建一个新地址,并将控制权转移到该地址,这个新地址就是新部署合约的地址。“create”函数存在一个安全问题,即它允许攻击者通过修改交易中的“value”字段来覆盖新合约的代码,这意味着如果攻击者能够控制发送到“create”交易的交易数据,他们可以插入恶意代码,从而破坏合约的安全性。

为了解决这个问题,以太坊引入了“create2”函数,与“create”不同,“create2”使用了一个称为“盐值”(salt)的额外参数,盐值是一个随机数,它在交易中被包括在内,以确保每次部署合约时使用的地址是唯一的,这样,即使攻击者知道交易的结构,也无法预测或改变部署合约的地址。“create2”提供了更高的安全性,因为它防止了地址覆盖攻击。
虽然“create”和“create2”都可以用于部署智能合约,但“create2”因其额外的安全特性而更受推荐,值得注意的是,并非所有以太坊节点都默认支持“create2”,因此在部署合约时需要确保目标环境支持这一功能,随着以太坊社区对安全性的日益重视,我们可以预见“create2”将在未来成为智能合约部署的标准方式。