开发工具:
文件大小: 706kb
下载次数: 0
上传时间: 2019-06-29
详细说明:对区块链2.0中以太坊的白皮书进行翻译,帮助读者了解以太坊的概念去中心化的数宇货币概心,正如财产登记这样的替代应用·样,早在几十年
以前就被提出来了。1980和1990年代的匿名电子现金协议,大部分是以乔姆盲
签技术( Chaumian blinding)为基础的。这些电子现金协议提供具有高度隐私
性的货币,但是这些协议都没有流行起来,因为它们都依赖于一个中心化的中介
机构。1998年,戴伟( Wei dai)的b- noney首次引入了通过解决计算难题和去
中心化共识创造货币的思想,但是该建议并未给出如何实现去中心化共识的具体
方法。2005年,芬尼( Hal finney)引入」“可重复使川的工作量证明机制’
( reusable proofs of work)概念,它同时使用b- monev的思想和 Adam back
提出的计算圉难的哈希现金( Hashcash)难题来创造密码学货币。但是,这种概
念再次迷失于理想化,因为它依赖于可信任的计算作为后端
因为货币是一个先申请应用,交易的顺序至关重要,所以去中心化的货币需
要找到实现去中心化共识的方法。比特币以前的所有电子货币协议所遇到的主要
障碍是,尽管对如何创建安全的拜占庭问题容错( Byzantine-fault- tolerant)
多方共识系统的研究已经历时多年,但是上述协议只解决了问题的一半。这些协
议假设系统的所有参与者是已知的,并产生如“如果有N方参与到系统中,那么
系统可以容忍N/4的恶意参与者”这样形式的安全边界。然而这个假设的问题在
于,在匿名的情况下,系统设置的安全边界容易遭受女巫攻击,因为·个攻击者
可以在台服务器或者僵尸网络上创建数以千计的节点,从而单方面确保拥有多
数份额。
中本聪的创新是引入这样一个理念:将一个非常简单的基于节点的去中心化
共识协议与工作量证明机制结合在一起。节点通过工作量证明机制获得参与到系
统的权利,每十分钟将交易打包到“区块”中,从而创建出不断增长的区块链。
拥有大量算力的节点有更大的影响力,但获得比整个网终更多的算力比创建一百
万个节点困难得多。尽管比特币区块链模型非常简陋,但是实践证明它已经足够
好用了,在未来五年,它将成为全世界两百个以上的货币和协议的基石。
作为状态转换系统的比特币
State
Transaction
Spend
State
145f8a017b53ab841
7b53ab84:1
304525bf6785
14c5f8ba:01892b910
rucu igeuo9o
3e67122692bb91f0
ce6f712:2
4ad9065:0bb75a980:0
6510三0ea
4ad59065:0
create
bb/5a980:1tb75a9802
bb75xs80hb759801b758990:2
从技术角度讲,比特币账本可以被认为是一个状态转换系统,该系统包括所
有现存的比特币所有权状态和“状态转换函数”。状态转换数以当前状态和交
易为输入,输出新的状态。例如,在标准的银行系统中,状态就是一个资产负债
表,一个从A账户向B账户转账X美元的请求是一笔交易,状态转换函数将从A
账户中减去X美元,向B账户增加X美元。如果A账户的余额小于X美元,状态
转换函数就会返回错误提示。所以我们可以如下定义状态转换函数
APPLY(S, TX)->s or ERROR
在上面提到的银行系统中,状态转换函数如
APPlY( Alice: $50, Bob: $50 send $20 from Alice to Bob")=i Alice
S30,BOb:$70}
但是
APFLY([ Alice: $50, Bob: $50),"send $70 from Alice to Bob")= ERROR
比特币系统的“状态”是所有己经被挖岀的、没有花费的比特币(技术上称
为“未花费的交易输出, unspent transaction outputs或UTXO”)的集合。
每个UTXO都有一个面值和所有者(由20个字节的本质上是密码学公钥的地址所
定义[1])。一笔交易包括一个或多个输入和一个或多个输出。每个输入包含
个对现有UTXO的引用和由与所有者地址相对应的私钥创建的密码学签名。每个
输出包含一个新的加入到状态中的UTXO。
在比特币系统中,状态转换函数 APPLY(S,里x)->5人体上可以如下定义:
1.交易的每个输入
如果引用的UTXO不存在于现在的状态中(s),返回错误提示
如果签名与UTⅫ0所有者的签名不一致,返回错误提示
2.如果所冇的Ⅻ输入面值总额小于所有的UXO输出面值总额,返回错误提示
3.返回新状态s,新状态s中移除了所有的输入UTXO,增加了所有的输出UTXO
第一步的第一部分防止交易的发送者花费不存在的比特币,第二部分防止交
易的发送者花费其他人的比特币。第二步确保价值守恒。比特币的攴付协议如下。
假设 Alice想给Bob发送11.TBTC。事实上, Alice不可能正好有11.TBTC。假
设,她能得到的最小数额比特币的方式是:6+42=12。所以,她可以创建一笔有
3个输入,2个输出的交易。第一个输出的面值是11.7BTC,所有者是Bob(Bob
的比特币地址),第二个输出的面值是0.3BTC,所有者是Aice白己,也就是
找零
挖矿
Block 5624
Block 5625
Block 5626
T:13562
Time:135752858
Time:135753321
Nance:581512551
Nonce:653312362
Nonre:2092352335
Prevhash: ofc8125b6ed4
Prevhash: 85cb1976c171
Prevhdsh: 8en2752b7bc3
Transactions>
c Transactions
s Transactions
在区块链中,每个区块包含一个时间戳、一个随机数、一个对上一个区块的
引用(即哈希)和上一区块生成以来发生的所有交易列表。这样随着时间流逝就
创建出∫一个持续增长的区块链,它不断地更新,从而能够代表比特币账本的最
新状态
依照这个范式,检查一个区块是否有效的算法如下
1.检查区块引用的上一个区块是否存在且有效
2.检査区块的吋间戳是否晚于以前的区块的吋间戳,而且早于未来2小吋[2]。
3.检查区块的工作量证明是否有效。
4.将上一个区块的最终状态赋于s[0]。
5.假设TX是区块的交易列表,包含n笔交易。对于属于0……n-1的所有i,进行
状态转换S[i+11-PPLY(s[i,TX[i1)。如果任何笔交易i在状态转换中出
错,退出程序,返回错误
6.返回正确,状S[n是这一区块的最终状态
本质上,区块中的每笔交易必须提供一个正确的状态转换,要注意的是,“状
态”并不是编码到区块的。它纯粹只是被校验节点记住的抽象概念,对于仁意区
块都可以从创世状态开始,按顺序加上每一个区块的每一笔交易,(妥妥地)计
算出当前的状态。另外,需要注意矿工将交易收录进区块的顺序。如果一个区块
中有A、B两笔交易,B花费的是A创建的UTX0,如果A在B以前,这个区块是
有效的,否则,这个区块是无效的。
区块验证算法的有趣部分是“工作量证明”概念:对每个区块进行SHA256
哈希处理,将得到的哈希视为长度为256比特的数值,该数值必须小于不断动态
调整的目标数值,本书写作时目标数值大约是2^190。工作量证明的目的是使区
块的创建变得困难,从而阻止女巫攻击者恶意重新生成区块链。因为SHA256是
完全不可预测的伪随机函数,创建有效区块的唯一方法就是简单地不断试错,不
断地增加随机数的数值,査看新的哈希数值是否小于日标数值。如果当前的日标
数值是2^192,就意味着平均需要尝试2^64次才能生成有效的区块。一般而言,
比特币网终每隔2016个区块重新设定日标数值,保证平均每十分钟生成一个区
块。为了对矿工的计算工作进行奖励,每一个成功生成区块的矿工有权在区块中
包含一笔凭空发给他们自己25BTC的交易。另外,如果交易的输入大于输出,差
额部分就作为“交易费用”付给矿工。顺便提一下,对矿工的奖励是比特币发行
的唯一机制,创世状态中并没有比特币。
为了更好地理解挖矿的目的,让我们分析比特币网络出现恶意攻击者时会发
生什么。因为比特币的密码学基础是非常安全的,所以攻击者会选择攻击没有被
密码学直接保护的部分:交易顺序。攻击者的策略非常简单:
1.向卖家发送100BC购买商品(尤其是无需邮奇的电子商品)。
2.等待直至商品发出。
3.创建另一笔交易,将相同的100BTC发送给自己的账户。
1.使比特币网络相信发送给自己账户的交易是最先发出的。
日步骤(1)发生,几分钟后矿工将把这笔交易打包到区块,假设是第
270000个区块。大约一个小时以后,在此区块后面将会有五个区块,每个区块
间接地指向这笔交易,从而确认这笔交易。这吋卖家收到货款,并向买家发货
因为我们假设这是数字商品,攻击者可以即时收到货。现在,攻击者创建另笔
交易,将相同的100BTC发送到自己的账户。如果攻击者只是向全网广播这一消
息,这一笔交易不会被处理。矿工会运行状态转换函数 APPLY(s,Tx),发现这笔
交易将花费已经不在状态中的UTXO。所以,攻击者会对区块链进行分叉,将第
269999个区块作为父区块重新生成第270000个区块,在此区块中用新的交易取
代旧的交易。因为区块数据是不同的,这要求重新进行工作量证明。另外,因为
攻击者生成的新的第270000个区块有不同的哈希,所以原来的第27001到第
270005的区块不指向它,因此原有的区块链和攻击者的新区块是完全分离的。
在发生区块链分叉时,区块链长的分支被认为是诚实的区块链,合法的的矿工将
会沿着原有的第270005区块后挖矿,只有攻击者一人在新的第270000区块后挖
矿。攻击者为了使得他的区块链最长,他需要拥有比除了他以外的仝网更多的算
力来追赶(即51%攻击)。
默克尔树
2f90
2f9c
48a5
d063
48a5
d063
1328d8ca
1328
dca
ERROR:
hash(94bc中a8b5
l= dBra
e74b
a8b5
abc
abs
d187125
d187
4a2f
Alice.> bob
Alice- Ewe
20 BTC
20 BTC
丘:仅提供默克尔树( Merkle tree)上的少量节点已经足够给出分攴的合
法证明。
右:任何对于默克尔树的任何部分进行改变的尝试都会最终导致链上某处的
不一致。
比特币系统的一个重要的可扩展特性是:它的区块存储在多层次的数据结构
中。一个区块的哈希实际上只是区块头的哈希,区块头是包含时问戳、随机数
上个区块哈希和储了所有的区块交易的默克尔树的根哈希的长度大约为200
字节的一段数据。
默克尔树是一种二叉树,由一组叶节点、一组中间节点和一个根节点构成。
最下面的大量的叶节点包含基础数据,每个中间节点是它的两个子节点的哈希,
根节点也是由它的两个子节点的哈希,代表了默克尔树的顶部。默克尔树的目的
是允许区块的数据可以零散地传送:节点可以从一个源下载区块头,从另外的源
下毂与其有关的树的其它部分,而依然能够确认所有的数据都是正确的。之所以
如此是因为哈希向上的扩散:如果一个恶意用户尝试在树的下部加入一个伪造的
交易,所引起的改动将导致树的上层节点的改动,以及更上层节点的改动,最终
导致根节点的改动以及区块哈希的改动,这样协议就会将其记录为一个完全不同
的区块(几乎可以肯定是带着不正确的工作量证明的)。
默皃尔树协议对比特币的长期持续性可以说是至关重要的。在2014年4月,
比特币网络中的一个全节点-存储和处理所有区块的全部数据的节点一需要占用
15GB的内存空间,而且还以每个月超过1GB的速度增长。目前,这一存储空问
对台式计算机来说尚可接受,但是手机己经负载不了如此巨大的数据了。未来只
有商业机构和爱好者才会充当完整节点。简化支付确认(SPV)协议允许另一种节
点行在,这样的节点被成为“轻节点”,它下载区块头,使用区块头确认工作量
证明,然后只下载与其交易相关的默克尔树“分支”。这使得轻节太只要下载整
个区块链的一小部分就可以安全地确定任何一笔比特币交易的状态和账户的当
前余额
其它的区块链应用
将区块链的思想应用到其它领域的想法早就出现了。在2005年,尼克萨博
提出了“用所有权为财产冠名”的概念,文中描述了复制数据库技术的发展如何
使基于区块链的系统可以应用于登记土地所有权,创建包括例如房产权、违法侵
占和乔治亚州土地税等概念的详细框架。然而,不幸的是在那吋还没有实用的复
制数据库系统,所以这个协议被没有被付诸实践。不过,自2009年比特币系统
的去中心化共识开发成功以来,许多区块链的其它应用开始快速出现
域名币( namecoin)-创建于2010年,被称为去中心化的名称注册数据库。像
Tor、 Bitcoin和 BitMessage这样的去中心化协议,需要·些确认账户的方法,
这样其他人才能够与用户进行交互。但是,在所有的现存的解决方案中仪有的可
用的身份标识是象1L啊79wp5zBaH刚1j5里 ciBCrhQYtHagU啊y这样的伪随机哈希
理想的情况下,人们希望拥有一个带有象“ george”这样的名称的账户。然而
问题是如果有人可以创建“ george”账户,那么其他人同样也可以创建“ george”
账户来假扮。唯一的解决方法是先申请原则( first-to-ile),只有第一个注
册者可以成功注册,第二个不能再次注册同一个账户。这一问题就可以利用比特
币的共识协议域名币是利用区块链实现名称注册系统的最早的、最成功的系统。
彩色币( Colored coins)-彩色币的目的是为人们在比特币区块链上创建自口
的数字货币,或者,在更重要的一般意义上的货币-数字令牌提供服务。依照
彩色币协议,人们可以通过为某一特别的比特币UTX0指定颜色,发行新的货币。
该协议递归地将其它UTX0定义为与交易输入UTXO相同的颜色。这就允许用户保
持以包含某一特定颜色的UTXO,发送这些UTX0就像发送普通的比特币一样,通
过回湧全部的区块链判断收到的UTX0颜色。
元币( Metacoins)-元币的理念是在比特币区块链上创建新的协议,利用比特
币的交易保存元币的交易,但是采用了不同的状态转换函数 APPLY’。因为元币
协议不能阻止比特币区块链上的无效的元币交易,所以增加一个规则如果
APLY’(S,TX)返回错误,这一协议将默认 APPLY(S,TX)=S。这为创建任意的
先进的不能在比特币系统中实现的密码学货币协议提供了一个简单的解决方法,
而且开发成本非常低,因为挖矿和网络的问题已经由比特币协议处理好了。
因此,一般而言,建立共识协议有两种方法:建立一个独立的网络和在比特
币网络上建立协议。虽然像域名币这样的应用使用第一种方法已经荻得了成功,
但是该方法的实施非常困难,因为每一个应用需要创建独立的区块链和建立、测
试所有状态转换和网络代码。另外,我们预测去中心化共识技术的应用将会服从
幂律分布,大多数的应用太小不足以保证自由区块链的安全,我们还注意到大量
的去中心化应用,尤其是去中心化自治组织,需要进行应用之间的交互。
另一方面,基于比特币的方法存在缺点,它没有继承比特币可以进行简化确
认支付(SPV)的特性。比特币可以实现简化确认支付,因为比特币可以将区块
链深度作为有效性确认代理。在某一点上,一口一笔交易的祉先们距离现在足够
远时,就可以认为它们是合法状态的一部分。与之相反,基于比特而区块链的元
币协议不能强迫区块链不包括不符合元币协议的交易。因此,安全的元币协议的
简化支付确认需要后向扫描所有的区块,直到区块链的初始点,以确认某一交易
是否有效。目前,所冇基于比特币的元币协议的“轻”实施都依赖可信任的服务
器提供数据,这对主要目的之一是消除信任需要的密码学货币而言,只是一个相
当次优的结果。
脚本
即使不对比特币协议进行扩展,它也能在一定程度上实现“智能合约”。比
特币的UTX0不仅可以被一个公钥拥有,也可以被用基于堆栈的编程语言所编写
的更加复杂的脚本所拥有。在这一模式下,花费这样的UTXO,必须提供满足脚
本的数据。事实上,基本的公钥所有权机制也是通过脚本实现的:脚本将椭圆曲
线签名作为输入,验证交易和拥有这一UTXO的地址,如果验证成功,返回1,
否则返回0。更加复杂的脚本用于其它不同的应用情况。例如,人们可以创建要
求集齐三把私钥中的两把才能进行交易确认的脚木(多重签名),对公司账户、
储蓄账户和某些商业代理来说,这种脚本是非常有用的。脚本也能用来对解决计
算问题的用户发送奖励。人们甚至可以创建这样的脚本“如果你能够提供你已经
发送一定数额的的狗币给我的简化确认支付证明,这比特币UTX0就是你的
了”,本质上,比特币系统允许不同的密码学货币进行去中心化的兑换
然而,比特币系统的脚本语言存在一些严重的限制:
缺少图灵完备性这就是说,尽管比特币脚本语言可以支持多种计算,但是
它不能支持所有的计算。最主要的缺失是循环语句。不支持循环语句的目的是避
免交易确认时岀现无限循环。理论上,对于脚本程序员来说,这是可以克服的障
碍,因为仁何循环都可以用多次重复if语句的方式来模拟,但是这样倣会导致
脚本空间利用上的低效率,例如,实施一个替代的椭圆曲线签名算法可能将需要
256次重复的乘法,而每次都需要单独编码
价值盲( Value- blindness)。UTXO脚木不能为账户的取款额度提供精细的控
例如,预言机合约( oracle contract)的一个强大应用是对冲合约,A和B各
自问对冲合约中发送价值1000美元的比特币,30天以后,胭木A发送价值1000
美元的比特币,向B发剩余的比特币。虽然实现对冲合约需要一个预言机
( oracle)决定比特币值多少美元,但是与现在完全中心化的解决方案相比,
这机制已经在减少信任和基础设施方面有了巨大的进步。然而,因为UTX0是
不可分割的,为实现此合约,唯一的方法是非常低效地采用许多有不同面值的
UTXO(例如对应于最大为30的每个k,有一个2k的UTX0)并使预言机挑出正桷
的UTX0发送给A和B。
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.