以太坊合同执行

时间:2017-09-22 20:44:11

标签: ethereum

这个问题已经被问了很多,我很抱歉我无法用我找到的资源来解决这个问题。但我在这里,我真的很好奇,谢谢你的帮助!

当调用合约时,转换(apply(s,tx))会像BTC中的交易一样附加到链的末尾,对吗?因此,所有矿工都运行代码来创建/验证输出。转换的输出(s')将是带有消息输入的原始合同的状态,对吗?那么转换代码和输出值是否会包含在下一个要挖掘的块中?

因此,如果这一切都是真的,如果您的消息包含过去运行的相同输入,您是否可以只读取包含过去转换和输出的帐户,而无需再次运行合同?

另外,您是否需要等待开采区块以查看智能合约的输出?

我可以在这里解释一下,所以我的问题可能会偏离基础。非常感谢你的帮助!

1 个答案:

答案 0 :(得分:-1)

如果你要理解它是如何工作的(比BTC更复杂的方式),我认为你不能在经济上跳过描述以太坊原则的基本文章。 以下是我发现特别有用的一些链接:

    如果您已经了解BTC,
  • The Ethereum white paper是一个很好的起点。
  • 如果你不是一个训练有素的计算机科学家,
  • The yellow paper真的很难理解,虽然它确实提供了协议的详尽描述,如果你真的坚持下去可以理解(至少我是这么认为的)。
  • This Merkle-Patricia tree描述对于理解以太坊中的树结构是非常宝贵的。必读这一个。
  • This graphical representation基于黄皮书,提供了一个非常有用的以太坊协议视图。

最后,关于交易执行:

话虽如此,我会尽力解决你的一些观点,据我所知(其他贡献者肯定会有评论):

  

调用合约时,转换(apply(s,tx))会像BTC中的交易一样附加到链的末尾,对吗?

重要的是要注意,以太坊区块链中的每个区块都包含对3次尝试的引用:

  • 州特里:包含所有帐户的状态(余额,存储,代码(当帐户是合同时)),
  • 事务trie:包含矿工选择在当前块中包含(和执行)的事务。这些交易由以太坊客户端节点在网络上广播。
  • 收据转发:每笔交易执行一张收据。

    当客户端节点广播事务时,它最终将被矿工拾取并包含在正在挖掘的块的事务trie中。然后,矿工将连续执行(应用)每个事务,这将更新/创建/删除当前块中引用的状态trie中的帐户,从而导致新状态。

我不确定你的意思:

  

转换的输出(s')将是带有消息输入的原始合同的状态,对吗?那么转换代码和输出值是否会包含在下一个要挖掘的块中?

执行事务具有修改全局状态trie中的帐户的效果。已发布的块将具有新的状态trie引用,并且事务trie包含在先前状态trie上应用的事务以生成在当前块中引用的新状态trie。无需等待下一个块查看对帐户的影响。

  

此外,您是否必须等待开采区块以查看智能合约的输出?

不,你可以进行调用而不是广播交易。有关呼叫与事务的简明描述,请参阅here