首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >智能合同存储

智能合同存储
EN

Ethereum用户
提问于 2018-08-30 22:32:55
回答 1查看 1.2K关注 0票数 2

我正准备创建我的第一份智能合同,我遇到了以下问题:

  1. 在具体存储契约代码的地方,我看到它是在区块链中存储的,这是否意味着每一个拥有完整区块链实例的节点都有契约代码呢?
  2. 一个矿工为了开采一个新的区块,应该先运行所有的合同调用并设置值,然后开始寻找POW的解谜和现在的价值,如果是这样的话,我们是否可以让ASIC矿工像比特币一样为values服务,因为他们只能做一项特定的工作,但是每次运行合同代码都是不同的?
  3. 当矿工想要验证有合同调用的事务时,它应该运行合同代码吗?如果是这样的话,这是否意味着每一份合同都要多次运行,直到最终有一位矿工找到合适的现在并解决pow难题?如果这是真的,就意味着合同代码不必要地运行了很多次?
  4. 契约变量的值存储在哪里,我的意思是,如果我们有一个可靠的映射,它可以包含大量的键值,那么这个键在哪里存储呢?如果它们存储在块链中,那么它们就应该存储在每个具有块链副本的节点中,这意味着大量的数据需要一次又一次地存储,这将是一种存储浪费。
  5. 当契约自毁发生了什么时,它提到代码将从块链中删除,所以它是否意味着事务使其不可用于后续事务,或者它真的改变了块链并将其从旧的块中删除?
EN

回答 1

Ethereum用户

回答已采纳

发布于 2018-08-30 22:39:10

在哪里存储契约代码,我读到它是在块链中存储的,那么这是否意味着每个具有完整块链实例的节点也有契约代码呢?

状态被存储在区块链中,是的。您也正确地说,每个完整节点都有整个块链的副本,包括所有状态。

一个矿工为了开采一个新的区块,应该先运行所有的合同调用并设置值,然后开始寻找POW的解谜和现在的价值,如果是这样的话,我们能让ASIC矿工像比特币一样为values服务,因为他们只能做特定的工作,但是每次运行合同代码都是不同的吗?

矿工的工作就是简单地解决战俘之谜。当他们这样做的时候,他们就有能力开采这个区块。现在,它们选择希望包含在该特定块中的事务。这些事务定义了所做的所有状态更改,因此从技术上讲,矿工不必对此进行调查。

就ASIC问题而言,Ethereum是设计为内存硬的,这意味着ASIC很难挖掘。

当矿工想要验证具有合同调用的事务时,应该运行合同代码吗??如果是这样的话,这是否意味着每一份合同都要多次运行,直到最终有一位矿工找到合适的现在并解决pow难题?如果是这样的话,就意味着合同代码不必要地运行了很多次?

我上面的答案也是这个问题的答案。总之,矿工只需选择一个事务。它没有多次运行的原因是因为只有一个矿工首先找到了这个块,并因此得到了回报。这是唯一一个将事务以及合同调用广播到Ethereum网络的矿工。

契约变量的值存储在哪里,我的意思是,如果我们有一个可靠的映射,它可以包含大量的键值,那么这个键在哪里存储?如果它们存储在块链中,那么它们就应该存储在每个具有块链副本的节点中,这意味着大量的数据需要一次又一次地存储,这将是一种存储浪费。

见答案一。您是正确的--块链(按其现有状态)效率很低,而且速度很慢,每个节点都持有此状态的副本。

当契约自毁发生了什么时,它提到代码将从块链中删除,所以它是否意味着事务使其无法用于后续事务,还是真的改变了块链并将其从旧块中删除?

它不会改变区块链,因为这是不可能的。它所做的(而不是过于技术性的)是不允许任何人再次调用该合同。最好的示例是平价钱包开发,因为它是使用selfdestruct的关键示例。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/57789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档