这篇文章源于一个小任务,自己顺带着扒拉了些资料,适合给小白看,弄清区块链是个什么东西?
区块链是怎么来的?为什么突然就爆发出来这么一个东西?
个人认为主要有两点,一个是08年的金融风暴促成的。最初比特币的发明人中本聪这类人一定是那种对于权威性的、中心化的东西是很排斥、甚至反感的人。
这世界最大的中心化有两种,资本的中心化和权力的中心化。美元霸权就是资本中心化里最强的中心点。几十年来,随着美元的潮汐涨落收割了全世界的财富,流到了老奴隶主的仓库里。
给大家看张图。
这张图是啥呢,叫加密无政府主义者宣言。
全世界的密码朋克们,
有些朋友参加了昨天在硅谷举办的密码朋克线下聚会,希望能把更多会议资料以电子版的形式发布出来,让密码朋克邮件列表上的所有读者以及监视我们的国保、网监等等各种人都能读到。
下面给出这篇《加密无政府主义者宣言》,我在 1992 年 9 月第一次密码朋克会议曾经宣读过。这个文本最初是在 1988 年中写的,我在「Crypto'88」研讨会和当年晚些时候的「黑客大会」这两次会议上发给了一些志同道合的技术无政府主义者。后来,我又在 1989 年和 1990 年的黑客大会上就此发表过主题演讲。
我本来想做一些改动的,但还是决定让大家看到其历史原貌。文中有一些术语可能比较陌生……希望之前发给大家的《Crypto 术语表》能派上用场。
中本聪应该就是这样的理念。这些人希望用技术改变现实结构中的中心化压迫和奴役。比特币以及支撑它运行的区块链从根本上说是一个去中心化的分布式账本。也就是说比特币的区块链是用来记录一笔笔账目的。其核心目的就是摆脱对第三方中介的依赖,人人可以记账,同时又保持大家维护同一份账本,不会出现不一样的情况。
另一个是相关的技术储备都完备了。那这里边就有几个问题需要解决了。一个是双花问题,所谓双花就是一笔钱花两遍。这个问题是电子货币独有的。因为电子货币就是一堆代码,是很容易复制的,它不像我们的实体货币,你不可能拿着一笔钱花两次。区块链中是怎么解决的呢,就是人人都记账,而且账目是公开的,相当于这个网络中的每个人都可以查账,而且大家手里的账本都是一样的,这样的话假如A同时转了一笔钱给B和C,从账本里大家会发现这个问题的。另一个是共识问题。简单讲,共识就是大家达成一致协议,维护一个共同的账本。这样就让一些故意造假或疏忽记错的账本不会影响总的账本,让大家维护共同的一个账本。
区块链的结构和运行机制
前面我们提到相关的技术储备都完备了。下面我们看下区块链的实际架构是什么样。为什么用到这些技术?具体他是怎么解决共识问题的?
这里我找到一张图,区块链的四大支柱就是P2P网络、密码学、数据库和共识机制。这些技术在区块链之前都是较为成熟的技术,但是区块链的发明使这些技术组合起来使得一个去中心化的分布式账本得以实现。下面我们分别来看看这四大支柱。
首先是密码学。密码学是电子货币的根基,早在比特币和区块链发明钱,电子货币就已经被发展出来了,比如Ecash,这其中最关键的就是密码技术的使用,他可以通过盲签名技术加密交易信息,但这个电子货币系统还是依赖于中心节点的结算,也没有流行起来。
密码学在比特币区块链中的应用主要有两类:一个是非对称加密的应用,一个是哈希算法的应用。前者主要是为了保护交易信息在交易网络中传递的时候被人窃听或篡改,使用的是电子签名技术。在比特币中,使用一个随机数生成一个密钥,首先使用随机数发生器生成一个私钥,它是一个256位的二进制数。私钥是不能公开的,相当于银行卡的密码。通过一个已知的私钥,生成一个公钥,但是通过公钥不能反推出私钥。这个公钥相当于你的银行卡卡号。另一个哈希算法的使用,我们留在共识机制里面再讲。
其次是P2P网络,也就是点对点分布式网络。通过这个技术可以建立分布式交易账簿,并以呼叫问答机制向全网广播,网络节点不停地检查接收的数据,避免数据被篡改。
这里的检查就是得益于上一点的数字签名技术,当A节点发起一笔交易时候,任何收到这条交易信息的节点都可以用A的公钥去验证这条消息是否经过篡改。
第三个支柱就是共识机制。这个解决了分布式网络中所有节点保持一致的问题。使得所有人维护同一个账本,双重支付的问题也得以解决。共识机制有很多种,如pow、pos等。比特币所使用的共识机制pow,叫做工作量证明。
共识机制,是理解区块链最核心的部分,就是怎么在分布式网络的节点中,维持一个共同的账本,让记错的节点,故意记错的节点都不会影响到这个最终账本的权威性。
为了说明这个问题,我找到了一个小例子。
现在我们模拟一个由10个人组成的交易网。这10个人都不相信会计之类的第三方能帮他们准确的记账或者不造假账,所以他们决定由他们自己来记账。10个人共同维护一套账本。怎么做的呢。就是每当有一笔交易,交易人就隔空向大家喊话,我向某某转了一笔钱,这个消息是经过签名的,然后通过p2p网络传递到每一个人,这时候每个人都可以通过交易者的公钥去验证是不是由其本人发起的,消息的传递过程中有没有经过篡改,如果没有问题,这时候每个人都把这条消息记到一张纸上,这样经过10条消息后,这张纸被记满了,然后为了保持一致性,我就推举一个人把他的这张帐页作为公共账本的一部分。
谁最终拥有这个记账权呢?我决定谁做的工作多,贡献大,我就把这个记账权给他。如何衡量这个工作量呢?使用的方法就是哈希算法。
简单介绍一下哈希算法,哈希算法是一个单项的算法,它可以把一堆任意长度的字符串输入转化为固定长度的输出。并且从输入到输出是很容易计算的,但是反过来却很难。所以知道一个输出结果,想算出它的输入值,没有别的办法,只能使用计算机暴力穷举,简单说就是挨个试。
那具体到这个记账权的决定,我设置了这样一条规则,就是一页帐页写满后,大家开始计算这页内容加一个数字的哈希,它的输出必须满足前3位全是0。这个要求目前的理论和技术条件下,没有别的办法,只能暴力穷举。也就是说谁掌握的计算机比较强,算力大,谁首先算出的概率就比较高。
当一个人首先计算出这个结果,他就在群里喊一嗓子,同时把算出来的数字作为封戳将这页帐册封到信封里。然后大家就根据他算出来的这个数字去验证,验证有两点,一是算得对不对,也就是拿封戳这个数和帐页内容的和去哈希,能不能得出符合要求的结果,这个过程前面说了是很快的,二是验证他的帐页内容是不是和各自记得一致,因为哈希的特性,输入有一点改变,结果也是不一样的,这样就保证了记账的这个人是不能篡改帐页内容的。这样验证没问题后大家就把这页帐页的记账权归他,也就是总账本以他的为准。后续的交易以此循环,不断的以谁先谁出来赋予谁记账权。这些帐页怎么把他们串在一起组成账本呢,还有一个小技巧,就是我们讲的在计算哈希的时候,有两个输入,一个是帐页内容,一个是不断试错的值,其实还有一个就是前一页的哈希结果,这样每一个都跟前面的一页联系了起来,如果前面的内容有改动,那跟后面的帐页的联系就断开了。所以如果取得记账权的人动了坏心思,想把账册内容改动一下,同时把封戳拿掉,重新换一个,如果这样的话,所有在这页帐页后面的都会断掉,他必须重新计算后面每一个帐页的封戳。而我们前面说了,每一个帐页的计算都是要耗费大量计算能力的,在一个由无数节点构成的分布式网络中,除非你掌握了全网51%以上的算力,你才能做到这一点。这里面隐含了这样一个假设,就是说每一页帐页的记账权大家都是在争抢的,为什么要争呢,有人算好了,我们等着用不就好了么。其实是因为有奖励机制,比如谁先算出来,团队成员就给他一个金币。在比特币区块链中,这个奖励就是比特币,只不过这个比特币是凭空出来的。所以这个记账权大家都是来抢的。
以上就是比特币区块链的共识机制的解决方案,可以看到他是两条腿走路的,一条基于数学,一条基于人性。
其实为了更好的理解共识,我们还可以介绍一下拜占庭将军问题,这里我们先略过,等正文完事,整个有一个粗略认识后,我们可以回过头来再看,以加深认识。
最后一个是数据库,这个没啥好说的,整个区块链就是记录币的生成和交易记录信息的,是一个以区块为基本单位的链式结构,这个链就是上面讲前一页和后一页的哈希联系。
这节我们了解了区块链的缘起和运行机制和架构,下一节我们将实际的看一看区块链的实际结构。