以太坊 / 主题阅读

以太坊合约地址的生成机制与计算方式

以太坊合约地址由创建者地址和nonce或salt值生成,通过CREATE或CREATE2操作实现。合约地址在部署前可计算,支持提前引用,与外部账户地址生成方式不同。

图解以太坊智能合约中的概念
主题资料配图,非新闻现场照片 · 配图:图解以太坊智能合约中的概念

以太坊合约地址的生成机制

以太坊合约账户具有42位十六进制地址,例如0x06012c8cf97bead5deae237070f9587f8e7a266d。该地址由合约创建者的地址和该地址已发送的交易次数(即“nonce”)共同决定。通过CREATE操作,合约地址得以生成。

CREATE2操作对合约地址的影响

使用CREATE2操作部署合约时,地址由创建者的地址、创建者选择的“salt”值以及合约创建代码的哈希共同决定。这种方式不依赖nonce,使得合约地址在合约部署前即可计算,并且在创建者发送其他交易时保持不变。

合约地址的计算与部署前引用

由于CREATE2操作允许在合约部署前计算地址,因此可以提前引用尚未部署的合约。这种机制为智能合约的部署和交互提供了灵活性,特别是在需要预知合约地址的场景中。

合约地址与外部账户地址的区别

外部账户地址由私钥生成,而合约地址由创建者地址和nonce或salt值生成。外部账户地址长度为42位,合约地址同样为42位,但生成方式不同,且合约地址由代码逻辑控制,无法更改。

资料与延伸阅读

你可以通过以下原始资料核对文中概念,并继续深入阅读。

  1. Ethereum accounts | ethereum.org ↗
  2. 配图:图解以太坊智能合约中的概念 ↗
← 更多以太坊文章返回顶部 ↑