0%

《区块链演义》笔记

最近区块链火的不行,各种创业公司,虽然不知道在做什么业务,不过可以先把技术了解下,本文是对知乎专栏《区块链演义》的总结,写一遍加深印象,特此说明。

到底,什么是比特币

比特币是人类在数字世界中复制最原始的货币交易的所有尝试中,到目前为止,第一个接近成功的,也是唯一接近成功的一个。

交易方式

在有中心的情况下用余额的方式记账比较方便,但是没有中心的情况下,对方需要对你的所有交易记录做校验才能证明余额的正确性,所以去中心的交易方式是——未使用的收入作为支出,比特币是用交易记录来表示的货币形式

正确性校验

目前的网络交易方式是中心化交易,需要一个大家公认的中心(支付宝、银行等等)作为担保,之所以这么做,因为数字货币有如下问题:

  • 任何现实中的货币或者一般等价物,都有一个最基本的特点,不能轻易的复制,但是这个对于数字货币来说就比较困难
  • 复制问题的另外一个角度:双重支付,同样一笔钱,如果用同一套证明机制来校验,那么可以在任何时间多次使用
  • 以上两个问题的本质是分布式共识问题,问题的核心是在一个人与人互相不信任的环境,想让所有人都认同你说的某件事,难如登天

针对这个问题,朴素的思路是——每做一次交易,就把所有人召集到一起广播,效率太低了,pass,接下来我们要去寻求一个能够解决分布式共识问题的方法

分布式共识问题

比特币第一个解决了大型网络(1000节点以上)的“分布式共识”问题(传统的方法都仅限于不超过100个节点)

传统的方法为什么对于节点数目有严格的要求?
拜占庭容错算法举例:

  • 假设有N个节点,那么每次交易,为保证大家都认同你说的事情,除了交易发起者外其余节点都要交互一次
  • 即$(N - 1)^2$次,O($N^2$)的复杂度所以节点数目不能太多

比特币交易保证正确性的方式是通过——挖矿

不懂这个概念没关系,咱们慢慢说什么是挖矿

我们以说话这种场景举例:

对造谣的惩罚

先说与信任相对的——造谣,要缓解造谣问题至少可以有以下两种思路:

  • 判定 + 惩罚,但这么做需要有权威中心,不符合我们去中心的思路
  • 提高造谣成本——说话就要付钱,这也是中本聪采用的方法,一个合格的提高成本的方式需要符合三个条件
    • 方便验证
    • 无法获益,任何人执行规定行为的时候都没有好处
    • 容易估计难度

这种东西叫做——工作证明(Proof-Of-Work 以下简称POW)

POW最初用于防止恶意发电子邮件的,具体做法是强制要求邮件头后面带几位的冗余的字符,使得邮件头的哈希值小于某个值,才能发出。(飞行棋?)

对Hash值做要求基本只能随机猜测,这样就能增加发邮件的成本,对于正常的邮件来说增加的只是一点点,但是对于群发邮件人来说,这个成本就相当大了。

寻找这个合法Hash值的过程就是挖矿

至此,造谣的成本大大提高,相对的,话语的真实性就得到了保障

这里有两个个问题:

  • 成本变高了之后,最有可能发生的是——没人说话,除了能够cover住成本造谣的人
  • 但就算成本再高也不能保证说的所有的话都是真的,对于交易场景来说,对于造谣应该是0容忍的

因为有第一个问题,所以我们我们还需要对说真话的人给予奖励;又因为有第二个问题,需要特殊的奖励机制来保证真实性

对真话的奖励

首先一点,这个奖励要比说话的成本高

其次为了保证真实性,中本聪设计了如下机制(以抢红包做举例):

  • 每隔一段时间群里发一个只有一个人能抢到的红包,条件是:
    • 掷出10个6(说话条件)
    • 说一句真话
    • 收到大多数人的确认
  • 一旦有人宣布自己满足了条件,大家就检查发的消息是否是真话,以及是否满足了说话条件
  • 检查完毕后可以发出确认消息,每个人需要对自己的检验结果负责——如果你确认为真的消息被大家投票投为假的那么你以后所有抢的红包都无效(踢出群?)

在如下三个前提下

  • 奖励足够大,足以覆盖掷骰子的成本
  • 说真话及检验别人说的是否为真的成本远小于掷骰子的成本
  • 群里的大部分人是理智的——不会在未检查的情况下就确认别人的检验结果
  • 红包发放有先后顺序——如果有人宣布自己满足的条件,其他人都不会再去掷骰子而优先去验证

于是,我们得到了一个非常理想的结果:

  • 大家都说真话
  • 大家都会积极的校验别人是不是说了真话
  • 大家在检验别人的内容后会积极的反馈,以便开始下一轮

问题解决

交易的真实性

区块链保证账本真实性和完整性的方法是,把所有交易记录串联在一起,然后用哈希函数生成key,这样可以保证不能认为修改里面的数据,即:

  • 哈希函数
  • 链式结构

比特币提出的心路历程

  1. 货币在数字世界最简单的存在形式——记录交易的账本,用Hash函数和链式结构来保护账本不被篡改
  2. 共识算法来防止双重支付
  3. 由于共识算法的效率问题,所以需要加大说话的成本,不能让造谣成为常态
  4. 但是光有惩罚没有奖励大家就都不说话了,于是又加入了奖励机制

这就是比特币了(其实还不是很懂……)

网络延迟及对策

如果我们网络是没有延迟的,这套系统就够用了,但是情况并不是这样,每个人说的话,并不能即时传达到每一个人那里

这个就是计算机科学中的异步拜占庭容错问题

根据布鲁尔定理——一个分布式计算系统不可能同时满足以下三点:

  • 一致性(Consistency):等同于所有节点访问同一份最新的数据副本
  • 可用性(Availability):对数据更新具备高可用性
  • 容忍网络分区(Partition tolerance):分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择

对于比特币系统来说,我们选择了可用和容错,牺牲了一致性

对于不一致的情况,中本聪加入了最长链共识——通过所有人都同意最长链的方法,对发布的区块达成一致

从货币体系看比特币的价值

货币价值体系公式

一个货币体系的价值可以表示为:

其中:

  • A摧毁整个体系的成本
  • C是体系内作弊成本,即体系内安全交易量的上限(如果交易超过这个量,那么可以从作弊中获得收益,我们认为交易有可能作弊)
  • kN是这个货币体系中N个用户的日常交易量

式子说明了以下问题:

  1. 体系安全很重要
  2. 体系安全的前提下,体系的价值就取决于交易量了

同时式子中的三个参数之间本身也存在着关系,A的价值会受到交易量的影响,而C和kN往往是此消彼长。所以想要成功推广一种货币体系,需要初始条件(资金或公司等)建立A,然后吸引用户提升交易量,然后通过合作、融资等提高A,然后再提高交易量,如此反复。

比特币的货币价值

在这种体系下,我们试着重新定义一下比特币——比特币是第一个将货币体系价值中A,C和kN用密码学的方法联系在一起的货币

比特币的安全性,是由算法保证的——并不是保证绝对的安全,而是——通过共识算法——保证安全性与N成正比

上面提到,货币体系的A是作弊推翻系统成本中的最小值
对于比特币来说,如果你有超过50%算力,那么你作弊的成本是0,相当于摧毁了系统;反之如果没有超过50%算力,那么作弊的可能性无限趋近于0
所以A = C
所以
表明比特币的价值取决于用户量,用的人多,它就有价值,用的人少,它就没价值

这个东西感觉比较抽象?我们用法币和贵金属来做对比,货币价值(R)与用户数(N)的关系如下图

Alt text

  • 蓝线对应法币,其价值基本等同于国家信用
  • 贵金属是绿线,用户数量增长到一定数量后,其价值受到交易量的影响,不能无限增长
  • 红线就是比特币,价值随着用户数量成线性增长

比特币一天交易量近600亿人民币(2018/2/8CoinMarketCap数据)
但这并不是比特币的全部价值

比特币与泡沫?

如果把旁氏骗局的货币放在关系图中效果如下:

Alt text

并不是图片出错,而是旁氏骗局的货币是天然崩溃的(A小于等于0)所以与X轴重合,价值永远为0

问题是,在崩溃之前,怎么知道一个货币体系是不是旁氏骗局呢?

更多的时候崩溃的体系并不是A为0,但它看起来具有价值,却远比A高的多

我们习惯称之为泡沫

事实表明,人们总是高估A的值;或者说由于信息不对等,想让人们相信摧毁这个系统所需的代价原高于A,是件非常容易的事情

这时比特币的另外一个优势就体现出来了——信任可量化

比特币量化价值报告

那么比特币作弊成本量化之后是多少呢?——大约是一家平均日交易额为600亿人民币的公司的市值的51%——这是基于51%算力攻击所得出的结论,记作S/2

但由于去中心化存在某些天然缺陷——个人的理性选择可能导致集体的非理性公地悲剧囚徒困境)实际摧毁整个比特币体系所花的成本要小于S/2

挖矿公司在长远的收益和短期利益之间倾向于选择后者,即使会对比特币带来灭顶之灾——收购其他公司,从而导致矿力集中化

2017/7数据

可以看到前四名挖矿公司拥有超过50%的算力

7个月之后,情况更加严重

2018/3数据

前三名公司的算力总和就已经超过了50%,可以说比特币目前的安全就掌握在他们手里,如果他们联合起来作弊,那么没有人能够阻止的了

假如要全部收购这些公司以掌握超过50%算力:

  • 先收购最小的一家,没有引起市场的警觉
  • 然后放出“备收购超过50%算力的公司,以摧毁比特币”的消息
  • 这个时候作为剩下的公司,他们的处境就是囚徒困境:
    • 如果联合起来都不卖,那么比特币会继续稳定运行、升值
    • 如果自己不卖,而别人卖了,那么自己的公司因为比特币的崩溃而变的一文不值
    • 如果自己先卖,那么至少还能赚一笔
  • 作为囚徒困境中的个体,会倾向于选择对自己最有利的选择
  • 随着收购的推进,给剩下的公司压力会越来越大,成交价会越来越低,直至比特币崩溃
  • 在这个过程中我们所需的成本大概率要小于S/2
  • 这个结论表明比特币目前的安全系数远小于主流的中心化的系统

扩容与分叉

什么是扩容?

扩容并不是增发比特币,而是对每秒交易量扩容

比特币规定每10分钟(左右)挖出一个大小为1MB的区块,每笔交易平均下来是250字节,于是每个区块可以放4000笔交易,大约每秒7笔交易

对比支付宝双十一峰值每妙100000笔的量级,比特币的交易量上限实在是太低了

于是随着参与人数增多,就出现了交易堵塞的情况

目前针对此种情况的解决方案是多收交易费,但并不是长久之计

扩容基本是业界共识,但是一直拖到现在,其中的原因要先从怎么扩容讲起

如何扩容

把问题分解为技术层面和工程层面两方面解答

因为比特币是分布式系统,所以在升级的过程中会出现节点状态不一致的状况,这种情况称为分叉(fork)

要解决分叉问题,我们先要弄清楚什么是分叉……

分叉

分叉分为三类:

  • 软分叉(不分叉):旧节点接受新区块,新节点也接受旧区块
  • 软分叉:旧节点接受新区块,新节点不接受旧区块
  • 硬分叉:旧节点不接受新区块

软分叉(不分叉)

Alt text

也就是说这种情况下并不会真的分叉

软分叉

如果新节点算力超过50%

Alt text

这个时候虽然旧节点会在新矿区挖矿,但是新节点不会在旧区块挖矿,然后新节点算力较大,那么最长的链一定是由新节点生成的,所以旧节点会选择升级,与新节点统一

如果新节点算力不足50%

Alt text

这种情况下,新旧节点都不会互相接受
在新节点算力追上之前,两者是实实在在的分叉了

硬分叉

新节点算力超过50%

Alt text

这种情况下是软分叉第二种情况反过来

新节点算力没有超过50%且新节点能够接受旧节点

Alt text

那么实际上升级操作会回滚

再谈如何扩容

采用新共识算法来实现扩容的方案基本被否定——想要达到与POW一致安全性的目前只有POW

在POW的前提下,POW的安全性需要在(接近)同步的情况下才能保证——你确实在和50%的节点公平竞争

于是,POW引入了挖矿奖励,让矿工保持网络的同步

一个新产生的区块,要传遍整个网络,需要至少半分钟

新的区块就像一道题目,而传播就像发卷,这个卷子发给所有考生至少需要半分钟

而这恰恰是不公平的地方,每轮挖矿总有人比别人早半分钟拿到试卷

但是大家都默默的接受了,因为:

  • 每轮先拿到试卷的人是随机的
  • 反正考试时间是10分钟,大家觉得半分钟延迟可以接受

但是,如果考试时间只有半分钟;或者卷子很多,发起来特别的慢,情况就不一样了

从现象上来说,比特币网络会出现大量的孤块和分叉,也就是大量的算力被浪费了

从本质上讲,实际是比特币的安全模型崩塌了——会出现分叉攻击,只需小于50%的算力,就能算出一条比全网最长链更长的区块链

On scaling decentralized blockchain这边论文里指出,如果十分钟产生一个区块的话,区块的大小不能超过4MB,而比特币规定了区块的大小不能超过1MB

那么有没有在不增加区块大小的前提下增加交易容量呢?

这就是隔离见证

隔离见证

一笔交易大约250字节,这里面包含了:

  • 交易方和交易额
  • 作为给钱的一方,需要给出有这笔钱的证明,是一组数字签名(大概占150字节)

比特币允许使用脚本来替换签名,所以可以采用隔离见证的方式,把所有的见证部分扔到后面形成一个新的区块作为区块链的一个组成部分,这样可以把交易量提升1.5倍,而且用此种方式,旧的区块可以接受新的区块没有分叉风险

但是隔离见证会降低比特币的安全性,因为只要是升级就会出现不同步,而不同步就会引起有效节点数目下降,由区块链原理可知,有效节点下降安全性也会下降

唯一的解决办法是让尽量多的算力节点一起升级

但是隔离见证迟迟没有部署下来,因为比特币参与者的博弈

比特币的参与者

两个重要群体:

  • 核心开发者(Bitcoin Core, BTC)开发了比特币的软件工具
  • 矿工(挖矿公司)负着高昂的电费用笨重的矿机挖矿,掌握几乎所有矿力

矿工的收益来源于两方面,挖矿的奖励和交易费

矿工在打包交易的时候会优先选择手续费高的交易打包,所以交易拥堵越严重,市场竞争越激烈,交易手续费越高,符合矿工利益

所以只有当拥堵严重到影响交易量的时候矿工才会去想扩容

所以最近两年,隔离验证才被真正推进日程

但是,由于隔离验证可以很方便的实行闪电网络——可以将一部分交易挪到链下进行,减轻主链负担,所以会对矿工的交易手续费收取产生重大影响,所以矿工对于隔离见证兴趣缺缺

这时,BTC和矿工之间就有了如下几个故事

香港共识

由于交易堵塞的问题,比特币中出现了BC和BU分叉(都是在区块大小上做文章),虽然并没有得到矿工的实际认可,但是BTC还是感觉到了比特币受到了威胁——说分叉就分叉那还了得?

但是BTC们的意见在某种意义上没有卵用,因为真正的算力在矿工手里,如果矿工决定转投某个山寨链,他们也没有办法,所有有些BTC决定去和矿工接触探个底——于是就有了第一次接触,香港共识:

  • BTC: 同意矿工们扩大区块的意向,答应协助开发2MB的硬分叉升级
  • 矿工:同意支持隔离见证;同意等待BTC开发不去转BU和BC

香港共识破裂

几个月后,在先上隔离见证和区块链扩容的问题上两者产生了分歧(实际上由于BTC本来也不是一个中心化的组织,所以香港共识在BTC内部也没能达成一致),于是香港共识作废,双方进入撕逼状态

霸王硬上弓

由于谈判进行不下去,BTC决定硬来——从2017年8月1日之后,如果不支持隔离见证(用区块上的信息表示支持与否),那么新的节点不接受该链(UASF)

这样在算力不足(初始情况肯定是这样)的情况下会造成分叉,但是如果BTC的算力赶上来了,那么会合并,分叉又会合起来

矿工的对策是提议在7月28日就进行硬分叉,对于支持隔离见证的区块一律视为非法(UAHF)

但是由于后果太过严重,所以并没有采用,因为只要分叉就会造成用户流失以前比特币价格下跌,最后损失最大的还是矿工,随意矿工还是同意了隔离见证的升级

虽然吃了个亏,但是矿工因为这个事情团结在了一起,诞生了纽约共识——在支持隔离见证的前提下,把区块扩大一倍到2MB(segwit2x)

此项决议完全没有BTC的参与,并且飞快上线,比特币在上线当天暴涨20%

至此扩容事件告一段落

比特币的未来

现在的比特币

现在的比特币,是个中心化的交易量及其有限的非主流交易系统

在这个系统设计之初,是力求去中心化的——通过算力的去中心化来达到系统的去中心化

但是目前算力的过于集中应该是中本聪所没有想到的,他应该只是想建立一个去中心化的交易系统,并不是一个万世不移的中心化系统

十年后的比特币

首当其冲的问题,比特币值多少钱?

上面我们提到的货币体系公式:

看似比特币的价值主要取决于用户量的多少,但是当用户量增长到一定量级之后,比特币的价值会受制于交易量的大小

如何评估十年后的交易量?让我们考虑一下几个影响因素:

  • 区块的大小:目前segwit2x和bcc都把区块加到大约8MB大小,这基本上是目前比特币所能达到的极限,也就是说交易量大概会翻八倍;
  • 网速会有变化,考虑到过去10年网速提升了大概100-1000倍左右,最乐观的估计一个区块大概可以到800MB左右,已经是说翻800倍

除开交易量,再评估当时的真实交易需求kN

仔细比较安全性、交易延迟、交易费等等指标会发现,比特币目前最大的问题是易用性不好,甚至有点反人类——秘钥丢失=钱无法找回

对于十年后的比特币状态,作者的预测是——一个中心化的交易量尚可的非常难用的非主流交易系统

价格不会超过16000美元,如果那时候他还在的话

一年后的比特币

层出不穷的山寨币,其实是比比特币更薄更小的泡泡

比如算力只有比特币的十分之一、从比特币分叉出去的BCC,价格却达到比特币五分之一,如果市场持续不理性下去,那么实际上是在支持分叉的产生

而这些山寨币远没有比特币安全,如果有少量资本去攻击这些山寨币,那么会导致比特币的信任崩盘