区块链技术驱动金融(二)18.5.22

第二章 比特币如何做到去中心化

本章目的是让你对去中心化由一个通盘的认识,以及对比特币运作机制有所了解,最终知道为什么比特币确实是安全的。

2.1 中心化与去中心化

互联网就是一个著名的去中心化系统。早期是在AOL记忆ComputerServe(美国最大的在线信息服务机构之一)等围墙花园式信息服务体系的竞争中,逐渐变得越来越风行。
电子邮件实质也是一种简单邮件传输协议STMP的去中心化系统。
中心化与去中心化并非水火不容,没有一个系统是完全中心化或者完全去中心化的。虽然比特币系统是去中心化的,但比特币交易所(一个可将比特币转换为其他货币的平台)、钱包软件以及用户管理比特币的软件,可以是去中心化的或去中心化的。
比特币如何做到去中心化?
问题1:谁在维护交易账本?
问题2:谁有权利批准哪个交易是正当有效的?
问题3:谁在制造新的比特币?
问题4:谁在制定系统变化规则?
问题5:比特币是如何取得交易价值的?

2.2 分布式共识

共识:consensus
分布式共识:distributed consensus
比特币是个点对点的系统。

分布式共识协议:在一个有n个节点的系统中,每一个节点都有一个输入值,其中一些节点具有故障,甚至是恶意的。一个分布式共识协议有以下两个属性:
①输入值的中止须经所有诚实节点来确定
②这个输入值必须由城市节点来生成
例子:当Alice向Bob付款的时候,Alice需要向整个比特币点对点网络进行广播。

区块链技术驱动金融(二)18.5.22_第1张图片
广播交易

注:Bob在Alice广播时不一定在以上网络中,但是Bob是否运行节点并不影响他收到爱丽丝转给他的比特币。

比特币网络里,节点要达成怎样的共识呢?
⑴比特币体系中,在任何时点,所有在点对点网络上的节点都有包含一系列区块的总帐本,每个区块中都包含了已经被所有节点达成共识的交易清单。
⑵但是,每个节点还有一堆没有被打包进入区块的交易(网络节点已经被通知、交易已经发生,但是还没有被写进区块的交易)。网络节点对于这些交易还没达成共识,故每个节点都有一个略有差异、尚待确认的交易池。实际中,点对点网络不完美,所以有些节点听到了交易,有些则没有听到。

所有的节点如何对一个区块达成共识呢?
详情参加书41页。
达成共识几个技术上的问题:
⑴达成共识一般是个难题,有些节点会死机或者根本就是恶意节点。
⑵就比特币而言,点对点网络不完美,并非所有对应的节点是两两相连的,互联网链接的不良可能会造成网络问题,要执行一个所有节点都参与的共识协议似乎并不现实。
⑶由于交易信息是分布在整个互联网上的,信息传递会有严重延迟。
延迟与全球时间
比特币协议达成共识时必须直面两大障碍:
①是不完美网络,比如信息延迟和节点死机
②是某些故意搞破坏的节点。
严重网络延迟的一个后果是:节点之间没有一个统一的全球时间的概念。并非所有的节点都能根据每个交易的时间戳来达成交易时间共识。

2.2.1 不可能性结论
在全球时间上的不统一,给共识协议算法带来了很多限制。
典型案例就是拜占庭将军问题(Byzantine Generals Problem):
拜占庭是东罗马帝国的首都,它的军队分成多个师,每个师都由一个将军统领。这些将军通过信使进行交流,来达成一个共同作战方案。有些将军可能是叛徒,想故意破坏这个过程,会造成忠诚的将军也无法达成一个统一的作战计划。
如何解决这个问题呢?
实际上,就是让忠诚的将军在可能有叛徒误导的情况下依然能达成统一作战方案。然而事实证明,叛徒数量超过1/3,这个难题将无法克服。
Fisher-Lynch-Paterson不可能结果指出:在一定的条件下(包括节点行为具有确定性特征),甚至在只有一个缺陷的过程中,达成共识都是不可能的。(这个关于不可能性的一个结论)
Paxos算法协议:①Paxos算法能做到不产生不一致的结果②但是它妥协是,在一定条件下(虽然不常见),该协议会死机卡住,从而无法继续运行。(这个是某些文献提到的一个共识协议)

2.2.2 打破传统上的假设
不可能性结论都是在一些特定模式下才成立,结论是针对分布式数据库的研究。但对于比特币,其本身打破了很多原来分布式数据库所做的假设。目前对共识的研究,比特币实际比理论情况要好很多。
比特币打破了哪些经典模型得哪些假设呢?
⑴比特币引入了奖励概念。奖励对于分布式共识协议是个全新概念,因此可以说比特币只是在特定货币系统下解决了分布式共识问题。
⑵比特币体系包含随机性这个概念。比特币的共识算法极大程度的依赖于随机性。比特币不纠结于规定共识里的起点终点,而且共识是通过一段较长的时间而达成的。

2.3 使用区块链达成没有身份的共识

与传统分布式共识算法不同,比特币中的每个节点并没有一个稳定的、长期的身份。
身份缺失的原因:
①点对点网络,没有乱造节点即女巫攻击 sybil attack现象
②化名制 pseudonymity。(比特币仍旧不能保证真正的匿名,比特币特性也没强迫必须用真是身份来加入)
基于安全上的便利,有真实身份会让设计变得容易。然而,并没有。但可以用一个理论假设来弥补。

2.3.1 隐性共识
对随意节点选择的假设可以让隐性共识inplicit consensus成为可能。
共识协议里有多个回合,每个回合对应着区块链里的一个块。每个回合里,一个随机节点会被选中,这个节点可以提议该链的下一个区块。
无共识算法,为避免随机选出节点是恶意的,通过隐性共识的方法选中:其他节点通过隐性地接受或拒绝前面这个被随机选择出来的节点。如果接受则继续在这个块之后接龙下去;如果拒绝则忽略这个新的区块而选择前一曾经接受的区块继续接龙下去。
节点选择哪一块来继续接龙?比特币共识算法简化版
假设可任意选择一个节点,这些节点都不会受到女巫攻击影响。
①新的交易被广播到所有节点上
②每个节点都将新的交易放入区块
③每个回合,一个随机的节点可以广播它的区块
④其他节点可以选择接受这个区块,前提是如果区块里的交易都是正当的即有真的签名
⑤节点们可把以上区块的哈希值放进自己的区块里来表示它们对那个新区块的认可。
验证这个共识算法有效
窃取比特币爱丽丝不能够窃取属于另一个用户,不受她控制的地址里的比特币。因为若数字签名机制安全,爱丽丝无法伪造比特币拥有者的签名。
拒绝服务攻击Alice不喜欢Bob,拒绝提供服务给Bob。尽管Bob的交易没有被放入Alice所提议的下一个区块,只需要等到下一个诚实节点发起区块的时候,他的交易记录就会被放进这个区块里。
双重支付攻击假设Alice是Bob网店顾客,并且已经一个由诚实节点发起包含代表Alice向Bob支付交易在内的区块。(该交易是个数据结构,包含Alice数字签名+付给Bob的公钥即地址的指令+一个哈希值)
注:该哈希值是个指针指向先前一笔交易的输出,就是比特币来源。
详情参见书48页,此处较为复杂。

区块链技术驱动金融(二)18.5.22_第2张图片
双重支付攻击

双重支付攻击是否成功?取决于最后哪个区块被纳入长期的共识链。
什么决定哪个区块被纳入?诚实节点会遵守最长有效分支后延展规则,在哪个分支后面延展? 没有明确答案。(两个分支长度一样,区别在于最后一个区块,然而两个区块都有效,因此选择决定了双重支付攻击是否成功)技术角度而言,两笔交易完全一致并且有效。
实践中,节点利用点对点网络中最早听到的区块这种起方式的方法依旧存在问题,比如网络延迟,最先听到的不一定是最早被创造出来的。假设包含Alice-Bob交易区块的链如果被网络完全遗忘,则成为一个 孤块orphan block
Bob角度而言,Bobby在Alice广播交易时,操作草率,在网上完成检查程序并允许Alice下载软件,这叫 零验证交易 zero confirmation transaction。结果会更糟。为了保护自己免受双重支付攻击,应该多等待。
区块链技术驱动金融(二)18.5.22_第3张图片
Bob角度看待双重支付

总结:一个交易得到的确认越多,被纳入长期共识链的概率越大。因为诚实节点总是选择延展最长的共识链。事实证明,双重支付攻击成功的概率随着确认的数目的增加而指数级降低。比特币生态系统中,常见的方法是等待6个确认。而防止不正当交易完全使用的是密码学的方法,被共识所加强,防止双重支付攻击完全依赖于共识,密码学不起任何作用,因为共识能决定哪个被放进长期共识链。

区别两种哈希指针
区块内用来表示接在之前哪个区块后面的哈希指针
在交易里的一个或多个用来指向之前交易里说明比特币来源的哈希指针。

2.4 奖励机制与工作量证明

以货币为单位奖励那些表现诚实的节点。
2.4.1 奖励一:区块奖励
比特币中由两种不同的奖励机制:区块奖励和交易费。
根据比特币规则,创建区块的节点可以在这个区块中加入一笔特别的交易(该交易就是一个造币的交易类似于财奴币里面的造币,节点可指定这笔交易的接收地址,通常会选择一个属于自己的地址,可以将这个看作是节点在共识链上进行创建区块服务的报酬)。
写本书时候,区块奖励金额定在25个比特币。每生成210000个区块,金额就会减半。最终数量是2100万,大约到2140年就发完了。但是这个系统仍旧可以运行,因为区块奖励只是比特币奖励机制之一。
注:奖励只有当区块链最终被纳入长期共识链才会实现。这是新比特币被允许创造出来的唯一途径。

2.4.1 奖励二:交易费
比特币的第二个奖励机制。
任何交易的制造者都可以选择让交易输出值比输入值小。第一个创建区块把交易放进区块链的人可以取得这个差额,作为交易费。
如果你是一个节点,正在创建一个包含200笔交易的区块,那么这200笔交易的交易费将会被付到你放在区块内的那个地址。
2.4.2 挖矿与工作量证明
描述共识机制时候还有一个问题没有解答。
⑴我们要你相信这样一个假设:我们能随机选取一个节点
⑵因奖励那些节点而产生的新问题:大家分一杯羹成为一个节点来获得这些奖励,那么系统就会不稳定
⑶基于第二个问题,可能会有攻击者创建大量的女巫节点来尝试颠覆整个共识过程。
解决办法:工作量证明 proof of work:把随机选取节点改为根据节点占有某种资源的比例来选取节点,希望这种资源是没有人能垄断的。比如这个资源是计算能力,称为权益证明proof of stake
虽然比特币没有使用,但是权益证明也是另一种合格的模式,被其余加密货币所使用。
工作量证明:允许节点用其计算能力来互相竞争,计算能力的比例决定了节点被自动选中的概率。

未完待续 2018.5.22 19:53 跑步去啦,回来继续
继续更新2018.5.23 21:50

比特币是用哈希函数解谜来证明工作量的。
继续更新2018.5.24 9:11

任何一个提议并创建区块的节点想要制造下一块,该节点必须找到一个临时随机数。临时随机数需要满足:
H(nonce || prev_hash||tx||tx||...||tx) < target
一个区块通常包含:
①该节点提议的一系列交易。
②一个指向前序区块的哈希指针。(该指针只是文本中的字符串,该哈希值作为在网络上请求其他节点寻找区块的ID,让获取这个区块之后验证它)。
③一个临时随机数。(为提高发现符合要求的临时随机数的难度,把包含临时随机数在内的整个区块的哈希值组合在一起,输出结果是一种特定的形式。若哈希函数符合谜题友好特性,唯一解法就是试足够多的临时随机数,直到成功)

比特币系统完全实现去中心化的方式:哈希函数解谜以及工作量证明的办法,可以完全舍弃采取那种随机选取节点的办法。这些节点竞争哈希函数解谜过程中一直相互独立,若一个节点正好发现一个临时随机数可以满足要求,即可提议创建下一个区块。

2.4.3 哈希谜题特性:难于计算
哈希谜题有三个重要特性:难于计算、可参数化成本、易于证实。
特性一:要有一定的难度。其实难度实际上是随时间而改变的。
注:不停尝试解哈希谜题的过程,即比特币挖矿,参与挖矿的节点被称为矿工。技术上每个人都可以称为矿工,但是挖矿的高成本导致了挖矿生态系统需消耗大量能量。

2.4.3 哈希谜题特性:可参数化成本
特性二:希望成本是可以通过参数来变化的,而非一个固定值。
比特币的点对点网络里:每产生2016个区块后,所有节点都会自动重新计算目标区域相对于整个输出范围的比例大小,使后续的区块产生的时间间隔约为10min.(若区块产生的间隔太小,造成很多低效率,导致失去许多优化上的好处,故间隔是个固定值,虽然理想间隔意见仍然不统一)
注:任何一个矿工,找到下一个区块的概率是其控制的计算力占整个全球计算力的比例。
总结:只要以计算能力为权重的大多数矿工,遵循比特币协议(是诚实的),则比特币中的大量攻击就都没有可能发生。
矿工行为的两种行为模式:博弈论观点认为最大的问题是矿工默认的行为是否是一种“那什均衡”(Nash equilibrium)
伯努利试验Beroulli trial:解哈希谜题是概率性的,通过一个个去试临时随机数。结果只有两种,连续试验下,每种结果发生的概率是固定的。
泊松过程 Poisson process:节点多次尝试临时随机数的伯努利试验是一个离散概率过程,可用泊松过程的连续概率过程近似表示。

区块链技术驱动金融(二)18.5.22_第4张图片
发现下一个区块所需时间的概率密度函数

对于特定的矿工:发现下一区块的平均时间=10min/占全部计算力的比例

2.4.3 哈希谜题特性:易于证实
第三个特性:证实一个节点正确地计算了工作量证明很容易。任何节点或矿工,都可以迅速地证实其他矿工找到的区块符合工作量证明的规定。

本章总结:
挖矿成本:如何计算出挖矿是否赚钱。

如果:挖矿成本>挖矿成本  则:矿工赚钱
条件:
挖矿奖励=区块奖励+交易费 
挖矿成本=硬件成本+运营成本(电费、空调费等)

复杂之处分析:
①硬件投资固定,电费随时间变化。
②矿工得到的奖励取决于发现区块的速度=硬件的能力+计算力占全球计算能力的比例。
③挖矿产生的成本通常为美元和其他货币,涉及到比特币汇率。
④假设矿工诚实地遵守协议,但矿工也可采用其余策略。

不存在1比特币
比特币没有固定面额,没有”1比特币“说法,比特币是交易输出,目前可以精确到小数点后8位,可能地最小价值是0.000 000 01 BTC,称之为一个中本聪。

一个交易被放进区块链
一个交易被放进区块链,说明这笔交易已经被确认过了很多次(次数不固定,6为常用次数,确认越多,越容易确信)。但经常有一些孤块(导致原因是这个区块可能包含一个不正当交易或试图双重支付或网络延迟)或没有进入共识链的区块。

哈希谜题与挖矿
矿工是决定参与创造新区块竞争的特殊类型节点。若其他矿工继续在他们的区块上搭建,则他们努力的回报是新造的比特币(新区块奖励)+已经存在的比特币(交易费)

比特币深度使用了分布式共识的概念
传统中,有个共识过程来决定货币的汇率。
比特币里,由区块链来完成对账本情况的共识,即你拥有多少比特币的算法是依赖共识的。比特币点对点网络,区块链中记录的所有爱丽丝地址上拥有的比特币数量总额。拥有比特币就是其他节点对给定的一方拥有这些比特币的共识
比特币规则改变有两种:软分叉与硬分叉。

启动加密货币
自举过程bootstrapping
比特币系统里有三个想法:区块链的安全性、挖矿生态系统的健康程度、货币的价值在相互作用。

51%攻击
如果共识失败,并存在一个在比特币网络里实际掌握了绝大部分挖矿能力的51%攻击者。
攻击者可以从现存的地址里偷币吗?不行,除非有能推翻加密方法。这里可能会出现分叉情况。
51%攻击者可以压制其他交易吗?不能,即使成功,大家也都知道发生了攻击。
攻击者可以改变区块奖励吗?不能,这是对系统规则的改动,其他节点不会轻易认可区块奖励提高,故他无法使用这些区块。
攻击者会摧毁大家对比特币信心吗?如果有一方控制了51%哈希算力,即使没发动攻击,大家也可能会对比特币失去信心。

结于 2018.5.24 10:37

你可能感兴趣的:(区块链技术驱动金融(二)18.5.22)