【问题标题】:How is a smart contract lived on Ethereum (stored and opened for state change)以太坊上的智能合约如何存在(存储和打开状态更改)
【发布时间】:2023-03-21 11:55:01
【问题描述】:

可以将智能合约编译成 EVM 字节码 (Ethereum Virtual Machine) 并部署到具有特定区块高度的区块上的以太坊区块链上,并返回交易哈希。

但智能合约以何种方式存储在区块中?区块链如何记录状态变化,当交易已被发布以与智能合约交互以改变其状态(例如变量的值)?

【问题讨论】:

  • 不清楚你在问什么。您是否在询问区块链数据如何存储在以太坊客户端之一(例如 geth 或 Parity)中的内部结构?如果有,是哪一个?如果不是,您问的是什么
  • @smarx 很抱歉造成混乱。我在问如何将数据以字节码的格式存储在以太坊链中。
  • 我还是不明白你的问题。合约的代码存储为字节码。交易不是,合约的状态也不是。两者都在 Merkle 树中,并且块头包含这些树的根哈希。这有帮助吗?
  • @smarx 是的,谢谢!这就是我要问的!那么当一个新的交易到达智能合约改变它的状态时,所有与这个智能合约相关的之前的交易都会被迭代,以确保状态改变是好的?
  • 这在理论上是正确的,因为当前状态来自所有先前的交易。但是节点会在运行过程中保持该状态,因此它们不需要处理旧事务来重新构建它。

标签: bytecode blockchain ethereum smartcontracts


【解决方案1】:

你需要区分存储在区块链中的两个东西(它们都是无状态和不可变的):

  • 智能合约模板
  • 交易/事件

最终的智能合约状态不会直接存储在区块中。它是由节点(以太坊虚拟机)从前面提到的模板和交易中计算出来的。

【讨论】:

    猜你喜欢
    • 2021-06-29
    • 2019-04-07
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多