在探索以太坊及其他区块链平台的奥秘时,一个常见且核心的问题是:“以太坊智能合约的代码和数据究竟存储在哪里?” 以太坊智能合约本身,包括其代码和状态数据,并不是存储在某个中心化的服务器或数据库中,而是以太坊区块链本身,我们可以从“代码存储”和“数据存储”两个维度来更深入地理解。

智能合约代码:存储在区块链的“世界状态”中

智能合约的代码(通常是以Solidity等语言编写,最终编译为字节码)一旦被部署到以太坊网络上,就成为区块链上不可篡改的一部分。

  1. 交易触发部署:智能合约的部署本质上是一笔特殊的交易(CREATE或CREATE2类型),用户发送包含合约字节码和初始化参数的部署交易到以太坊网络。
  2. 写入区块链:当矿工验证这笔交易并将其打包进一个区块后,合约的字节码就会被永久记录在该区块以及后续的区块中,这意味着合约代码是公开透明且可被所有网络参与者访问的。
  3. 账户抽象:在以太坊中,合约被视为“合约账户”(Contract Accounts),每个合约账户都有一个地址,并且其代码存储在该账户的“存储空间”里,更准确地说,合约代码是账户状态的一部分,而所有以太坊账户的状态共同构成了以太坊的“世界状态”(World State)。
  4. 世界状态存储:世界状态被存储在一个被称为“状态树”(State Trie)的数据结构中,具体来说是“状态对象树”(State Object Trie),它位于每个区块头中,每个合约账户(及其代码和存储数据)都是状态树中的一个叶子节点。

智能合约的代码是以字节码的形式,作为合约账户状态的一部分,存储在以太坊区块链的状态树中

智能合约数据(状态变量):存储在合约的“存储”中

智能合约不仅仅是代码,它还包含数据,即状态变量(State Variables)的值,这些数据存储在何处呢?随机配图