以太坊白皮书概述

以太坊白皮书地址


指出区块链的重要设计理念:基于工作量证明的区块链概念使得人们可以就交易顺序达成共识。

比特币区块链是第一个可靠的解决double spending的去中心化方法。

继而提出区块链该怎样应用于货币以外的领域,并引入智能合约概念:基于工作量证明的区块链概念使得人们可以就交易顺序达成共识。

历史

这一章节主要描述的是以太坊之前的比特币及相关电子现金思想的实现方式特点。

首先是基于中心化的中介机构的电子现金协议,到通过解决计算难题和去中心化共识思想提出,再到“可重复使用的工作量证明机制”,为电子现金的最终合理化解决提供了铺垫。

在比特币系统出现之前,通过对拜占庭问题容错的多方共识系统的研究没有解决在匿名情况下,攻击者创造身份伪装大多数的情况。

最后概述中本聪的理念:将基于节点的去中心化共识协议与工作量证明机制结合。POW通过算力保证真实的大多数。

作为状态转换系统的比特币

比特币系统的“状态”是所有已经被挖出还没有被花费的比特币UTXO。

举例比特币在交易里的实际应用,如A给B转11.7个btc,需找零的情况下,如交易前能得到的最小btc数额为12,则创建一个输入为12,输出为11.7和找零0.3的交易。

挖矿

该章介绍比特币的挖矿机制——每十分钟生成一个区块,每个区块包含一个时间戳、对上一个区块的引用hash、该时间段的所有交易列表、随机数nonce、merkle树根节点哈希。

检测一个区块是否有效的大致方法:

1、检测上一个区块的引用是否有效。

2、时间戳在合理范围内。

3、工作量证明是否有效。

4、检查所有该区块内交易的状态转换是否正确。

比特币每隔2016个区块重新设定目标数值,保证平均每十分钟生成一个区块。

并且讨论了比特币区块链攻击者的攻击模式。即在交易被写进区块后经z个区块后继确认,攻击者再在交易写入的那个区块修改该笔交易(如将要发送的地址修改为本人地址),并开始追赶诚实链,试图超过诚实链长度的过程。

区块头是包含了版本号、前一个区块引用、时间戳、目标hash值、随机数、merkle树根等内容。

用户可以分散从多个节点下载merkle树数据。在SPV的场景下,轻节点只需要下载区块头和其交易相关的merkle树分支,而需要下载完成的交易数据。

阐述了重造公有链成本较高、基于比特币建立协议因为不能强制让区块链不包括不符合元币协议的交易而导致需要扫描到区块链的初始点以确认某一交易是否有效。

脚本

利用脚本可以实现如多重签名等更复杂的支付逻辑,但也存在严重的限制如缺少图灵完备性。

所以在现有的比特币系统上建立高级应用的三种方法:建立新区块链、使用脚本、在比特币基础上建立元币协议,各有缺点。

以此来引出以太坊,通过建立终极的抽象的基础层——内置有图灵完备编程语言——使得任何人都能够创建合约和去中心化应用并在其中设立他们自有定义的所有权规则、交易方式和状态转换函数。

以太坊账户组成:

以太坊的交易体系是由账户模型维持。状态是由两个账户和价值转移及信息的状态转换构成。

以太坊账户的组成4部分:

随机数计数器、余额、合约代码、账户存储空间。

以太坊有两种类型的账户:由私钥控制的外部账户和由合约代码控制的账户。

消息和交易

“交易”是指从外部账户发送的存储信息的签名数据包。

交易包含:

消息的接收者。

指明发送者的签名。

从发送者到接收者的以太交易数量。

可选的数据域。

STARTGAS值,代表交易执行时所允许的最大计算步骤数。

GASPRICE值,代表发送者在每个计算步骤时所需要支付的以太费用。

前三项是任何加密货币中的标准域名。数据域默认没有函数,但是虚拟机有一个操作码可以使合约操作这里的数据。举个例子,如果一个具有区块链上注册域名服务的合约,则它希望解析数据为两个域:域名和IP地址。此时这些数据就会存储在该处。合约会读取这些数据并将其存储在合适的位置。

STARTGAS和GASPRICE域用于防止偶发的或敌对的无限循环和其他系统性损耗。

每个交易都被要求限定它所能执行的计算步骤。

以gas作为基础的计算单位。通常一个计算步骤消耗1gas,但有些操作需要花费更多的gas。交易数据每个字节也需要5gas费用。这样,使攻击者在消费网络中的各类资源时,成比例地增长费用。

消息

合约具有发送消息给其他合约的功能。消息是永不序列化的虚拟实体。

消息包含:

消息发送者。(隐式)

消息接收者。

消息附带的转移以太数。

可选数据域。

STARTGAS值。

基本上,一个消息就等同于一个交易,除非它由合约生成而不是由外部账户生成。

当合约的执行代码执行CALL操作码时生成消息,并执行消息。和交易类似,消息导致接收者账户执行代码。因此,合约可以和其他合约保持跟外部账户一样形式的关系。

注意,一个交易或合约所分配的gas允许量适用于所有该交易和其下执行所花费的总gas量。举个例子,A发送给B的交易包含1000gas,B在发送消息给C前消费了600gas,然后C的内部执行消耗了300gas,那么B还可以使用剩下的100gas。

以太状态转移函数

状态S经过交易Tx转移到S‘,

过程如下:

1、交易是否完整(签名、nonce等)——检验交易是否有效

2、计算交易中的STARTGAS*GASPRICE,并在发送者账户中减去相应的以太,变更发送者的nonce。(nonce用于表示交易在发送方的唯一性)——交易费用预算

3、将STARTGAS投入实际计算使用,首先减去因为交易数据量而造成的费用。——将gas开始用于实际使用

4、将交易的价值从发送者账号转到接收者账号。如果接收者账号是合约形式则运行指定代码。——执行交易价值转移主体内容

5、如果此次价值转移因为发送者没有足够的钱或gas耗尽而终止,则恢复所有变化,并将费用打入矿工账号。——交易恢复机制

6、否则将剩余的gas返回给sender,消耗掉的gas发送给矿工。——处理交易完成后的gas

接着举实例,合约存储从零开始,一笔交易要转移10个以太。有2000gas,0.001以太的gasprice,64个字节的数据大小。前32个字节表示2,后32和字节表示CHARLIE。

状态转移函数步骤如下:

1、验证格式。

2、计算2000*0.001,向发送者账户中减去2个以太。

3、初始化gas供给量为2000,假设该交易170字节大小,则需要850gas。

4、从发送者账户中减去10以太加到接收者账户中。

5、执行代码,设该函数的功能是检查合约存储空间索引为2的地址,若为空则存入CHARLIE。

6、返还剩余的gas给sender,并返回结果状态。

如果在接收端没有合约执行,则总费用只会与交易总长度有关。

在恢复时,消息和交易的执行机制是相似的:如果消息执行耗尽gas,则该消息触发的子消息的执行都会恢复,但不包括父消息。

这意味着从一个合约调用另一个合约是安全的。如A用Ggas调用B,并且A的执行保证消耗至多Ggas。

代码执行

在以太坊合约里的代码是底层的,基于栈的字节码语言,也叫EVM代码。

代码包含一系列的字节,每个字节代表一种操作。一般来说,代码执行是无限循环,程序计数器没增加一(初始为零)就执行一次操作,直到代码执行完毕或错误,或者STOP或RETURN指令。

区块链和挖矿

和比特币不同,以太坊区块包含了交易列表和最近状态的拷贝。不仅如此,也存储区块号和难度值。以太坊中基本的区块验证算法如下:

1、检查前一个区块的合法性。

2、检查时间戳和上一个区块是否在合理区间内。

3、检查区块、难度值、交易根、叔根和gas限制(等以太坊底层基础概念)的合法性。

4、检查这个区块的工作量证明是否有效。

5、检查该区块内的所有交易状态转移正确性。

6、检查计算出的merkle树根是否等于区块头里设置的merkle值。

以太坊使用一种Merkle树的改进型Patricia树实现交易状态存储。

合约代码的具体执行是对状态转移函数定义的一部分,也是区块验证算法的一部分,所以如果一个交易被加入到区块B,那么由该交易引起的代码执行将会在其他节点下载并验证区块B时执行。

杂项和关注

改进版GHOST协议,以太坊引入了废区块以叔区块身份被其父母的第二代至第五代后辈区块纳入计算的协议,以减少算力浪费。以太坊给以“叔区块”身份为新块确认做出贡献的废区块87.5%的奖励,把他们纳入计算的“侄区块”将获得奖励的12.5%。但交易费用不奖励给叔区块。

费用

该章论述了交易费用分配的一些细节场景。因为每个在区块链上的交易都占用了下载和验证的成本,所以需要建立费用机制以防止滥用。

在比特币中默认的方法是纯粹自愿付费。依靠矿工作为守门员来动态设定最低费用。但实际上大部分交易处理的成本是在于第三方而不是交易记录者,即将区块中的交易下载并验证的节点。

对于比特币所实行的奖励方法,由于节点有一定概率通过挖矿获得区块记录权,所以在奖励可观的情况下上述设计方案可行。(但还是有偏差)

设定浮动上限限制区块操作数。

计算和图灵完备

以太坊自带图灵完备的编程语言,支持无限循环。通过设置STARTGAS限制每个交易执行的最大步数,若gas消耗完,则恢复状态但不返还费用。

货币和发行

以太币的单位被设置为10^18精度。

发行分解

以太坊采用永久线性增长模型,给予当下和将来的人公平的机会去获取货币,最终达到遗失币和挖出币的均衡。

挖矿的中心化

比特币挖矿系统会由于存在提高效率的ASIC(专用集成电路)而导致挖矿中心化。

拓展性

该节讨论的是由于简化支付验证情况下的问题。

当区块链的容量增加,导致只有极少的商家运行全节点,轻节点需要借助全节点来验证,则有受到欺诈的风险。

以太坊使每个矿工成为全节点。在处理完每笔交易后,会把一个中间状态树的根包含进区块链供验证。

综述:去中心化应用

用作交易发送机制的命令行接口缺乏足够的用户友好,所以完整的“去中心化应用”包括底层的业务逻辑组件和上层的图形用户接口组件。

结论

以太坊致力于通过图灵完备的编程语言搭建比单纯的数字货币应用更丰富的智能合约应用。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值