作者注:这首诗是所写非计算机系统专精的朋友的科学普及文,尽可能躲避了比较专精的技术细节。如果你是韦尔蒙专精,或是具有一定计算机系统程序、演算法、信息论的科学知识,建议直接看variations参考文献中的两篇昌明,或是更专精的资料。
计算机系统程序链:去虚拟化的分布式系统资料库
大家都知道,“比特币”是一类位数货币。而“计算机系统程序链”是比特币的记帐系统。能把计算机系统程序链想像成一个账单,下面历史记录了全球大部份的比特币买卖重要信息。所以,计算机系统程序链跟现代的商业银行记帐有甚么差别呢?
这就涉及到计算机系统程序链的其本质了:计算机系统程序链是一类去虚拟化的分布式系统资料库。就要逐一解释这三个关键字。
资料库:
所谓“资料库”,是计算机系统上的几组表单,它能放置大量的有结构的重要信息(能等效Excel,但相比而言Excel复杂)。比如说他们去商业活期存款、提款、提款,那些买卖重要信息都是要上传至商业银行的资料库的。
分布式系统:
那个资料库能放置在商业银行的两台DT笔记本电脑上,也能放在几台笔记本电脑上。比如说建行可能在华东、华中、华中、华东等沿海地区各有两台伺服器,每个沿海地区的买卖重要信息发送至本沿海地区的伺服器上,各伺服器之间通过商业银行的外部数据传输。这就叫“分布式系统资料库”。
去虚拟化:
现代的伺服器,不管是不是分布式系统的,都是有“图书馆员”的。换句话说,有一个商业银行外部的“DT使用者”能查阅大部份的买卖重要信息,并且能随便加进、修正那些重要信息。这就叫“虚拟化”。
而计算机系统程序链则是“去虚拟化”的。换句话说,计算机系统程序链那个资料库中不存在图书馆员,其他人都是公平的,都无权查阅、加进重要信息。去虚拟化是计算机系统程序链的与此相反。
难道其他人都无权往计算机系统程序链上加进重要信息,所以那个“账单”何况不会支离破碎吗?要弄清楚这两点,他们需要了解甚么是“计算机系统程序”,甚么是“链”。
何为“计算机系统程序”何为“链”?“计算机系统程序”是计算机系统程序链的基本组成。计算机系统程序是一个数据块。等效账单的话,计算机系统程序就相当于账单上的一页,这一页上历史记录了多条买卖重要信息。而把那些分散在整个互联网上的“页”串成一条链,就能形成一个完整的“账单”。所以,“计算机系统程序”是怎么串成“计算机系统程序链”的呢?
计算机系统程序链账单的记帐基本原理
哈希值与防篡改:
除了比特币买卖重要信息之外,计算机系统程序上还包含了那个计算机系统程序本身的一些特征重要信息。能等效一页上的“页码”,只不过那个“页码”比较复杂。“页码”中最重要的,是“哈希值”,它是理解计算机系统程序链可靠性的关键。
所谓“哈希值”,能理解为数据的一个“指纹”。他们签合同有时会摁手印,以后只要把自己的指纹和合同上的指纹对比一下,就能证明合同是自己签的。类似地,他们在网上下载一个软件,有些网站会给出安装包的哈希值(可能称为CRC或SHA)。他们下载完安装包后,只需用专门的工具计算一下那个SHA值,再跟官网上给的SHA值对比一下,就能知道自己下载的和网站提供的是否100%一致,下载过程有没有被人做了手脚。
不同的数据,算出来的哈希值一般来说是不同的。如果已知数据A的哈希值是H,想伪造另一个数据B,使它的哈希值也是H,这是极其困难的。换句话说,哈希值具有不可伪造性,起到了“指纹”的作用。
一个计算机系统程序中,包含了两种哈希值:“上一个计算机系统程序的哈希值”和“本计算机系统程序的哈希值”。因为每个计算机系统程序都包含了上一个计算机系统程序的哈希值,大部份的计算机系统程序就依次连成一条(逻辑上的)链。“上一个计算机系统程序的哈希值”就起到了“页码”的作用——给页排序。
计算机系统程序所包含的内容
计算机系统程序连接成计算机系统程序链
如果一个计算机系统程序上的买卖重要信息被人恶意篡改的话,“本计算机系统程序的哈希值”就会改变。由于计算机系统程序链中下一个计算机系统程序包含了“上一个计算机系统程序的哈希值”,为了让下一个计算机系统程序依然能连到本计算机系统程序,需要修正下一个计算机系统程序。而这又导致下下个、下下下个……计算机系统程序也必须修正。
篡改了一个计算机系统程序,就要修正后面大部份计算机系统程序
由于计算机系统程序链本身的一些机制(那个机制比较技术细节,他们这里不讨论),计算一个计算机系统程序的哈希值是极其困难的,修正多个计算机系统程序的哈希值则是难上加难。这样,篡改计算机系统程序链中的买卖重要信息就成为几乎不可能的事情。这就保证了计算机系统程序链的可靠性。
采矿:向计算机系统程序链写入重要信息的方式
采矿:向计算机系统程序链写入重要信息的方式“采矿”,是计算出一个潜在计算机系统程序的哈希值,使那个计算机系统程序正式加入整个计算机系统程序链的过程。一个计算机系统程序加入计算机系统程序链后,其中包含的买卖重要信息才能成为事实。由于比特币设计者的一些考虑,采矿的过程需要消耗大量时间和资源。前面已经提到,计算计算机系统程序的哈希值是极其困难的。具体有多困难呢?如果比特币网络中的计算机系统都参与哈希值的计算,平均每十分钟才能算出一个哈希值。
从事采矿活动的人,称为“矿工”。互联网上的任何人都能加入比特币网络,成为矿工。难道采矿需要消耗大量时间和资源,为甚么矿工会自愿加入呢?这是因为比特币协议规定,挖到新计算机系统程序的矿工会得到比特币奖励。这是矿工采矿的动力;也因为矿工持续得挖矿,比特币买卖重要信息才能被确认,比特币买卖才能正常进行。同时,这也是比特币总量唯一的增加方式。比特币不像现代货币,它的总量不能通过国家或机构人为印发的方式增加,只能通过挖矿奖励的方式“自然地”增加。
如何避免主链分叉?
难道挖矿会有比特币奖励,比特币的交易方也会给矿工一些手续费作为报酬,矿工之间难免会产生大量竞争。如果两个矿工同时挖到了某个计算机系统程序的下一个计算机系统程序,所以谁挖到的那个计算机系统程序有资格加入计算机系统程序链呢?如果都能加入计算机系统程序链,计算机系统程序链产生了分叉,这样如何保证区块链的“唯一性”呢?
计算机系统程序链协议规定,如果一个分叉上的新增计算机系统程序达到了六个,所以它就成为计算机系统程序链的“正统”;而同一时刻其他没有达到六个计算机系统程序的分叉,就会被不幸淘汰,那些计算机系统程序上的买卖重要信息也不会被认可。这就避免了计算机系统程序链的分叉。由于一个计算机系统程序在被挖出来后,后面必须跟上六个新计算机系统程序,而平均每十分钟才能挖到一个新计算机系统程序,这样,一笔买卖至少需要一个小时才能被确认(被写进计算机系统程序链)。
矿工B:我有一句喵喵喵不知当不当讲
综合上文,所以比特币买卖的过程是怎样的呢?
买卖无非是一条重要信息:“买方-1$,卖方+1$。”(这里涉及到一些非对称密码的科学知识,由于不是比特币所独有,不作讨论。)当你发起一笔比特币买卖后,那个买卖重要信息就会从你的设备上,逐渐发送至整个比特币网络。
为了挖矿奖励,许多矿工都会收集你的买卖重要信息,并拼命挖新的计算机系统程序。如果一个矿工挖出了一个新的计算机系统程序,他就会把你的买卖重要信息写入计算机系统程序。在这之后,他还需要再挖出六个新的计算机系统程序,以保证整个计算机系统程序链采用了那个计算机系统程序。这时你的买卖重要信息才能正式写入计算机系统程序链,得到确认。而那些没有挖到六个计算机系统程序的矿工的成果则会被淘汰。
这样,虽然是多个矿工在竞争着写入你的买卖重要信息,最后只能有一个矿工成功地写入。这就保证了同一次买卖中,你的钱不会被扣掉两次。
一旦一个新的计算机系统程序正式加入了计算机系统程序链,那个计算机系统程序就会被同步到大部份矿工的机器上,新的计算机系统程序只能跟在那个计算机系统程序后面。而挖到那个计算机系统程序的矿工会获得一些比特币作为奖励,这也是新比特币发行的过程。
小结一下以上的要点:
计算机系统程序链是比特币买卖的可靠的、唯一的账单。
计算机系统程序链是一个无中心的分布式系统资料库。它没有图书馆员,网络中的大部份使用者都能公平地向计算机系统程序链中写入新的计算机系统程序。
计算机系统程序根据“上个计算机系统程序的哈希值”而连接成一条链。
计算哈希值的困难性,使得计算机系统程序和计算机系统程序链无法被篡改,保证了计算机系统程序和计算机系统程序链的可靠性。
一个计算机系统程序后面新增六个计算机系统程序才能使它正式加入计算机系统程序链,这使得计算机系统程序链不会产生分叉,保证了计算机系统程序链的唯一性。
但同时,这也导致比特币买卖至少需要一个小时来确认,不具有即时性。
挖矿奖励是比特币唯一的发行机制,也是矿工挖矿的动力。
参考文献:
《计算机系统程序链入门教程》,作者:阮一峰(下同)
《比特币入门教程》
《加密货币的其本质》
想看到更多这类内容?去APP商店搜IT之家,天天都有小欢喜。