区块链,成为这两年最火的互联网字眼,但估计大多数人都只是听着耳熟,并不真正了解。
与区块链一起出现最多的词是比特币,显然,它们之间肯定存在某种紧密的关系。
本文是一篇深度介绍比特币和区块链知识的文章,我努力按照“自顶向下、逐次求精”的原则,将比特币和区块链知识像剥洋葱一样,一层一层地深入下去,让读者每剥下一层都有完整的知识收获。
去中心化
区块链原本是一种基于互联网的信息编码、传输、加密、解密、验证技术,但在我看来,现在已经上升到了一种“去中心化”的理念,本质上是一种理念上的革新。而比特币就是这种理念的一个具体应用。
打个比方来说,区块链就相当于电子商务,你想想二十年前有几个人搞得懂什么是电子商务,它本质上也是一种理念,只不过这种理念必须要借助一定的技术手段来实现。而比特币就相当于淘宝网,是电子商务的一个具体应用。
所以,我们要理解什么是区块链,必须先理解什么是去中心化。我举两个例子来帮助你理解:
第一个例子是从网上下载电影。最早的时候,我们下载电影都是到一些知名的电影下载网站,这些网站会把电影文件存放在一台或者一组服务器上,大家都访问这台(组)服务器下载影片。这叫中心化。
在这个游戏规则中,电影网站的服务器就是中心,每一个下载电影的人只不过是这个中心拉出来的线而已。中心化的游戏中,玩家的地位是不平等的,网站主占据绝对强势地位,他想让你下载就下载,想给你限速就限速。
后来,一种去中心化的下载模式出现了,这就是BT下载,也叫P2P(peer to peer)下载。现在我们讲到P2P,一般是指那种个人借贷的网站,但最初的概念是从BT下载来的,P2P就是个人到个人,点到点。BT下载的原理与电影网站完全不同,影片并不是存在某个服务器上,而是大家互相从网络上的每一个人那里去下载这个影片的一小部分,最后拼成一个完整的文件。
在这个游戏中,所有玩家的地位是完全平等的,任何一个玩家都可以随时离场、随时加入,只要还有人在玩,整个游戏就能正常运行,没有人拥有特别的权力。这就叫去中心化。
第二个例子,就是我们每天都在使用的银行卡或者支付宝、微信这些人民币支付手段,现金我们先抛开不谈。我们用无现金的方式支付人民币买东西,就是一个中心化的游戏,它的中心有好多级,比如说,支付宝的服务器是第一级中心,支付宝资金的托管银行如工商银行、中信银行的服务器就是第二级中心,这些银行的再上一级中心就是央行——中国人民银行的服务器。
在这个游戏中,不同级别玩家的权力、地位是不平等的,最大的Boss当然是央行,它甚至能发行货币,它的权力可以大到分分钟就把我们的钱全部抢光,很简单,它只需要突然增发货币就可以了,物价突然上涨一百倍,我们的钱就等于被抢光了。那货币游戏能不能像下载电影一样去中心化呢?也是可以的,比特币系统就是这样一个去中心化的货币游戏系统,你可以把它看成是一个大型的货币实验。
比特币的游戏是这么玩的,就两条核心规则。第一,它的货币发行不是由某个机构说了算,而是公开一套算法,每算出一个符合要求的数字,就相当于挖到了若干个比特币。谁都可以去算,绝对公平,谁也作不了弊,因为算法本质上就是一个个数字去凑,凑出一个算一个。第二,比特币的交易信息不是记在某一台服务器上的,而是所有参与这个游戏的玩家电脑中一人一份,同步记录,这种交易记录在理论上几乎是无法篡改的。
这就是“去中心化账本”。
这样一来,所有游戏玩家的地位和权力就完全平等了,几乎没有任何一个玩家是特殊的。为什么要加上“几乎”两个字呢?因为,毕竟能够有能力挖比特币的那些矿主还是有点特殊的,但这种特殊性并不是太大,而且矿主也没有任何壁垒,只要你买得起好电脑,谁都可以当矿主。
不得不说,比特币的这个“去中心化”设计非常之妙。它的发明人,神秘的中本聪(Satoshi Nakamoto)确实是棵“大葱”。
理解了去中心化,就等于理解了区块链。一个真正的区块链项目,就是通过合理的游戏规则设计,辅以信息技术,来践行去中心化理念的项目。比特币系统就是去中心化理念和区块链技术的一个优秀示范项目。
不夸张地说,我觉得这是一场互联网的理念革命,是人类的又一次平等化革命。上一次革命是打破了人与人之间在身份地位上的不平等,这一次则是打破了游戏规则本身的不平等。正因为这样,区块链才能激发人们如此大的热情,这是一个听上去可以颠覆一切旧规则的新生事物。
然而,在我看来,比特币系统并不是一个成功的区块链应用,甚至先天不足。为什么这么说呢?因为,看前面介绍的两条比特币核心游戏规则就知道,它有以下这些天生的缺陷:
第一,比特币客户端软件需要巨大无比的存储空间,因为每一个节点都必须记录下从比特币系统诞生的第一天起所有的交易记录,截止到本文写作时(2018年2月13日),这个交易记录文件已经有147GB那么大了,而且只会增加不会减少。
第二,为防止有人作弊,比特币系统有一套很复杂的游戏规则来确保交易记录是真实的,这样就导致每一笔交易的确认时间一般需要一个小时甚至几天。想想吧,如果用比特币去街边买杯奶茶,会是什么情况。
第三,最多只有2100万枚比特币,而且,无论有多少人在挖矿,系统规则决定了平均每十分钟才能产出若干枚比特币(2018年是每十分钟12.5枚)。矛盾正如那句话:人民群众日益增长的比特币需求与比特币总量不足之间的矛盾。
比特币不能代表区块链,区块链也不是比特币。区块链在未来可以有哪些应用呢?
实际上,区块链解决的核心问题是信任问题。所有的金融机构,银行、保险、券商等等,让它们赖以生存的根本是信用,我们之所以会放心地买股票、买期货、买纸黄金,都是因为我们信任充当交易中介的机构,而这些交易中介,就是金融活动的中心,我们宁愿为此付出一定的手续费、交易费,金融机构也因此挣得盆满钵满。
但是,当区块链在人们的观念上和技术上都成熟后,这种中心化的金融机构是有可能被颠覆掉的,因为我们可以利用区块链的理念和技术来改写游戏规则,让所有的金融产品交易都不再需要一个中心,而全部以点对点的方式完成,并且从理论上能够保证信用问题。
到了那时,银行还需不需要我不知道,因为银行还涉及更复杂的国家利益问题,但是,一定会有很多商业金融机构受到区块链的冲击。
再比如,公证也是一个典型的中心化的贩卖信用的机构,区块链完全可以改写公证行业。关于区块链的应用,后文还会有详细阐述。
到此,我们对比特币和区块链建立起了总体概念,接下来,我要帮你剥掉下一层洋葱皮,了解一下比特币系统的基本原理。
比特币基本原理
数字指纹和非对称加密
去中心化的账本还是很容易理解的,只要把所有的交易记录都记在每一台电脑的账本上,然后就可以用计算机的强大计算能力,随时随地查出每个人的余额是多少。
但是大家不要忘了,在网络上记账与线下记账不同。网络上都是消息来消息去的,大家根本不见面。
如果你收到一条信息,上面写着“A支付5元钱给B”。这时,你不禁要问:
第一,如何确保这条信息内容的完整性?第二,如何确保信息的真实性?这两个问题不解决,去中心化账本的理想就无法实现。解决办法是有的。我们先来看怎么解决第一个问题:确保记账信息的完整性。
这里要引入一个概念,就是数字指纹(很多文章中也叫数字签名、哈希值)。电脑上的任何信息,按照国际统一的编码标准,最终都是以0和1来存储,这就是大名鼎鼎的二进制。例如“钱”这个字用二进制表示就是“1001010010110001”,再比如“A支付5元钱给B”这句话,用二进制表示就是:
0100000111001010010111110011101101100000110101101000101000011100101001011000111111101101100101000010:
普通人看到二进制往往无法和数字建立联系,实际上,这串二进制数字也可以用一组十进制的数字来表示,它们完全相等:
100000111001010080606408664086260086008422488464406842602666664446622202242228042826680682422068400:
看到了十进制的数,很多人才会认为这确实是一个“数字”。这就是数字指纹了吗?还不是。
二进制和原始信息只是一一对应的编码关系,一个英文字母或者数字对应8个比特,一个中文字符对应16比特,原始信息越长,二进制编码也越长。任何原始信息都可以转换成一串数字,有了数字就可以做数学运算,玩出各种花样了。
现在,我们给数学家提出一个要求:请设计一个算法,将任何一条信息,不论长短,都计算出一个唯一的“数字指纹”与它对应。但有两个附加条件:一、指纹的长度必须固定;二、只能从“原始信息”计算出“指纹”,谁也无法从“指纹”反向计算出“原始信息”。
这个要求,看似很过分,但是难不倒数学家。1993年,美国国家安全局发布了SHA算法,全称是Secure Hash Algorithm,中文一般翻译为“安全散列算法”或者“安全哈希算法”,这个名称估计把你吓到了,听着特学术(我有时候会听人说“嘻哈算法”,忍不住偷笑一下,各位千万别读错)。
Hash这个词没有对应的中文意译词,如果让我来意译的话,我会翻译为“数字摘要算法”,基本上能表达该算法的含义,就是从目标对象中提取出一个特征摘要,好像人的指纹一样。
SHA算法从1993年发布它的第零代,一直到2015年发布第三代,二十二年间已经升级了四次。比特币用到的是第二代算法,简称为SHA-256算法,这里的“256”表示,由这个算法生成的指纹长度固定为256比特。大家可以很容易在网上找到在线生成SHA-256指纹的网页,这个算法是公开的,谁都能用,例如,“钱”字的SHA-256指纹是:
0000111010111000011000111100011110001101101000111110001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:
“A支付5元钱给B”的SHA-256指纹是:
1111011110111011001010011011101011011111000001011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:
大家看到,不论原始信息有多长,生成的指纹都是一样长的。而且这个指纹还有两个显著特点:一、原始信息只要改变一点点,哪怕只改动一个数字,整个指纹就会发生巨大的变化,毫无规律可循;二、截至本文写作时,世界上还没有任何公开的方法可以从指纹反向计算出原始信息,普遍认为理论上无法破解。
不过,在实际的使用中,256位的二进制数据太长了,使用起来极不方便,还很容易看花眼。于是,指纹通常用十六进制来显示,反正二进制到十六进制是一一对应的。
“钱”的十六进制指纹是:
0eb863c78da3e38b6b92d1f3999566e5d8e17a6f700a112c8993cf6bfc48f70b
“A支付5元钱给B”的十六进制指纹是:
f7bb29badf05d41e60b1036d749f134a901c7a97daef7a1fe4e1e14471bd4833
这样看起来就简洁多了,我们可以试一下把“5元钱”改为“6元钱”,看看指纹的变化有多大,下面是改后的指纹:
1d48da12b0fb29efe6f690185922f96d259bd887343735898bfc3901a83b58c3
看到了吧,仅仅改动了一个数字,但指纹几乎没有一位是相同的。这就是SHA算法的神奇之处,也确保了指纹没有规律可循,无法被反向破译。
有了数字指纹,就可以解决第一个问题:确保记账信息的完整性。怎么做?很简单,我们只要做出一个规定,任何发出信息的一方,必须同时发出原始信息的指纹。那么收到信息的一方只需要用公开的SHA-256算法把原始信息也生成一个指纹,和收到的指纹比对一下,如果一致,就说明收到的信息是完整的;如果不一致,说明收到的原始信息由于某种原因被修改过了,这个原因可能是数据传输过程中的错误,也可能是被人篡改了等等。
那会不会有一种巧合,原始信息和指纹都因为某些传输错误发生了改变,恰好错误的指纹数据就是出错后的原始信息指纹,也就是负负得正了?这事当然不是绝对的不可能,但是从概率上来说,想要自然发生,大概等到宇宙灭亡了也不会发生一次,概率已经低到可以彻底忽略。
不过,你可能也想到了,还有一种可能性,就是黑客恶意篡改。因为SHA算法是公开的,如果有一个黑客拦截了原始信息和指纹,他把原始信息修改掉,比如把“A支付5元钱给B”改为“A支付5元钱给C”,同时生成新的指纹发送给你。这该怎么办呢?这就是我们要解决的第二个问题:如何确保信息的真实性?解决这个问题,等于也解决了信息发送方想抵赖的问题。
解决第二个问题的关键就是给指纹加密,但是,这种加密还不能是我们在谍战剧里看到的那种电报加密的方式。大家不妨回忆一下看过的谍战剧,我地下工作者收到一封电报,上面写着2352,于是他从书架上拿出一本书,翻到第23页,再数到第52个字,写着一个“撤”字。这就是组织上通知这位同志马上撤退,有人叛变了。这种加密方式的坏处在于,只要敌人也掌握了密码本,不但可以破译电报,还能发送假电报钓鱼,原因就在于加密和解密的方法是完全一样的,能解密就能加密,所以,这种加密方法被叫作“对称加密”,解密的过程只不过是加密的逆过程而已。
“对称加密”用在我们想要的去中心化账本系统中就不好使了,因为我们既要让网络上的每一个信息接收者能够解开密文知道原始信息,又要让黑客即使拿到密文也只能干瞪眼,无法篡改密文。
个中关键,在于加密和解密的方法必须不一样。所以,就要求数学家搞出一种全新的加密算法,这种算法是非对称的,加密、解密不是互逆的过程。
能不能搞出这样一个巧妙的加密算法呢?当然是能的,否则就不会有比特币了嘛。下面我用一个简化版的非对称加密算法模拟一下我们想实现的效果。
原始信息是一组数字:269。
现在,我用一种只有我自己才知道的加密算法得到一个密文:24479。
然后,我把24479告诉所有人的同时,还宣布:解开我这条密文的钥匙就是数字11(后面我们就把这个公开的钥匙称为公钥),任何人只要用24479乘以11,取结果的后三位,就能得到我想要告诉大家的原始信息。不信吗?我们试试看:
24479×11=269269
哇,好有意思,不单后三位,连前三位都是原始信息。我是怎么加密的呢?很简单,我把原始信息乘以91就是密文,而这个91就可以叫“私钥”,我私人的加密钥匙。这样就实现了加密和解密是完全不一样的两种算法。
你可以试试看,用任意一个三位数字乘以91,得到的结果再乘以11,最终得到的结果一定是原始三位数写两遍。例如:218×91×11=218218。
如果用任意一个二位数字乘以91,得到的结果再乘以11,最终得到的结果后二位数字也一定与原始数字相同。例如:18×91×11=18018,至于它背后的数学原理,稍微琢磨一下就能想明白了。
但是请记住,我举的这个例子只是让你体会一下什么叫非对称加密,因为这个例子的算法太过简单,所以知道了公钥是11的人,很容易猜出私钥是91。但是比特币系统采用的算法比这个复杂多了,那个算法确保了任何人即使知道原文、密文、公钥,也无法猜到私钥。也就是说,黑客只能解密,但不会加密,无法修改密文。
这么牛的算法,就是声名远播的“椭圆曲线算法”,简称为ECC算法。
它是在1985年由两位美国人尼尔·库伯利兹(Neal Koblitz)和维克托·米勒(Victor Miller)分别独立提出的。在密码学中的广泛使用,也就是最近十多年的时间,数学家真的很厉害。有了这个算法,就能确保去中心化的记账系统中,每条交易记录的真实性。我们来演示一下比特币的去中心化记账系统如何利用SHA和ECC算法确保账本的完整性和真实性(以下是简化后的原理说明,真实过程还要复杂很多,但原理不变)。
需要记账的原始交易信息:A支付5元钱给B(以下简称“原文”)。
第一步:利用SHA将原文生成数字指纹:
f7bb29badf05d41e60b1036d749f134a901c7a97daef7a1fe4e1e14471bd4833
第二步:随机生成一个私钥,它的格式与指纹是完全一样的,例如:
18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725
第三步:利用ECC将第一步得到的数字指纹通过私钥加密,得到密文:
869ac57b83ccf75ca9da8895823562fffb611e3c297d9c2d4612aeeb32850078
第四步:根据私钥生成一个公钥:
600FFE422B4E00731A59557A5CCA46CC183944191006324A447BDB2D98D4B408
第五步:将原文、密文和公钥广播到整个比特币网络中。信息发送步骤到此结束,以下是信息接收步骤。
第六步:接收方利用ECC将密文通过公钥解密,得到指纹1。
第七步:利用SHA将原文生成数字指纹,得到指纹2。
第八步:比对指纹1是否等于指纹2。
第九步:如果相等,则确认该条信息是合法交易信息,添加到自己的账本中。如果不相等,则抛弃该信息。至此全部结束。在真实的比特币网络中,交易双方都是完全匿名的,交易者A或者B都是账号(有些文章中称“地址”,含义一样),账号背后的主人信息是没有任何记录的,可以是一条狗,也可以是一个人工智能,而账号则是根据公钥,通过一定的算法生成的。
一个私钥几乎可以生成无数个不同的对应公钥,也就意味着可以生成几乎无数个不同的对应账号。谁掌握了私钥,谁就是账号的主人。
在比特币网络中,私钥是动用账号中比特币的唯一凭证,如果你的私钥被盗,你就永远失去了它,打官司也要不回来,因为没有任何方式可以证明他的私钥是从你这里偷走的。
比特币原理深入
区块链技术
到此为止,我们去中心化账本的理想只实现了一半,并没完全实现,为什么呢?因为还有两个重大的问题没有解决。
第一个问题:账本同步问题。比特币网络中有那么多台电脑,一条交易信息发送出来的时候,当然不可能所有的电脑都开机,必然有一些处于离线状态,开了电脑也未必开着比特币客户端,所以总有一些电脑无法立刻收到这条信息。这样就会导致不同电脑上的记录不同步,到底以谁的电脑记录为准呢?
第二个问题:如何防止同一个比特币被重复使用?假如有一个黑客,他只有一个比特币,但是他却同时把这个比特币付给A和B(虽然理论上无法真正同时,但可以做到间隔时间极短),于是就会在网络上广播两条信息,一条是支付给A的信息,一条是支付给B的信息,因为网速的关系,必然有的电脑先收到信息1,有的电脑先收到信息2,这就产生了矛盾,如何确定哪一条信息是有效的呢?
为解决上面这两个难题,区块链技术横空出世。
中本聪的论文真正在全世界掀起大风大浪,不是因为上一节介绍的比特币基本工作原理——数字指纹和非对称加密都是成熟的技术,真正让他一战成名的是区块链技术。但请记住:比特币不是区块链,它只是区块链技术的一个具体应用。
到底什么是区块链?它怎样巧妙地解决了账本同步和信息不重复的问题呢?
中本聪的总体思路是这样的:比特币网络中的所有电脑都只认可唯一的一个账本,任何一台电脑在接入比特币网络时,首先要同步这个唯一的账本,任何一台电脑想要往这个账本上写入新的信息,必须完成一套繁琐的“手续”,这套手续复杂到几乎不太可能被同时完成两次,即便真的发生了巧合,被同时完成了两次甚至多次,也有一个规则可以判定哪条信息是合法的,哪条信息该被抛弃。
让我一步步为你揭开区块链技术的面纱。
为什么要叫“区块链”?因为中本聪把这个账本设计成了由一个个“信息包”首尾相连而成的长链,每一个信息包被称为一个“区块”,这些区块每一个都有唯一的编号——在比特币系统中,编号被称为高度(height),这些编号就是自然数1、2、3、4……一直往下排,不允许跳跃,也不允许中断和重复。
下面讲解区块的具体规则。
第一个区块当然是由区块链的发明人中本聪亲自创建的,那是北京时间2009年1月4日,在芬兰赫尔辛基的一台小型服务器上,第一个区块诞生了,这也被称作“创世区块”(genesis block)。在这个区块上,包含的主要信息是:
区块高度:0
The Times 03/Jan/2009 Chancellor on brinkof second bailout for banks
(译文:《泰晤士报》2009年1月3日头版文章标题:财政大臣面临第二次为银行提供紧急救助的窘境)
“某账号”获得50比特币奖励
中间那段话是中本聪刻在第一个区块上的纪念,从第二个区块开始,以后每个区块就必须严格按照比特币系统的规则来创建了。区块的规则有(至少包含以下信息):
前一个区块的数字指纹
+
固定信息
+
收到的交易记录
+
一个随机数
区块链的一个奥妙之处在于尾巴上加的这个随机数(nonce),因为它实在太奥妙,让我等凡夫俗子只能大呼过瘾,所以后面我就把它称为“奥数”,以方便讲解。
中本聪规定:这个新区块的数字指纹(一个256位的二进制数)的前72位必须全部为0。
回忆一下我们前面介绍过的数字指纹的知识。因为SHA算出来的指纹是毫无规律可循的一组数字,所以,想要满足中本聪的这个变态规定,唯一的办法就只能凭运气凑奥数,从0开始不断地去尝试,直到满足要求为止。这是一个纯粹的概率问题。我们来算一下要满足这个要求的概率是多大。
因为二进制数,每一位只有两种可能性,0或者1,所以,凑出一个奥数的可能性是2的72次方分之一,也就是:
1/4722366482869645213696
这个数字已经长到看花眼了吧,它大约就是4.7万亿亿分之一。换句话说,就是平均要进行4.7万亿亿次SHA计算,才可能得到一个奥数,可见每一个奥数的金贵。
最巧妙的是,奥数并不是某一个方程的解,解出一个少一个,因为每一个区块的字符串都不同,所以,每一次寻找奥数都需要从0开始,任何一个数字都有可能成为新的奥数,完全没有规律可循。
一旦成功找到一个奥数,就获得了一次记账权力,可以给账本上新增加一个区块。那么,为什么要花时间找奥数,去给账本记账呢?因为好处实在太大了。
比特币系统规定,每成功增加一个区块,这台记账的电脑(实际上是某个账号)就能获得12.5个比特币的奖励(截止到本文写作时的奖金额),以及这个区块中所有交易的手续费,总额取决于交易频繁程度(平均约2比特币)。这样一来,相当于每找到一个奥数,可以获得14.5比特币奖励,按照本文写作时的比特币市场价,相当于12万美元。这么丰厚的奖励,自然就会吸引大量的电脑去抢夺记账权。
寻找奥数就是抢记账权,抢记账权也就是挖比特币。
因此,寻找奥数也被形象地称为“挖矿”。挖矿的电脑就叫“矿机”,一个装满矿机的房间当然就可以叫“矿场”了,矿场的主人就是“矿主”,他们是比特币江湖中的弄潮儿。
但是,我需要给你解释一下挖矿的难度,让你打消去挖矿的冲动。个人电脑的运算速度大约是每秒可以进行60万次SHA计算,也就意味着,一台个人电脑平均需要花一千万年才有可能凑出一个奥数。当然,这是一种概率计算,我不能从理论上排除某人的人品超新星爆发,只算一次奥数就中了4.7万亿亿分之一概率的奖。但我还是想劝你不要相信自己有那个命。
给你看看人家专业的矿场是怎样的:
一个大型比特币矿场。
大规模的矿场据说有几万甚至几十万台矿机同时运行。我在《看看新闻》2017年6月17日的一则新闻中看到,记者采访了一个位于中国四川的矿场,根据报道,这个矿场有5000多台矿机,属于小规模,平均每天耗电超过20万度,当地的电价是每度3毛,一天光是电费就6万多元,平均每天可以挖出大约50个比特币,一年左右回本,之后能做到20%左右的利润。
不过我觉得这个报道中的数据前后矛盾,便查了一下,当时比特币的市场价是大约每个2500美元,美元兑人民币的汇率大约是6.8,所以,每天的收入大约是85万人民币,一年的收入大约3.1亿元,一台矿机的成本均价在一万到两万元,矿场的矿机总成本是5000万到1亿元,即使算上电费等,一年起码有两亿的利润。
在充分的市场竞争下,出现这种暴利的可能性很低。所以,不是记者搞错了,就是被采访对象吹牛不打草稿。由于比特币的价格和全网算力的波动很大,所以投资比特币矿场很难做长期预测,不确定因素太多。
根据我们前面掌握的比特币知识,50个比特币,相当于找到了4个奥数,抢到了4次记账权。目前,整个比特币网络的所有矿机,加起来的总算力能达到的水平,大约平均每10分钟可以找到一个奥数,也就意味着平均每10分钟生成一个新的区块。当然,这个10分钟是平均数,快一点的话三四分钟生成一个区块,慢一点的话15分钟左右。
正因为奥数太难找,每个区块平均要10分钟才能生成一个,所以就能基本解决本节开头提出的第一个问题“如何同步账本”,只要有个三四分钟的时间,足以让所有在线的电脑同步到这个区块了,那些不在线的电脑或者第一次运行客户端的电脑,上线以后必须先做一件事情,就是从相邻的节点上获取最新的账本。
请注意,我用了“基本解决”这个词,也就意味着,并没有完全解决“账本同步”的问题。这是因为总会有极小的概率两台矿机恰好同时(只要在网络上所有在线的节点没有完成区块链同步之前都可以算同时)找到奥数,也就意味着同时抢到了记账权。因为矿机实在太多了,这样的小概率事件时不时也会发生一次,同时抢到记账权的矿机都能将自己生成的新区块广播到比特币网络中。
遇到这种情况,比特币系统怎么处理呢?
在这种情况下,相当于网络上的其他节点收到了两个合法的新区块,因为网络节点的地域分布不同,所以,不同的节点收到这两个新区块的先后次序就会不同。此时,所有的节点会暂时保留两个新区块,并且把区块链做一个临时的分叉,如下图所示:
接下来,比特币网络中必然又会有其中一个节点(矿机)抢到了记账权,这时该节点就会将生成的最新区块接到其中的一个分支上,那到底是接到新区块1,还是新区块2上呢?系统规则是:这个节点先收到哪个区块,就接到哪个区块上,同时放弃另一个区块,然后全网广播,如下图所示:
比特币网络上的所有节点在收到最新的区块链后,只要发现其中一个分支比另外一个分支多两个区块了,就立即也放弃那个短的分支。总之,比特币网络永远只承认更长的那条分支。
你可能会想,那如果小概率事件再次发生,在区块链第一次分叉后,又是同时产生了两个新区块,而恰好两个新区块产生在两个不同的分支上,这时候,其他节点收到的区块链还是两个一样长的分支,那怎么办?很好办,还是同样的规则,只要分支一样长就暂时保留,直到出现两个分支不一样长时,就放弃短于两个区块的,保留长的。那个被放弃的分支中所有交易和比特币奖励都会被判定为无效。
因为有了这个临时分叉的规则,所以,比特币玩家在完成一笔交易后,不能立即认为这笔交易是成功的,有可能会被取消,必须等到一定数量的新区块生成后,如果交易依然没有被取消,这才能放心地认为交易成功了。那到底要等到多少个新区块产生才能放心呢?
按照概率来说的话,小额交易有三个新区块产生就够了,但是大额交易的话,为了更保险,一般认为等到六个新区块产生,就足以放心了。前面说过,每个区块产生的平均时间是10分钟,也就意味着,一笔大额交易需要一个小时左右才能确认交易成功。
但是小额交易确认的时间往往会更长,甚至长达好几天。听到这个你可能会有点儿糊涂,刚才不是还说小额交易一般只要三个新区块产生就够了吗?怎么确认时间反而会更长呢?比特币网络刚刚诞生的头几年,确实不会出现这样的怪事,但是这几年随着交易量的猛增,就会出现这种怪事了。为什么?先回忆一下每个区块的规则:
前一个区块的数字指纹
+
固定信息
+
收到的交易记录
+
奥数
你的交易记录要被写到区块链上,有一个前提:矿工将你的这笔交易记录打包到这个区块上。你可能想问:为什么会不打包?难道系统规则还允许不打包吗?打包成功了不是还要给矿工交税吗?矿工好不容易抢到一次记账权,怎么会有钱不赚呢?
是的,允许不打包。原因不是矿工不想赚钱,而是“不可抗力”,关键问题是每一个区块允许存储的数据量有限。中本聪当初设计比特币系统时,规定了每一个区块最大只能是1MB,一条交易记录大概是0.25KB,那么一个区块最多可以储存4000多条交易记录,如果在一个新区块产生的时段中,发生的交易请求超过4000条,那就肯定存不下了。
我们可以算算,这个量大概是一个怎样的交易频率,每个区块的平均产生时间是10分钟,也就意味着,平均每秒钟的交易量如果超过7条,那么就一定会出现排队等待打包的交易记录了。这个交易频率实在很低,要知道支付宝一秒钟大约要处理上万笔交易。这一秒钟七笔交易对于全球来说,实在是太不够用了。
一般来说,大额交易优先打包,小额交易中手续费越高的交易越优先打包,打包规则矿工有一定的自主权。比特币交易手续费的规则比较复杂,不同的矿工收的还不一样,不是三言两语能说清,但有一点可能会让你感到诧异,越是大额的交易反而收费越低,甚至免费。交易额越小反而费率越高。这是因为,交易手续费除了鼓励矿工挖矿,还有一个非常重要的功能,就是防止有人恶意发布大量的小额交易造成信息拥堵。
现在,比特币交易滞留是非常普遍的现象,很多小额交易甚至等上好几天都确认不了,因此,很多人不惜附加很高的交易手续费来让矿工提前替他们打包。
到这里,有关区块链的核心原理就讲完了,关键要记住,中本聪利用区块链技术,巧妙地解决了账本同步和信息不重复的问题,这就使得去中心化账本的理想最终得以实现。
学习知识,我认为最佳的方式就是带着问题学习,在学习过程中,先掌握知识的主干,如果还有兴趣,再去了解那些枝枝杈杈。以上三节,第一节是让你带上问题,第二、三节就是比特币和区块链知识的主干,如果你消化完毕,可以继续阅读下一节,了解一些枝杈。
关于比特币的知识点
·如何保证比特币的产出速度大致恒定?
比特币的产出速度本质上就是寻找奥数的速度,现在的奥数是要求前72位全部为零,如果把72改为73,那么寻找奥数的难度就立即翻一倍,同理,如果从72减为71,则难度减半。因此,系统只需要根据全网的平均算力来调节奥数的规则就可以很简单地做到。现在的规则是平均每产生2016个新区块后,根据产生这些新区块的平均算力调节一次难度。我们也注意到,这种调节较为粗糙,只能翻倍或者减半。
·为何比特币总量上限是2100万枚?
这个总量上限是人为规定的。中本聪设计的规则是这样:每增加21万个区块后,币奖励就减半,奖励的初始值是50比特币,所以北京时间2009年1月4日中本聪自己创建的第一个创世区块,就奖励给了自己50比特币。按照平均10分钟一个区块的产出速度,大约是每隔四年会减半一次。
第一次减半发生在北京时间2012年11月29日7点24分,第21万个区块诞生,比特币奖励减少为25个。北京时间2016年7月10日凌晨0点46分,第42万个区块诞生,这次相隔时间大约是三年零七个月,比特币奖励再次减半,成为现在的12.5个。
知道了这个规则,我们就很容易根据当前的区块高度计算出已经挖出的比特币总量,截止到本文写作时,比特币的总量约1687万枚。按照这样的半衰期,大约到2140年,比特币的产量就趋于零,上限是2100万个,实际上不可能达到2100万。比特币允许交易的最小单位是0.00000001(10^(-8))比特币,这个最小值也被称为“一聪”,这是由脚本语言支持的最小数字精度决定的,因此,比特币的总量上限就是2100万亿聪。
中本聪为什么要人为规定一个总量上限呢?因为他的理想是创造一种不能滥发的货币,从而在理论上彻底阻断通货恶性膨胀。至于这种理想能不能因为规定了上限而实现,是一个经济学问题,我没有能力多谈,只知道在经济学中,通货膨胀和通货紧缩同样都是可怕的。
你可能马上又想到一个问题:如果不再奖励比特币了,谁还去挖矿呢?别忘了,还有交易手续费的奖励,比特币奖励虽然在不断减少,但是交易手续费的奖励是在不断增加的,还是会有人愿意挖矿。并且,挖矿的难度也是可以动态调整的,总是能调整到一个相对平衡的状态。
区块链技术的未来前景
比特币的未来前景不是笔者想要讨论的。我在前文中一再强调,比特币只不过是区块链“去中心化理念”的一个具体应用,有些先天不足,只能说是一个优秀的应用,还谈不上是成功的应用。最终能否成功,实在不好说。
从宏观上来看,目前主要还是投资品属性,承认货币属性的国家仅有澳大利亚和瑞典。
但区块链的未来无疑是光明的,这是下一场互联网理念的革新。区块链技术还可以应用到日常生活的哪些场景呢?我们不妨畅想一下,例如自动驾驶+区块链,可以成为滴滴公司的梦魇。
基于区块链技术,开发出一种“智能合约”,这也是区块链技术未来最大的应用前景之一。所谓智能合约就是不需要中间商,就能保证合约可以被自动完成,不怕违约。合约的支付方式是数字货币,合约生效的条件和执行全部智能化。
比如我买一辆车,这辆车从工厂自动开到我家,我用指纹或者刷脸开车,合约自动执行,数字货币支付给汽车厂,这才是真正的“没有中间商挣差价”。有了自动驾驶和智能合约,还需要滴滴打车吗?不需要了,汽车和客户完全可以通过基于区块链技术的软件自动匹配。
未来,区块链技术很可能在人类社会的各个领域扮演举足轻重的角色,以下是《环球科学》2018年2月号提到的应用场景:
金融机构:全球银行和投资机构正在研究、推动区块链项目。自从2012年成立以来,处理银行间国际交易的区块链系统瑞波(Ripple)一直发展良好。像Bloom这样的初创公司打算将区块链用于信用报告,希望杜绝类似艾可飞(Equifax,美国征信机构)那样因遭遇黑客入侵而导致数据泄露的事件。
政府:美国特拉华州和伊利诺斯州用分布式账本发放出生证明,而佛蒙特州的一项法律允许使用区块链技术验证法律文件的真实性。迪拜将区块链整合到多项行政服务中,如发放许可证。2016年,突尼斯开始通过区块链发行一种叫作eDinar的电子法定货币。
科技创业者:以太坊网络就像是一个为区块链初创公司设立的应用商店,它的目的是支持新的应用程序,不像比特币仅仅是一种电子现金生态系统。现在,有数百个项目和企业在这个网络上运行。其中有个著名的项目叫作WePower,它致力于让住户能够直接互相买卖可再生能源(比如屋顶式太阳能电池板产生的电能)。
版权所有者与知识产权所有者:英国音乐人伊莫珍·希普(Imogen Heap)创立了Mycelia科技孵化器,追踪与创意作品有关的元数据,省去了iTunes这样的中间商。
非营利组织和援助组织:点滴捐赠基金会(BitGive Foundation)正在用区块链技术加强慈善捐赠问责。联合国世界粮食计划署正在用区块链技术精简对约旦、叙利亚难民提供援助的追踪和交付过程。
学术机构:别想着纸质文凭了,区块证书(blockcert)项目希望提高各种学位证书和职业认证的可信度和共享性。
资产管理公司:总部位于伦敦的区块链公司常青账本(Everledger)瞄准钻石行业,用区块链记录每颗钻石的属性和出处。名酒和艺术品也可以被追踪。
新闻工作者:为打击假新闻,Civil(去中心化新闻市场)为新闻工作者提供了一个创造不含广告、不可更改的新闻平台,这些新闻不受外部利益(如俄罗斯、脸书)的影响,并且受到读者的支持。
普通人群:对于向家里寄钱的移民打工者,使用比特币汇款的费用比使用西联汇款要低。正是由于这个原因,现在韩国和菲律宾之间的国际汇款粗略估计有20%依赖于比特币。
根据普华永道预测,到2020年,77%的全球金融服务业将采用区块链作为生产系统或流程的一部分。
根据世界经济论坛2015年的一项调查报告,预计到2025年,世界GDP的10%将会以基于区块链的技术存储。
结语
1973年,原本隶属于美国军方的计算机网络阿帕网向世界开放,从此,国际互联网诞生,今天,它是人类社会的血管。
1991年,第一个网页在欧洲核子研究中心诞生,这是互联网生活的创世时刻,今天,已经很难找到不受它影响的人和单位。
2008年11月1日,中本聪发表论文《比特币:一种点对点的电子现金系统》(Bitcoin: A Peer-to-Peer Electronic Cash System),区块链技术(理念)宣告诞生。2008年会不会成为人类历史上与1973年和1991年同样重要的年份,现在还无法下定论,但可能性非常大。
没有人可以准确地预测未来,谨希望本文能为今天的战略家、企业家、学子们提供一点小小的参考和启发。
(本文特别感谢冯大辉先生的审校。)