第1章第一代区块链与比特币
2008年11月1日,中本聪在论文“Bitcoin:A Peer-To-Peer Electronic Cash System”中首次提出比特币的概念⑴,区块链是比特币的技术层面实现。比特币是一种数字货币,与其他传统货币不同,比特币是一种对等网络(peer to peer,P2P)的数字货币。P2P*早可以追溯到2003年左右的比特流(BitTorrent,BT)下载,当时很多使用BT下载的用户并不了解P2P技术的细节,但在使用BT下载的过程中,发现这是一种与之前截然不同的下载方式。之前用户都是在指定的网站通过指定的网址下载,下载速度取决于用户与指定网站之间的连接速度和带宽。而BT下载则是用户仅下载一个很小的种子文件(几千字节,甚至几百字节),该种子文件将完整的下载内容分成多个“小块”,拥有相同种子文件的众多用户之间互相传输内容,即:将自己拥有的“小块”传输给其他用户,同时又从其他用户那里下载自己没有的“小块”。这样的下载方式使得各个用户之间是对等的,并没有一个固定的网站来提供所谓的“中心化”下载,并且参与BT下载的用户越多,用户下载的速度越快,甚至可以逼近用户带宽的理论下载上限。这种BT下载就是P2P技术的一种典型应用,在P2P中,所有节点都是对等的,并没有一个“中心”来协调和控制各个节点,因此它是一种去中心化的系统。
比特币是一种点对点形式的数字货币,因此,就是一个去中心化的交易系统,去中心化意味着比特币不依靠中心机构发行,比特币通过大量的计算(俗称挖矿)产生并发行,分布在P2P中的各个节点通过共识算法来确认和记录比特币的交易,并且通过加密算法来保证比特币在流通过程中的安全性。比特币所运用的加密算法及其本身的去中心化特性可以避免人为产生过多比特币进而操纵币值。比特币基于加密算法设计出的公私钥对使非持币者无法盗用比特币,也同时保证了比特币持有者在比特币交易过程中的匿名性。传统货币都是无限的,由中心机构根据市场情况发行,但是比特币在其诞生之初就规定了其数量是有限的,具有极强的稀缺性[2]。
比特币的主要特征如下。
(1)去中心化。比特币网络由分布在全世界的各个节点组成,这些节点是平等的,没有凌驾于其他节点的中心节点,这种去中心化网络的设计保证了比特币的安全和自由。
(2)全世界流通。比特币网络中的节点可以处在全世界的任意一个地方,只要电脑连上网络,就可以随时随地进行比特币交易。
(3)专属所有权。每个比特币持有者都有专属于自己账户的私钥,私钥不为其他人所知道,拥有私钥就可以进行比特币交易,需要妥善保存。
(4)低交易费用。比特币的交易可以是免费的,但是我们*好在进行交易时给矿工一些额外的交易费(比如1比特分),使交易更快得到确认。
(5)无隐藏成本。比特币在进行转账时只需要对方的账户地址即可,无须复杂操作和额度限制。
(6)跨平台挖掘。比特币需要通过挖矿来发行,矿工可以在众多计算平台上进行挖掘。
1.1为什么要有区块链?
为了对区块链有一个完整的、准确的认知,我们要解决的第一个根本性的问题就是:为什么需要区块链?这个问题需要从区块链本身的性质上去寻找答案。说到底,区块链并不是实物,而是一种新的记载、传输信息的工具。那么我们需要搞清楚以下三个问题。
(1)人类为什么需要传输、存储信息?
(2)在区块链产生之前,人类的信息记载、传输技术是什么样子的?经历过哪些转变?
(3)区块链对人类传输、存储信息的需求有哪些贡献?与以往的技术相比,又具有哪些缺陷?
1.1.1人类需要传输、存储信息的原因
首先,对于地球上多种多样的动物,它们之间是存在信息传递的,例如,海豚通过脉冲波进行交流,蜜蜂通过空中舞蹈进行沟通,蚂蚁使用触角间的信息素化学物质来传递信息。但是它们之间信息交流的深度,远远不及人类。人类的语言不仅发展出了众多的词汇和各种精妙的表达法,更拥有汗牛充栋的书籍和影音记录[3]。
此外,人类的语言不仅可以描述具体的事物,还可以表达抽象的概念,甚至仅凭作家的构思就可以描绘出宏大的、精致的、却又不存在的虚拟世界。
现在我们可以回答“人类为什么需要传输、存储信息”这个问题了,因为随着人类生产力的发展、技术的进步,人与人之间需要大规模的紧密合作,这种合作需要人与人之间可以通畅地传递消息产生信任,同时也对信息的存储提出了要求,从而使得人类的知识可以代际传播。可以说,传输和存储信息,就是人类的生存本能。
1.1.2人类传输、存储信息技术的发展
人*初并不记载信息,只是通过某些简单的发音来表达自己的意愿以及彼此间进行合作。随着时间的推移,越来越多的场景需要更复杂的表达,比如合作狩猎、修建房屋等,也就逐渐产生了更复杂的语音交流。而随着生产力的发展,部落内逐渐有了猎物或水果的盈余,需要记录,结绳、画线等记录方式应运而生,进而发展出了绘画、符号,乃至文字。综上所述,人类的这些传递信息、表达信息、存储信息的方法,都是在长期的生产、生活实践中总结而来的,来自于民间不断的创造、交流、积累和试错,并不是来自于某一个人或神的强行安排、推广。
随着技术的进步,将信息刻在土地上、贝壳上、石壁上都显得过于呆板,随之而产生了更方便书写、保存的介质,例如竹简、丝绸、纸张等,这些发明对信息的表达、传递、存储都起到了积极的推动作用,但同时也造成了信息的“中心化”因为这些媒介在古代都是相对昂贵的,穷人无法承担。例如,南宋名将岳飞,年幼时家贫,无钱买纸笔,只能以树枝为笔,沙地为纸,学习文化。
1.1.3区块链对人类传输、存储信息技术的影响
互联网诞生于20世纪90年代,*初互联网是一个去中心化的世界,没有权威,没有巨头,各个用户自由表达和发挥,虽然也存在野蛮生长的成分,但总体还是积极向上的。然而万事万物都逃不脱“分久必合”的趋势,随着多年的发展,权威出现了,巨头也出现了,互联网资源和信息逐渐被少数几个巨型公司所掌握。例如,世界上大部分的IPV4网络地址由美国所掌握,世界上大部分的根路由和域名解析由美国所掌握,越来越多的视频、图像资源由Instagram、Facebook所控制,自媒体资源由Twitter所控制,等等。
区块链技术和比特币给互联网的去中心化带来了一丝曙光,它的贡献在于,为互联网上的信息传递和存储提供了一个去中心化的、可靠的、不可篡改的、透明的解决方案,可以说它真正做到了信息传递和存储的公开、公正。但这一切都是有代价的,这种技术也不是完美的。首先,区块链的成本要高于中心化的网络,例如,一笔比特币的交易,可能会在全世界的数万台电脑上同时进行记录,而中心化的交易,只需要在银行的账目上记录一次即可。乍一看,区块链网络造成了数据的冗余,张三转给李四一个比特币,有必要让全世界都知道吗?仔细考虑一下,我们到底想从区块链技术得到什么,便捷?速度?省钱?安全?是的,就是安全。区块链技术旨在提供安全的、可靠的去中心化解决方案,为了安全,适当牺牲了其他指标。总之,区块链技术提供了安全的分布式互联网信息传输和存储方法,为互联网“草根”对抗互联网巨头,提供了技术支持和可能性。
1.2区块链与比特币
区块链的本质是一种去中心化的记账系统,而比特币正是这个系统上承载的“以数字形式存在”的货币。我们可以认为区块链与比特币之间的关系就是记账货币与货币之间的关系,也可以说比特币只是记账的表征,而区块链就是由其背后的一套信用记录以及信用记录的清算构成的体系。
比特币是一种数字货币,而区块链就是承载比特币的去中心化记账系统。所以我们可以认为区块链实际上就是记载着以比特币为货币的各种交易的网络账本。区块链,顾名思义,它是由一个个区块首尾相连组成的一条逻辑上的链子,一个区块可以看作账本的一页,记载着大概几百个比特币的交易。区块链可以看作是一套每个节点都可以参与背书的信用体系。
从技术层面上看,实现比特币的底层技术就是区块链,区块链是一系列技术(P2P、共识算法、加密技术等)的集成,区块链创造了比特币,比特币也让区块链这项新兴技术为大众所知。
1.2.1哈希函数
在介绍比特币之前,首先需要了解哈希(hash)函数,这是整个比特币系统的底层核心机制。
哈希函数又称散列函数,假设将Z(Z可以是字符串、文本、图像、音频、视频等)作为输入,哈希函数返回一个对应的输出H{X)。其中X可以是任意长度的字符串,而H(X)的长度则是固定的;同时保证不同的输入X,可以得到不同的输出H(X),即免碰撞性,尽管这在理论上是有瑕疵的,例如目前比特币系统使用的是256位哈希函数,这意味着如果我们进行2256+1次不同输入X的哈希函数运算,就必然可以得到至少两个相同的H(X),理论证明只要有2m次输入,就有99%的可能性得到相同的H(X),但213G是如此的巨大,以至于目前人类*快的计算机即使从宇宙诞生之日开始计算到现在,其碰撞的可能性也微乎其微,这就在实际操作中保证了哈希函数的免碰撞性;并且哈希函数是一个单向的函数,即在知道X的情况下,我们可以通过哈希函数快速地计算得到H(X),但是在知道H(X)的情况下,我们无法逆向求解X,即隐匿性。
1.2.2什么是比特币?
比特币是一种数字货币,但是从本质上来说,比特币是通过哈希算法得到的满足系统规定条件下的特解。满足这种条件下的解是无穷的,我们只需要得到无穷多个的特解中的一组。而每一个特解都能解开方程并且是唯一的[4]。
获取比特币的过程就是找寻特解的过程,这个类似于解方程组的过程就是挖矿。在比特币设计之初,规定了前2100万个解是有限的,后续的解将不再产生比特币,所以比特币的数量是2100万。
关于比特币和挖矿的本质已经说得差不多了。但是还有一些问题没有解决。比如,我们一直说比特币就是特解,也就是一串数字,那么这串数字为什么可以称作数字货币呢?又如何证明你拥有着某个比特币呢?
比特币本身作为一个字符串,需要依托于比特币网络(即区块链)才能正常运作,实现货币的功能。这就好比是声音的传播需要媒介,离开了媒介,任何声音也无法传播,没有比特币网络,比特币也无法运转。
比特币的底层技术区块链就是一种分布式存储数据库,记录了在比特币网络中发生的每笔交易。这个数据库并不只是存在于某一个或者某几个中心的服务器里,而是面向所有的节点公开,一个比特币钱包就是一个节点,这些节点通过P2P相连,每个节点都可以通过P2P更新自己本地的区块数据。但是由于比特币的发展,区块一直变多,导致节点需要存储的数据量过大,并不是所有人都愿意去保存这样庞大的数据,所以在发展过程中出现了轻量级钱包,只保存了比特币区块链的头部数据,因此大部分节点都选择了轻量钱包。
为什么要把比特币网络设计成分布式存储数据库呢?
比特币是一串数字,如何保证这串数字的唯一性,即在某个时刻只属于某一个人?
比特币系统是这样设计的,我们以一次交易为例。特解12345的拥有者节点X,现在想和节点Y发生一笔交易,即将特解12345转给节点Y。于是,节点X发起了交易,向整个比特币网络发出广播,内容是:“我是节点X,有特解12345,我现在把这个特解转给了节点Y,你们看到了吗?”这时处在比特币网络中的其他节点收到了广播信息就会做出应对,它们会将收到的信息与自己本地保存的数据库进行比对。其他节点需要确认几个信息,包括X的确是X、12345的确是方程的特解、节点Y确实存在等等。如果确认无误的话,每个节点都会承认这笔交易。当确认这笔交易的节点将它打包成区块,并连上比特币网络中的前一个区块时,这笔交易就发生了。
当有着越来越多的区块顺着这个区块连接下去,这个交易记录就已经不可篡改了(一般来说是有6个区块就可以保证不可篡改性)。至此,
展开