以太坊

以太坊简介

Posted by Kang on January 31, 2020
  1. mining puzzle(挖矿方式)

  区块链:计算密集型,导致挖矿设备趋于专业化。

  以太坊:为避免挖矿专业化,采用了memory hard(对内存要求高)的方式,在一定程度上限制ASIC芯片的使用。

  1. Double spending

  交易发布者在交易head中维护一个nonce计数器(故参与了签名),记录了这个交易账户有史以来一共发布过多少个交易。在系统所有全局节点中,维护了每个账户的balance和nonce,当交易确定后更新nonce为交易值,这样通过判断nonce值可以防止双花。 – 怎么防止nonce回退??

  1. 以太坊账户分类
  • 外部账户:也叫普通账户,类似比特币账户,由公私钥对控制,存在balance+nonce计数器等其它属性;
  • 合约账户:也存在balance&nonce,同时存在代码code和状态stage,其不能主动发起一个交易,所有的交易都由外部账户发起,发起后可以调用合约账户,一个合约账户可以通过msg调用另外一个合约账户。
  1. 以太坊树
  • 状态树:提供账户余额等管理。
  • 交易树:发布区块时,这些交易会组织成交易树。其提供Merkel Proof。向轻节点证明某个交易是打包在区块中的。
  • 收据树:以太坊中的每一笔交易都有对应的收据,收据树的信息是为了方便一些相关账户的查询,向轻节点证明某个交易的执行结果。
  1. 以太坊布隆过滤器

  

  1. 权益证明

  通过评估你持有代币的数量和时长来决定你获得记账权的机率。

  1. 以太坊预挖矿(pre_mining)与预售(pre-sale)

  早期预留部分以太币币给开发者(类似创始人持股),pre-sale则是将预留货币进行销售以获得资金(类似拉风投)

  1. 智能合约回滚

      当一个智能合约调用另外一个时,被调用方出现异常,其自身将会回滚,调用方依据调用方式决定是否进行回滚:直接调用将级联回滚,使用call方式则会得到false返回值。

      方法的回滚可以认为是事务式的,方法中整个操作均回滚,相当于没有执行本方法。

  2. 发布到区块链上的交易是否都是成功的?

  不是,失败的交易也是要被扣除gas fee的,而只有发布出来被确认才能真正的扣除,所以失败的交易也会被发布出来。

  在交易执行收据Receipt结构中,存在Status域,其标记了交易的执行结果。

  1. 智能合约支不支持多核并行处理?

      智能合约语言(solidity)没有做多线程支持。以太坊是一个交易驱动的状态机,这个状态机必须是完全确定的(故任何导致不确定的操作都不会支持)。给定一个智能合约,给定一个输入,其转移到下一个状态必须是确定的。多个核可能对内存的访问顺序不同,这样最后构造出来的三棵树(状态树、交易树、收据树)根hash值可能不确定。

  2. 自定义自能合约发布及使用流程?

  3. 智能合约使用场景

  智能合约是一种状态机管理,所以其适用在控制逻辑编写,服务于互不信任的实体之间建立共识的操作才写在智能合约中,对于计算和存储类业务不适用(慢且汽油费贵),这种场景比较推荐分布式或者云服务。