这个问题已经被问了很多,我很抱歉我无法用我找到的资源来解决这个问题。但我在这里,我真的很好奇,谢谢你的帮助!
当调用合约时,转换(apply(s,tx))会像BTC中的交易一样附加到链的末尾,对吗?因此,所有矿工都运行代码来创建/验证输出。转换的输出(s')将是带有消息输入的原始合同的状态,对吗?那么转换代码和输出值是否会包含在下一个要挖掘的块中?
因此,如果这一切都是真的,如果您的消息包含过去运行的相同输入,您是否可以只读取包含过去转换和输出的帐户,而无需再次运行合同?
另外,您是否需要等待开采区块以查看智能合约的输出?
我可以在这里解释一下,所以我的问题可能会偏离基础。非常感谢你的帮助!
答案 0 :(得分:-1)
如果你要理解它是如何工作的(比BTC更复杂的方式),我认为你不能在经济上跳过描述以太坊原则的基本文章。 以下是我发现特别有用的一些链接:
最后,关于交易执行:
话虽如此,我会尽力解决你的一些观点,据我所知(其他贡献者肯定会有评论):
调用合约时,转换(apply(s,tx))会像BTC中的交易一样附加到链的末尾,对吗?
重要的是要注意,以太坊区块链中的每个区块都包含对3次尝试的引用:
收据转发:每笔交易执行一张收据。
当客户端节点广播事务时,它最终将被矿工拾取并包含在正在挖掘的块的事务trie中。然后,矿工将连续执行(应用)每个事务,这将更新/创建/删除当前块中引用的状态trie中的帐户,从而导致新状态。
我不确定你的意思:
转换的输出(s')将是带有消息输入的原始合同的状态,对吗?那么转换代码和输出值是否会包含在下一个要挖掘的块中?
执行事务具有修改全局状态trie中的帐户的效果。已发布的块将具有新的状态trie引用,并且事务trie包含在先前状态trie上应用的事务以生成在当前块中引用的新状态trie。无需等待下一个块查看对帐户的影响。
此外,您是否必须等待开采区块以查看智能合约的输出?
不,你可以进行调用而不是广播交易。有关呼叫与事务的简明描述,请参阅here。