Skip to content

第一周Live:以太坊白皮书简单解读

Shunda edited this page Jan 15, 2018 · 2 revisions

第一周Live:以太坊白皮书简单解读 by 海罗沃德

文字稿整理:夏玮欹 wiki编辑:顺达

以太坊简介

以太坊白皮书地址:https://github.com/ethereum/wiki/wiki/White-Paper

以太坊是一个用来构建区块链APP的平台,是一个platform。两种主流开发语言:

  • Solidity,类JS的语言
  • Viper,类Python的语言

分享内容

  • 从比特币历史-区块链运作开始

    • 2008年:比特币历史开始。
    • 2009年:bitcoin代码开源
  • 比特币如何挖矿:

    • 银行转帐:A帐户->B帐户
    • 比特币:前一个区块是否存在且有效
    • 区块的时间
  • 比特币一个月增加4GB。用Merkle tree进行存储

  • 比特币可以实现弱化版的智能合约,但是:

    • 缺乏图灵完备性
    • 价值实名
    • 缺乏状态
    • 区块链实名
  • 以太坊通过建立抽象方法层,实现替代协议,从而创建去中心化的应用。通过建立图灵完备的编程语言,允许任何人建立去中心化应用。

  • account包括如下field:

    • nonce:一个计数器,确保每笔交易只能执行一次
    • 以太坊的状态state:由account的对象创建。每个account有20 byte地址。状态变化过程中可以直接在不同account间传递数据
    • ether balance:当前account余额
    • contract code
    • storage:默认为空
    • ether:是以太坊的主要加密燃料,crypto field,用来支付交易手续费
  • 两种account类型

    • externally owner account:通过私钥控制,没有contract code。可以通过创建和交易签名来跟externally account进行交互
    • contract account,可以通过contract代码控制。每一次的conract account收到消息代码都会被激活,允许代码读写internalstorage并且发出一个消息,或者反过来建立一个contract
    • 这里的contract指的不是履行什么或者编译什么,而更像是一个自主的代理,叫autonomous agents驻留在EVM中,在接受到消息时总会执行一段固定的代码
  • transaction在以太坊中指externally account发出的签名的datapackage,包含以下(前三项必须):

    • 接收者
    • 签名的发出者
    • transaction在以太坊中指externally account发出的签名的datapackage

    以上三项是必须的。后面是数据域:start gas,或者gas price

  • 关于gas的计算是这样的。每一个计算步骤会消耗一个gas,不过有一些操作会消耗更高的gas,因为这些操作确实只需要更高的算力来执行或者某些操作需要使用state中存储的数据。每个transaction data byte会消耗五个gas。手续费系统的目的是为了防止攻击者不断地请求计算消耗算力和带宽。由此我们可以看出在一个智能合约中,如果你的算法复杂度比较高的话,那么消耗的gas数量就会很高。所以大家在开发过程中一定要注意优化自己的代码复杂度。

    注意:gas的消耗需要考虑子调用所需要的总量

  • 关于contract有能力发message给其它的contract。message是EVM中的虚拟对象,包含了message的发送者,接收者,message携带的消息与一起传输的ether数量。

  • 以太坊的transcation function里面会进行如下的事项:

    • 首先检查transaction是不是well formed,签名是否有效,nonce是否匹配三个account中的nonce。如果检查失败就返回error
    • 计算transaction fee,用start gas * gas price。然后从签名的发送方的地址余额中减去这个费用并且增加发送方的nonce。如果检查失败就返回error
    • 初始化:让gas=start gas,从中拿走每一个交易步骤使用中的byte对应的gas

    比如a发送一个transaction到b,并且带了1k的gas,b再发送消息给c消耗了600 gas,c return之前消耗了300 gas,这时候b才可以消耗剩下的100 gas
    如果b在接下来的执行步骤中耗尽了100 gas,并且没有完成所有的步骤,那么,消耗给c的600 gas是不会被退还的
    但是刚刚执行计算的费用需要增加到矿工的账户中。
    此外,退还所有的剩余的gas给发送方

    • 从发送方的地址发送transaction value给接收方,如果接收方地址还不存在就创建一个新地址,如果接收方是一个contract就运行这个contract直到结束,或者gas耗尽。
    • 如果value transfer由于发送方的余额不足或者代码执行耗尽了gas而失败,就revert所有的state change
    • 如果任何application返回了error或者gas在到达gas limit之前就耗尽,就返回error
  • 接下来就说一下以太坊的区块链和挖矿

    • 以太坊区块的验证基本逻辑是这样的。首先检验前一个区块是否存在且合法
    • 检查区块时间是否比前一个区块索引大且在十五分钟之内。(比特币是两小时之内)
    • 此外区块number和挖矿难度系数也会被保有存在区块里
    • 检查POW的结果是否正确
    • 看到这个公式。让这个公式里面的state 0 在前一个区块之后。
    • 让这个transaction list成为区块的transaction list
    • 让s_final = sn,但是要附加给矿工的奖励
    • 检查merkle tree的根结点的状态和sfinal是否相等

    以太坊区块链的数据结构跟比特币的主要差别在于:以太坊区块链会有一份交易的列表和最近状态的拷贝

  • 以太坊上运行的应用

    • 第一是经济类。application提供给用户更多强大的方式去管理和签订合同。包括像sub currency,对冲合同,储蓄,钱包等

    例:identity and reputation system。在线的诚信系统和在线的证书授予之类的

    • 第二是半经济类。钱的因素会引入其中,但是依然有很大程度是非货币因素,比如解决计算问题的自动经济激励系统。

    例:financial derivative and stable value currencies是金融衍生品,各种数字货币的防贬值的对冲工具。

    • 第三大类是非经济类,比如在线投票,或者去中心化的政府事务

    例:token system,就是各种ICO的代币 例:DAO。decentralized Autonomous organizations 例:decentralized file storage。类似ipfs

  • 区块链究竟在做什么,究竟能做什么

    • 区块链从被设计出来所面对的问题就是:如何在分布式系统里去掉中心化的节点,并且实现每个节点之间能保持数据的一致性。
    • 如何在分布式系统中去掉这个name node,一个不可逾越的问题就出现了,那就是拜占庭将军问题。
  • 区块链解决拜占庭将军问题的方案:

    • 分布式系统比如hadoop会使用一个name node来维护一套数据和数据存储节点的映射关系,从而实现了分布式的读写数据。
    • 目前最主要的方式是通过挖矿加经济激励机制。
    • 既然有name node,那这个节点就会成为整个系统的瓶颈,系统会当机会有down time多数是因为这个name node节点的问题。
    • 区块链所做的事情其实就是把hadoop这样的分布式系统的name node节点下放到每一个数据结点上,并且提供了一套完善的方案,让这些下放的name node可以保持数据的一致性。
  • 举例说明区块链的真实价值

    • 2016年的10月32号,美国的DNS服国商都受到了严重的DDOS攻击,导致DOWN TIME。攻击导致持续二十几个小时大半个美国的大型网站都无法访问。
    • 随着技术的不断成熟,DNS不需要布署在一个中心化的服务器上,而是每个网站上都布署了DNS解析的服务。
    • 对于DNS服务的这个例子来说,如果所有的DNS服务都下放到各自的网站上,那么这就是一个deck的项目,不需要任何一个公司来维护它,项目也没有down time。
  • 如何判断是否是meaningful blockchain application:引用李笑来的观点

    • 世界上真的需要这东西吗?
    • 它解决了什么以前没有被解决的问题。如果这个问题已经被其它项目解决了,这个项目就很大程度上没有必要出现
    • 去中心化这件事上真的有必要吗。交易所的引擎,中心化的效率才高,去中心化的交易所是一个非常差的idea
    • 它真的需要账务公开吗?如果一个项目是希望他的用户在里面能够赚钱,那么它可以账务公开。账务公开是刚需,去中心化只是手段。如果不需要去中心化也能实现账务公开,那么就没有必要去中心化。但是一些游戏赌博等项目不是让用户赚钱,而是不断地刺激用户来花钱,这个项目就不需要账务公开。所以腾讯做的一些区块链项目基本上是尾于没有意义的项目。腾讯的宗旨是要让用户不断地在他的系统中花钱,而不是要让用户在使用它的系统中赚钱。
    • 账务公开的存在真的会提高它的效率吗?如果项目中的两个因素,去中心化只占了项目的10%,而另外的一个重要因素占到了90%,那么即便是一个去中心化的系统也不是一个去化中化的MBA
    • 如果我们决定投资,那么我们资金投入的比例是多大。
  • 举例

    • MIT在2017年的十月给111名同学颁发了利用区块链签发的毕业证书,那么我们就用上面的问题来拷问一下这个项目 。
    • 首先对于大学来说以及世界无纸化的趋势来讲,这个项目是非常有必要的。
    • 对于大学的学位来说,账务公开可以说是非常必要的。可以开放给任何的机构去查看学位的获得情况。
    • 而现存的区块链应用里面并没有一个可以实现MIT分布发毕业证书的需求。
    • 在多大程度上这个项目是一个接近deck的一个去中心化项目。DAO,去中心化自治公司。
    • 对于大学本身来说,区块链数字证书可以让档案馆理系统和印刷程序都成为历史,大幅地降低成本。而且这是一个公益项目,不收费。
    • 如果毕业证书的发放是在去中心化系统中完成的,那么对于毕业证书的防伪有理大的意义,以往的证书需要通过实体证书上印刷防伪信息来检验。
    • 除了签发证书所需要学校提供一个中心化的信用背书以外,其它的证书使用环节,完成是可以自制的,不受任何干预。