我正准备创建我的第一份智能合同,我遇到了以下问题:
发布于 2018-08-30 22:39:10
在哪里存储契约代码,我读到它是在块链中存储的,那么这是否意味着每个具有完整块链实例的节点也有契约代码呢?
状态被存储在区块链中,是的。您也正确地说,每个完整节点都有整个块链的副本,包括所有状态。
一个矿工为了开采一个新的区块,应该先运行所有的合同调用并设置值,然后开始寻找POW的解谜和现在的价值,如果是这样的话,我们能让ASIC矿工像比特币一样为values服务,因为他们只能做特定的工作,但是每次运行合同代码都是不同的吗?
矿工的工作就是简单地解决战俘之谜。当他们这样做的时候,他们就有能力开采这个区块。现在,它们选择希望包含在该特定块中的事务。这些事务定义了所做的所有状态更改,因此从技术上讲,矿工不必对此进行调查。
就ASIC问题而言,Ethereum是设计为内存硬的,这意味着ASIC很难挖掘。
当矿工想要验证具有合同调用的事务时,应该运行合同代码吗??如果是这样的话,这是否意味着每一份合同都要多次运行,直到最终有一位矿工找到合适的现在并解决pow难题?如果是这样的话,就意味着合同代码不必要地运行了很多次?
我上面的答案也是这个问题的答案。总之,矿工只需选择一个事务。它没有多次运行的原因是因为只有一个矿工首先找到了这个块,并因此得到了回报。这是唯一一个将事务以及合同调用广播到Ethereum网络的矿工。
契约变量的值存储在哪里,我的意思是,如果我们有一个可靠的映射,它可以包含大量的键值,那么这个键在哪里存储?如果它们存储在块链中,那么它们就应该存储在每个具有块链副本的节点中,这意味着大量的数据需要一次又一次地存储,这将是一种存储浪费。
见答案一。您是正确的--块链(按其现有状态)效率很低,而且速度很慢,每个节点都持有此状态的副本。
当契约自毁发生了什么时,它提到代码将从块链中删除,所以它是否意味着事务使其无法用于后续事务,还是真的改变了块链并将其从旧块中删除?
它不会改变区块链,因为这是不可能的。它所做的(而不是过于技术性的)是不允许任何人再次调用该合同。最好的示例是平价钱包开发,因为它是使用selfdestruct的关键示例。
https://ethereum.stackexchange.com/questions/57789
复制相似问题