以太坊作为全球领先的智能合约平台,其核心魅力在于允许开发者部署和执行自动化的、不可篡改的协议——即智能合约,这些定义了复杂逻辑和规则的智能合约,究竟是如何存储在以太坊这个庞大的分布式网络中的呢?本文将深入探讨以太坊智能合约的存储机制。

要理解智能合约的存储,首先需要明确一个关键概念:智能合约本身与其状态是两个不同但紧密相关的部分。

智能合约代码的存储:合约账户中的代码哈希与代码对象

在以太坊中,有两种主要类型的账户:外部账户(EOA,由用户私钥控制)和合约账户(由代码控制),智能合约的部署,本质上是创建了一个合约账户,并将合约代码与该账户关联起来。

  1. 合约部署过程: 当开发者部署一个智能合约时,他会将编写好的合约代码(通常是以Solidity等高级语言编写,然后编译成字节码)发送到以太坊网络,这个交易的目标地址是一个空地址,以太坊网络会识别出这是一个合约创建交易。

  2. 代码存储

    • 代码对象(Code Object):以太坊客户端(如Geth, Parity)在收到合约创建交易后,会将编译后的合约字节码作为一个“代码对象”存储在区块链的特定区域,这个代码对象是与新创建的合约账户地址直接关联的。
    • 代码哈希(Code Hash):每个合约账户都有一个名为codeHash的字段,这个codeHash是该合约代码对象的Keccak-256哈希值,值得注意的是,以太坊规定,空字符串的哈希值是一个特定的已知值(c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470),如果codeHash不是这个值,就意味着该账户是一个合约账户,其对应的代码对象存储在区块链上。
  3. 随机配图