区块链入门 | 希望区块链”讲人话“的朋友们,可以在这了解下

[复制链接]
7283 |0
发表于 2019-10-28 18:00:09 | 显示全部楼层 |阅读模式
来源:橙皮书

加入橙皮书的7个月零22天,经历了很多魔幻现实主义的故事,比如:
区块链从非主流甚至被认为是cx,到一夜之间在小扎和gj的双重助攻下成为主流媒体香饽饽的头条;
从我每次回家给我妈絮叨让她买点儿BTC,到人家都自己开始学用交易所交易反过来却嘲笑我江郎才尽;
从安安稳稳的编译通证经济学或稍微带点技术类的文章,到开始在新闻联播的号召下关注联盟链特色应用。

区块链真的进入了大众视野了吗?我经常会想,读者或者说希望区块链「讲人话」的大众,在什么情况下会去了解这个概念。

和自己利益相关(例如投资)?确实,在之前参加很多朋友和同学聚会上,大家会关心资产配置,“请给我们一些好的投资建议”。所以加密货币顺理成章引出来,但好吧,我只cxBTC,而且首先大家要知道的是,比特币不是一定一个起卖,他最小的单位是0.00000001(一亿分之一),称为一聪。
(推荐一下高金的科普 https://mp.weixin.qq.com/s/NPXSzAx8PkfLPTHtDaYh5WVVg)
共情?记得之前发过的一篇叙利亚去中心化革命的文章,讲的是在战火摧毁政府之后,叙利亚北部地区在尝试转变成一个以BTC为基础的经济体的故事,引起了诸多转发。有很多不是圈子里的朋友跑来说“真是学无止境”。
今天我们所在的世界又给了第三种答案...这个信号的号召力看起来挺强。
其实,我也是大多数。从加入橙皮书的第一天起,也是一个从Average Consumer开始学习区块链的过程。不管你是在研究经济学、了解多元化投资、好奇去中心化组织,抑或是被动响应上级号召学习“区块链精神”,或只是想看看这个世界还有哪些边缘化的生存和反抗...
于是,我们计划将橙皮书过去一年的文章进行整理,深入浅出地呈现给更多想要了解“区块链”的朋友们。那么第一篇,带大家一起了解「BTC是什么」。
这篇文章写给想弄明白BTC到底是什么,但又看不懂白皮书的朋友。这不是一篇爽文,但是也不难懂,有初中数学基础就够了。花10分钟读完之后,很多问题你会有自己的答案,比如:
“BTC有什么用?”
“区块链是不是泡沫?”
“要不要去梭一把?”
(以下为全文,Enjoy)

BTC到底是什么?99.99%的人说不清楚这个问题

这篇文章写给想弄明白BTC到底是什么,但又看不懂白皮书的朋友。
过去这一个月里,有很多对于BTC的讨论,但是对于最基本的问题“BTC到底是什么”,很多人还是没有概念。有一些文章用各种比喻解释了BTC的原理,我觉得还不够。要想真正理解,你需要弄明白BTC的核心机制和数学原理。
面对一个全新的概念和事物,要想直接回答“它是什么”,答案通常很晦涩。我们换个思路,绕后进攻。想象一下,如果要从零开始一步步重新发明BTC,这个过程是怎样的?
假定西游四人组穿越到现代生活,大家一起吃饭唱K。

每顿饭吃完都要用现金分账的话,太繁琐,而且八戒又经常忘带钱。悟空就提议:以后大家之间的经济往来,统一先记到一个账本上,月底发了工资再统一结算。比如今天大家一起喝酒,师傅买单,花了400块。老规矩,AA,账本上就记下这三笔:
悟空 要付给 师傅 100元
八戒 要付给 师傅 100元
沙僧 要付给 师傅 100元
明天大家一起捏脚,沙僧买单,花了800块,也记上:
悟空 要付给 沙僧 200元
八戒 要付给 沙僧 200元
师傅 要付给 沙僧 200元
到月底了,大家把账本上的记录一汇总,再用现金结清就好了。如果这个月就两笔(这是不可能的),现金结算是这样的:

悟空为了赶时髦,把这个账本做成了一个网站,他们四人都可以去网站上记一笔,都是兄弟嘛,放心。这套系统规则可以总结为:
1. 每个人都能在账本上记一笔交易
2. 月底用现金一次结清
最开始的几个月一切顺利。但是人性是经不住考验的,很快账就对不上了。悟空一查后台,发现八戒偷摸摸地写了好几笔假账:
师傅 要付给 八戒 200元
沙僧 要付给 八戒 300元
众人盘问之下,八戒承认错了,说是最近买OMG亏了太多,想凑点钱回本。
为了应对可能的作弊,悟空又想了一个办法,电子签名。
手写签名大家都很熟悉,你刷卡买一个东西,你的签名就代表你知道并认可这笔交易,不能抵赖,同时其他人也没法伪造你的笔迹,这样就保证了这笔交易是真的。

电子签名就不同了。理论上,电子签名就是一串0和1构成的字符,电脑是可以直接复制的,别人就可以仿造你的签名。

怎么办呢?密码学给出了一个很巧的方法。我们先给每个人发一对密码,一个是别人都能看的,叫公钥,一个是绝不能给别人看的,叫私钥。

如果你想对一笔交易签上你的名字,表示你认可它,你需要做如下操作:以这笔交易包含的信息和你的私钥为两个变量,输入签名函数,得出的结果就是对应这笔交易的签名,一个256位的二进制数字。

这个签名是无法伪造的,因为其他人不知道你的私钥,缺一个变量自然无法得出结果。
不用担心别人会根据签名算出你的私钥,因为这个签名函数是不可逆的。
同时这个签名也是无法直接复制并用到其他交易上的,因为一旦交易信息稍有变化,对应的签名也完全不同。
也就是说,特定的私钥、交易信息和签名是紧密耦合的,改变任意一个,这个组合就出问题了。
还有一个问题是,别人怎么才能确定这个签名的确是你按照私钥和交易信息算出来的正确签名呢?有请公钥出场了,任何人都可以如此验证:以这笔交易包含的信息、签名和公钥为三个变量,输入验证函数,得出的结果为真,签名就是对的,反之亦然。

理论上说,这个验证函数提供了一丝伪造签名的机会。你可以拿各种可能的组合去试,输入到验证函数中,撞上结果为真,那这个签名就对了。
问题在于,这是一个256位二进制数的签名,可能的组合数是2的256次方,大概是10的80次方,差不多和全宇宙的原子数是一个量级,一秒试一万次,你算到宇宙灭亡也算不完。
所以,如果经过验证这个签名为真,给出签名的这个人肯定是交易的主人没跑了(或者上帝本人)。
悟空说,有了电子签名,以后每笔交易都需要交易的主人签上自己的签名才算有效。
比如这条交易:沙僧 要付给 八戒 1000元 交易的主人是沙僧 那就得沙僧拿自己的私钥去生成针对这条交易信息的签名并且签上去,这条交易才算有效。其他人可以用沙僧的公钥去验证,看这个签名是否为真。这样一来谁都不能作弊了。
另外,为了督促八戒改邪归正,悟空还加了一条,大家先交1000的保证金,之后谁的账户余额降到0了,就不能继续交易了,也就是不能透支。
问题解决了,几个月过去,大家发现在新规则下,每个月不用现金结算也可以了,这个账本变成了小银行,账本上的余额就是每个人在银行账户里的钱。只要不透支,不需要现金大家也可以互相交易了,借钱还钱都可以靠记账解决。不妨把这个账本上的钱叫做西游币,兑换起来就是1元=1西游币
到这里,你会发现,账本在某种程度上已经扮演了货币的角色。系统规则也演变成了2.0版本:
1.每个人都能在账本上记一笔交易,不过必须交易主人签名才有效
2.不能透支
有一天,师傅突然给悟空出了个难题,现在这个系统虽好,但是也有隐患,如果控制账本所在的网站的人想作弊,谁去监督他呢?有没有可能每个人都有一个账本,各自记各自的,然后互相同步,互相监督?
八戒提出质疑,那要是大家记得账不一样,以谁的为准呢?
众人陷入了沉思。大家都记账的确可以免除对特定中心的依赖,但是如果有人作弊,导致大家的账本不一致,这时候怎么解决争端呢?
只见一片紫气东来,中本聪现身了。他丢下一张8页纸的天书,飘然而去。悟空拿起书,却见书中写道:
谁的算力大,谁说话算话。
悟空被瞬间点醒,开始给大家讲新方法:
咱们先分头记账,每隔一段时间,咱们就碰头核对下账本。怎么核对呢?玩一个数学游戏,就是找到一个对应账本的幸运数字,唯一的方法就是靠猜,谁的计算力大谁就更有可能猜中,而且猜中有奖励。猜中之后,这次核对的账本才算确定了,大家都以这个账本为准。
如果核对的时候,发现八戒写的账本有个地方和其他人都不一样,怎么办?没关系,还是玩这个猜数字的游戏,只要作弊的那一方拥有的算力没有过半,没有作弊的一方就会获胜,因为它的算力更大。最后大家还是会以游戏胜利者也就是正确账本为准。
大体就是这样,具体细节是怎样的呢?到这里,我们已经准备深入到BTC的核心思想了。为了彻底搞明白,我们需要先介绍几个不那么常见但是非常有用的概念。
先来介绍关键的大杀器:SHA256算法。
SHA256是一种密码哈希函数,输入任意一段信息,运行SHA256函数,输出的结果会是一串256位的2进制数,这个数字就是这段信息的哈希值或者摘要,可以理解为这段信息的特定ID。
世界上所有信息都有自己特有的哈希值,一一对应,绝不重复。

SHA256还有一个特性,就是没法逆向运算,只能根据信息算出信息的哈希值,而没法根据信息的哈希值去算出信息本身。如果给出一个哈希值,想知道对应的信息,唯一的方法是一个个试,没错,又是2的256次方分之一的机会,试到宇宙毁灭也不一定能试出来。
这个大杀器就是刚才提到的数学游戏的基础。只要它依然坚挺,没有被破解,BTC就是数学上可靠的。
接下来我们详细看看这个数学游戏是怎么运行的。
我们假定在账本上每一页只能记十条交易信息,记完一页就得找一个幸运数字签在这一页的最后,这个数字必须使得这一页所有信息(包括数字本身)的哈希值满足一个特点,比如前30位都为0。只有签上这个数字,这一页账本才算有效。

如此一来,由于SHA256的特性,找到这个数字只能靠试错,成功机会又特别低,2的30次方分之一,也就是说,大概 得试上十亿次,才能成功一次。靠买彩票中五百万就是这个游戏的翻版,不过中五百万的几率还是不错的。
一旦有人找到了这个数字,其他人要想验证这个数是否正确,只需要算一遍就可以了,非常简单。这一点和买彩票也很像,你有没有中奖,查一下就行。
这个幸运数字就叫Proof of work,工作量证明。如果你能找到这个特定数字,就说明你投入了足够的时间和算力(因为也没有其他方法了),同时其他人还能很简单的验证这件事情,不用重新花力气再算一遍。那么为什么会有人愿意投入时间、机器和电费来玩这个游戏呢?因为我们设计了奖励机制,猜中这个数字的人会获得一定数目的BTC作为奖励,那一页账本上会加一条,谁谁谁获得2个BTC。
有了这种游戏,人们就会自发的去验证BTC网络里的交易是否有效,而且唯一的方法就是投入时间和计算力去猜。初看起来可能并不高明,浪费这么多资源就为了玩数字游戏?别急,一会你会发现别有洞天。
最后要介绍的是blockchain,区块链。这个词是怎么来的呢?BTC把账本分成了很多块,每块上记录一定数量的交易,每一块叫做一个block,区块。每个区块的底部会附上对应的幸运数字,工作量证明。同时,在区块的顶部,还会附上前一个区块所包含信息的哈希值。于是区块就连成了一条链。其实区块链就是一种结构比较特殊的账本,改变其中一页,整本都会出问题。

把区块连成链是一个非常精巧的设计。
第一,改变任意一个区块的信息,都会导致这个区块的哈希值变化,同样也会改变下一个区块的信息(因为是包含关系),接着之后所有的区块都会改变,整条区块链都会变的无效,得重新再算一遍,找到对应的POW才行。这一点保证了整个账本的严密准确性。

第二,不同区块之间的位置代表了不同交易发生的先后顺序,如果改变区块的位置,因为同样的原因,整条链也会变得无效。这一点保证了交易时间记录的准确性。
最困难的部分介绍完了,我们可以歇口气回顾一下:
一个大杀器:
SHA256算法可以让我们输入任意一段信息,得到一个对应的数字,这个数字就是这段信息的哈希值,就像个人ID一样独特。反过来,通过哈希值来算出对应的信息,只能靠猜,而且很难猜。
一个数字游戏:
对每一页账本,我们可以找到一个幸运数字,使得它的哈希值前30位都是0。这个数字很难猜,猜中的会获得BTC作为奖励。和买彩票很类似。
一个设计精妙的结构:
区块链就是把整个账本分成许多区块,前一个区块的哈希值写到下一个区块的顶部,以此把所有区块关联成一条链,改变任意区块的信息或者位置,都会影响整条链。
说完这三件事,我们可以来具体看看BTC是怎么运行的了。
对于普通用户来说,完成一笔交易,就把这笔交易的信息广播出去。同时,有一些用户会不断收听整个网络里的交易信息,把这些交易信息打包成区块,然后飞快的猜那个幸运数字。一旦有一个人猜到这个幸运数字,就会获得几个BTC作为奖励。这个区块也被证明有效,并再次广播到全网,被大家记下来。这些不断猜数字的用户就是我们常听到的“矿工”,猜数字的过程就叫“挖矿”。

考虑到他们在做的事情,的确是有点像辛勤工作挖金子的过程。不过真实的BTC矿工并不用亲自下地,只需要用大量的计算机去疯狂的玩这个猜数字的游戏。
矿工和普通用户都是BTC网络中的一个节点,区别在于,验证区块需要很高的计算力,所以矿工通常都是有专业设备比如ASIC或者高端显卡(GPU)的。普通用户用的就是普通电脑,求没法参与验证交易了,但是把自己的交易信息广播出去还是可以的。矿工更像是这个系统里的管理员,能做更多普通用户不能做的事情,比如验证区块并获得奖励。

矿工需要收听全网的广播信息,普通用户则只需要收听矿工广播出来的验证过的区块,同步到自己保存的区块链上。如果收听到两个区块不一致,到底听谁的呢?中本聪给出的方法是,算力为王,哪个区块背后的算力更大,或者哪个区块所在的链更长,就听谁的。
为什么这么做有效呢?我们再次绕后从反面来破解这个问题。想想看,如果你想在BTC网络中作弊,具体过程是怎样的?需要什么条件才能实现?
假设八戒想作弊,大家一起吃了饭,师傅买单,按道理八戒应该给师傅100块。其他矿工都在区块里记上了这一笔:
八戒 要付给 师傅 100元
同样是矿工,八戒却在区块里抹掉了这笔账,打包出了一个“不一样”的区块,验证之后发给了老实的沙僧。
沙僧那边收到的消息在这个节点上开始分裂了。八戒发给他的区块单独形成了一条链,其他矿工的区块则形成了另一条链。

那么,哪条链延长的速度会更快呢?考虑到这是一个完全随机的猜数字过程,长期来看,两方链延长的速度正比于各自掌握的计算力大小。也许八戒最开始的几个能撞到狗屎运,比其他人加起来都快,但是时间一长,自然会寡不敌众。其他矿工的区块链会飞速延长,基于“谁的区块链长就听谁的”这条规则,沙僧会放弃掉八戒那条链,转而把其他矿工的链保存到自己的区块链中,共识就这么达成了。

也就是说,当你收到两个不一样的区块时,先别急着决定听谁的,让区块链再飞一会,等到其中一条领先另一条至少六个区块以后,基本就板上钉钉了。
当然,如果八戒自己掌握了全球一半以上的算力,自己成了多数派,那这个系统就崩溃了。但是由于各种复杂的现实原因,这个条件很难达成。
BTC的这个算力为王的机制,有点像投票表决。大家意见不一致的时候就通过投票来达成一致,票数为王,少数服从多数。如果你想作弊,不是不可以,但必须获得过半数的票。
到这里,BTC的完全体诞生了,系统规则3.0版:
1. 只要投入算力和时间,每个人都能记账和验证
2. 区块链分裂时,保留算力大的那条链
以上就是BTC的基础运行原理了。我们从原始的现金交易,到电子签名和中心化账本,再到更先进的分布式账本+POW+区块链,短短十分钟走完了人类货币演化史。未来人类的货币金融体系会如何演化,BTC的儿子孙子命运如何,也许你我都有一个模糊的答案。
很多技术细节在这篇文章中没有提到,是因为我希望用尽量短的篇幅把BTC的骨架型原理讲清楚。想了解更多的朋友可以看这里:
https://www.bilibili.com/video/av12465079/?t=381
https://bitDAC.org/bitDavinci.pdf
http://www.michaelnielsen.org/ddi/how-the-bitDavinci-protocol-actually-works/
“人类由故事和共识驱动。”BTC和区块链完美诠释了这句话。如果你也相信这个故事,帮我也帮你一个忙,让更多人看到这篇文章,相信这个故事。
Together, we will...


20191028172309_J9zS.jpg

20191028172309_J9zS.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表