——雪落牧羊人
一、共识
自从几万年前,在进化过程中人类祖先打败了比他们更加高大威猛、耐寒、耐旱、耐饥饿的尼安德特人开始,故事在整个人类社会发展过中起的巨大作用就从来没有停止过,所以让我们从一个故事,一个现代社会依然存在的现象开始。
在太平洋的中间有一个加罗林群岛,岛上居民鲜与外人接触,闲来无事的经济学家在岛上发现了一种现象,一种货币的使用现象。
岛上的货币是一种石头,但这种石头来源于外面的岛屿,获得起来很有难度(保证了稀缺性),石头很大,就放在那个岛上,也不做移动和携带,岛上的居民(在某种条件下)指着石头共同认定其中5%是A的,12%是B的等等以此类推,拥有的人不必将石头分开,也不必带走,只要大家共同认定就可以。
假如有一个人,家里非常富有,最后拥有了整块石头,而他家却在岛上的另一端,他想将整块石头从海上(海路运输成本低)运回自己的家,但不幸的是,船出了问题,石头沉没在海底,无法打捞,但是没有关系,全岛的货币没有因此减少,岛上的居民依然认定他拥有这块石头,并且可以用海里的石头进行交易(比如指着海里的石头,以其13%换一头牛)。所以货币的一个最基本的属性是大家都认同他的价值——共识。
因此可以这么说,从最开始,货币基本上就是虚拟的,贝壳、丝绸、重金属、现在的纸币,都是人们共识的结果,为了让这个共识达成,人们以一定的手段(立法,管理等)赋予了它“信用”“流通”“稀缺”等等属性(这些基本上都是经济学分析出来的,我一直不怎么相信经济学,结果上的原因是他们到现在都没有摘取自己皇冠上的明珠——大萧条的原因,过程中的原因是他们总能把一个问题解释成很多种不同的原因,这种情况下大概率这些解释都是错的,因为没有找到底层原因)。
如果我们把一个国家缩小一下,那它实际上就相当于一个小岛,人们认同哪种东西成为货币,他就成为了货币。这个世界上有国家这种大群体,也有一些小群体。
下面这个故事讲的是一个小群体——比特币群体。
刘慈欣在【三体】里面说过,”如果需要,人类集权只需要5秒”。另外一个人是谁我已经忘了(或许是我自己)也说过“身处概率之中还能对抗概率——这大概是人类最伟大的成就之一”。
自然界的底层规律之一就是多样性,既然有人渴望集权,就有人希望分权。
分权这种念头从古希腊就有,在古希腊人眼中,集权是野蛮的标志(说来讽刺,古希腊是个航海国家,而航海时最需要的就是集权;而赞成民主的人不允许不民主,并因此毒死了其中的代表苏格拉底)。这是西方文化的基石,分权的思想扎根于每个人脑中(一个一神教土地,天天想着分权,唉,玩的真是6)。
比特币群体更是把这种观念发挥到极致,他们甚至是无政府主义的支持者。所以即便他们明知美联储和各国央行起到的作用是积极的,但他们还是拒绝把发行货币的权力归于一个部门。因为理论上,任何国家都可能沦落到阿根廷和津巴布韦的局面,央行持续印钞,洗劫人民,经济膨胀,整个国家的经济崩溃。
所以这么一个群体,他们白天或许就是普普通通的上班族,网络安全专家等,但是晚上下班以后他们就化身成为网络幽灵一般的黑客。他们凭借缜密的思维构建了开放的互联网世界,于是就不希望这个世界里有监控,有审查,有墙。互联网在他们脑中,应该和他们的思想一样,是自由开放的。
由这套理想主义价值观创造的社区,就是开源社区——GitHup(不久前被微软买了);由这套价值观设计的货币,就是比特币,在2008年底,被一个化名中本聪的人设计提出。
它的设计初衷是希望在点对点的电子现金支付中,摆脱中央银行的管制(我们现在的支付都是通过中央方确认,如支付宝,微信,各家银行)比如说收款和支付都是匿名,交易不能更改、不能伪造,币的数量有限,不能出现通货膨胀等,所有这些功能都由程序自动保障。
既然没有某个机构维护,并且不能像加罗林群岛里的居民那样通过熟人的眼光来监督,币又不能伪造,那么此时就要感谢伟大的数学发展,它所带来的密码学技术,解决了这一需求。
二、技术
比特币中的密码学并不复杂,只有2种:一个是SHA256加密法,另一个是非对称钥匙(钥匙是现代密码学的基础,如果你感兴趣,我可以另写一篇专门讲述,不感兴趣可以略过,可以理解为它是一种确认唯一性的识别技术就可以了)系统。
先说SHA256,它的全称是“安全哈希算法”,Hash就是进行Hash函数运算的意思。Hash函数是这样,不论原始数据有多长、有多少位,经过Hash运算后,输出的值的长度都是固定的。
这有点像图书馆里给图书编号,不论什么样的书,它们的图书编号都是一个几厘米长的条形码。
但这个条形码要派上用场,需要几个先决条件:
1. 任何书不论篇幅长短,都能通过Hash函数计算出唯一一个条形码;
2. 条形码的长度是固定的;
3. 不可能通过条形码,反推出原书的内容。
Hash函数类型很多,比特币中用到的是SHA256,256就代表经过函数运算后的结果,是一个256位的2进制数字。你可以把它理解为条形码的长度。
怎么可能任何一个数都能写成一个固定长度的数呢?以十进制来说,假如固定长度是2的话,最多能表示0-99这100个数,遇到103不就没法表示了吗?
没关系。生活中就有这样的例子——模运算。
比如我们的手表,他的模是12,在模是12的运算中,没有13这个数字,但是13等于9+4,所以输出结果的长度如果固定是2位的时候,13就可以写成04(这个很厉害,不可逆运算存与否虽然仍有争议,但在当前计算能力下,仍可以大范围使用)。
而SHA256函数的运算结果,是一个模为2的256次方的值,所以这个值一定是可以写成256位的。
至于到底Hash运算是怎么算的,其实这不重要,你就把它理解成是按一些规则运算了一番就行了。只要记住,运算的结果是一个256位的2进制数就足够了。
之所以要把一个东西转换为一个256位的数字,其实最早是为了验证两个文件是否相等而想出的办法。
举个栗子:
张无忌想把《九阳神功》写成一个程序放在网上,供爱好者下载修炼。但担心有些心术不正的人,把这份文件的内容偷偷改几个字,故意让练功的人走火入魔。为了防范这个,他可以怎么做呢?他可以把原版《九阳神功》通过SHA256运算一下,生成一个值,我们称之为S1。
张无忌上传这份文档后,也把S1等于多少写上,并且注明“可能有坏人偷偷更改了秘籍,为了你们不走火入魔,你们下载后先做一次SHA256运算,看看运算结果和我给的S1是不是一样,如果完全一致,你们下载的《九阳神功》就是正版,就可以练了”。
SHA256在验证改动与否这方面,非常强大。文字只是标点上有些微小变化,内容是不变的,但它们对应的SH256值却差异非常大,一望便知,而且这种差异是毫无规律可循的。
这种函数用在比特币的好几处功能上都用到了。
第一处就是支付信息的部分。
比如张无忌把屠龙宝刀卖给了朱元璋,朱元璋得到后需要付钱,朱元璋就写了一张付款的纸条,上面写“朱元璋支付1000元给张无忌”,这就是支付信息。
但这条信息是有风险的,万一有人篡改了内容,在1000元后面加一个“万”字,那朱元璋就亏死了;或者把张无忌改成,那张无忌就哭了。
而刚刚的SHA256算法,就避免了信息被篡改的问题。“朱元璋支付1000元给张无忌”这条信息的SHA256值是确定的,在发出这条信息的同时给出SHA256值,之后任何的改动都会被发现。
但只保证了支付信息没有被改动过,还是不够的。因为如果有心怀不轨的坏人,写出很多条“朱元璋支付1亿元给张无忌”,然后录入支付系统,那朱元璋可就要哭死了。
所以,还需要加上数字签名。数字签名(非对称加密,和前面说的钥匙相关)
它们共同保证了支付信息的内容,不但没被篡改过,而且还是发信人认可的。
如果每个付钱的人和收款的人都用这种方式记账,把信息都记录在同一个账本上,而且这个账本还是可靠的话,欠债还钱的事儿就都说得清了,江湖恩怨也自然少了很多。
2009年,中本聪就以这个念头为基础,开发了比特币。
不过要形成一个可靠的账本,刚刚的过程还是太简单,还需要增加N种规则,才能让账本系统运作起来。
其中最重要的一条就是:朱元璋支付张无忌1000元钱,可是朱元璋包里真的还有这么多钱吗?
这个疑问在传统银行系统里不是问题,因为央行可以查看任何人的账户余额。但中本聪的目的是设计一个没有中央集权的交易系统,也就是大家聊起比特币最常说的“去中心化”的交易系统。
在比特币系统中,任何一个参与者和其他参与者有同样高的权限,不存在谁管理谁,谁限制谁。所以余额够不够这一步,只能通过单独的设计。
余额有多少,不能自己说了算,自己说自己还剩多少钱没人信。这一步的解决方法是——每笔交易都必须把以前的交易作为基础(所以叫链,一条串联的链)。
比如“朱元璋支付1000元给张无忌”,这笔交易可以进行的前提是,之前有人付给朱元璋过钱,而且那笔钱不但超过1000块,还没使用过。这样朱元璋支付1000块给张无忌,这笔交易才能达成。
假如之前徐达,已经给过朱元璋1000块钱了。那么朱元璋给张无忌付钱时,就会发送标准信息:
徐达支付1000元给朱元璋,朱元璋支付1000元给张无忌。
然后,外加朱元璋的数字签名和朱元璋的公钥(钥匙)。
张无忌医收到标准信息后,该用SHA256确认的确认,该用私钥解锁的解锁,通过一番运算,就可以确认这笔交易。
但实际情况不会这么巧,假如徐达给了朱元璋1003块。
在比特币网络中的支付,其实是朱元璋一次支付给张无忌1003块,之后张无忌再自动给朱元璋支付3块。
因为在比特币系统中,朱元璋没法把之前1003块钱那条信息拆成一个1000块、一个3块的。因为这个网络中每个支付信息都由SHA256的签名标记过的,不能再拆分了。
在比特币中,所有的转账记录每个电脑都有一份。但要做到这一点可不容易,要解决3个问题:
第一,所有电脑里的账本怎么同步?
因为有些电脑上可能保存的是最新版的账本,可是有的电脑根本就没有打开客户端软件,还有的电脑干脆就是关机的。所以不同电脑上的账本是不一样的,怎么让它们同步就是第一个问题。
第二,怎么防止交易记录被篡改?
第三,怎么防止一笔收入被重复使用?
比如说,朱元璋收到了徐达的1000块钱后,第一秒付给了张无忌买屠龙刀,第二秒马上又付给了陈友谅赎人质。网络中因为物理线路上的差异,有些电脑会先收到第一笔支付信息,有的电脑会先收到第二笔支付信息。所以有可能一部分认为第一笔支付是有效的,另一部分认为第二笔支付是有效的,这不就乱了吗?怎么解决它,就是第三个问题
。
解决这三个问题的方法就是一个——区块链(个人觉得这个可能比比特币还要重要)。
区块链之所以叫“链”,体现的就是区块与区块间串联的结构。注意是串联,它不是星型连接、环型连接,也不是并连,而是首尾衔接的串联,如同时间线一样的串联。
在区块链中,每一个区块里都包含着成百上千条交易记录。只要经过检查合格了,就写在之前最后一个区块的后面。
比如检查交易记录的签名对不对,比特币是不是重复使用了等。
这些检查工作由比特币矿工做。矿工检查合格后,就发送给其他矿工,其他矿工接到新区块也会先检查。如果检查合格,就把这个新区块添加在自己电脑里存储的那条链的最末尾。
不过同一时间有N多矿工都在做这件事,它们检查的那个新区块里的内容都是最近刚发生的交易。大概率说,一个新区块里的交易记录大多数是同时到的,但肯定还会略有区别,所以就会面临一个问题——它们会同时向网络提交N个不同版本的新区块。
比如说同一时间有100个不同版本的新区块出现,那选哪个为大家的标准呢?
比特币网络的解决办法是,限制单位时间里产生新区块的数量。
比如说,限制5分钟内只允许产生一个新区块,于是谁先检查完并上传了这个新区块,就以谁的为准。
当然,5分钟只是举例。实际中,这个硬性的时间间隔,是通过让矿工完成两道数学题来保证的(数学真的很重要)。
这两道数学题,一个简单,一个复杂。而这里还是包含着密码学的知识,而且第一道简单题是区块链之所以能称为“链”的关键。
第一道题目是这样计算的:
计算出一个字符串,这串字符由3部分组成。第一部分是这个新区块内包含的成百上千的交易记录,第二部分是这个新区块的基本信息,最后一个部分是前一个区块的SHA256函数值。
三部分综合在一起,就是第一道题的结果,它是一串字符。
这是区块链之所以称为链的重要步骤。
因为当前区块要求包含上一个区块的SHA256函数值,于是区块与区块间就串连了起了。任何一个区块都包含了它之前所有的历史,所以把它称为“链”。这种简单计算,对于当今任何计算机来说,瞬间就可以完成。
而第二道难题就非常难了,一般需要整个比特币网络全部计算机加起来,运算大约十几分钟才能算完。
这道题之所以这样难,主要作用就是让提交新区块的人在时间间隔上可以拉开足够长的时间。以免发生前面说的新区块同时出现的问题,引起麻烦。
第二道题的题目是第一题的结果加一个随机数,组成一个新的字符串。这个新字符串用SHA256运算一下,会得到另一个256位的二进制数。
而且要求这个256位的数字,前72位全部都是0,才算答案正确。
给你的是个随机数,算完后前72位都是0,那就得看你的运气了。
具体需要有多好的运气,我们可以算一下:
第一位是0的概率是1/2,第二位还是0的概率是1/4,这样延续下去,到了第72位仍然还是0的概率是1/2^72(基本上是0),也就是说要进行2^72次SHA256运算,整个比特币网络里,才有一次做对题目的机会。具体是谁做对的,说不好。谁的算力越强,谁的运气就会越好。
一旦有人做对了,就会全网广播,其他旷工收到这条信息后就会验证(验证所用时间比较短)再经过软件检查,新区块就会被放在当前区块链的末尾。整个比特币网络承认了这个新区块(当然这个过程消耗大量的人力和物力,所以肯定有奖励,奖励就是一定数量的比特币,这就是所谓的——挖矿)。
比特币因为精心的设置,整条链一直运行了十几年。
举个:
如果计算机性能提升很多,没人用CPU计算难题2了,而用速度是CPU几千万倍的专用集成电路做运算,几毫秒就能算出来了,怎么办。
没关系。中本聪规定了,从某某序号的区块后,那个幸运的随机数的要求就变高了,不是前72位是零了,而要求前73位或者前74位是零,难度是从前2倍或者4倍了。而且这个难度是随着算力增加而增加的,这就保证新区块的生成时间总会有合理的间隔。
除此之外,就算网络里非常不幸,出现了短短几秒钟诞生2个新区块A和B的情况,还可以通过下个新区块是从A先长出来还是B先长出来来解决。
因为比特币网络还有个规则——整个比特币网络,只认可长度最长的那条链。
这个规则可以防止有人伪造比特币。比如当前进行到B800这个区块了,下一个应该是B801,但有人手工制作出来了另一个区块,跟B801不一样,咱们把它叫作F801。
这里的交易内容都是给他自己付钱,让他自己成为富翁的,所以这是伪造的。但是,这样的伪造极难得逞。
因为F801后面的以F开头的侧链F802区块还是得他一个人做,F103也是。可另一条以B开头的主链上B801、B802、B803是全网所有人在做。全网速度远远快于一个人的算力,所以这个人做出的区块链,长度总会比全网主链要短。
而刚刚那条规则是,大家只认可最长的那条链,所以这个人即便伪造了交易记录,做出的那条侧链始终得不到认可,所以他没法伪造比特币。
只有一种情况下他会得逞,就是他一个人的算力超过所有其他人的总和(一个人的算力其实也在属于全网络的算力,这就是比特币中说的51%算力攻击),那时他制作新区块的速度就快过所有人,他做的这条链就会更长,全网就认可他这条链了。但这么做太贵了,可能要几十上百亿美元,所以可能性极低。也因此,区块链极难伪造。
三、其他
稀缺性:比特币规定只有2100万枚,挖完后永不增发。
流通性:比特币可以在任意一台接入互联网的电脑上管理。不管身处何方,任何人都可以挖掘、购买、出售或收取比特币。
专属所有权:操控比特币需要私钥,它可以被隔离保存在任何存储介质。除了用户自己之外无人可以获取。
低交易费用:可以免费汇出比特币,但最终对每笔交易将收取一定的交易费以确保交易更快执行(否则矿工吃啥)。
无隐藏成本:作为由A到B的支付手段,比特币没有繁琐的额度与手续限制。知道对方比特币地址就可以进行支付。
其实,比特币能不能取代取代央行,并不知道,但肯定很难,因为央行的存在早就是所有人的共识,而改变人群的共识是最难的。
但区块链,还可以改变其他一些东西的(不一一叙述了)。
至于比特币到底有没有价值和应用场景,那就不是一个容易回答的问题了,因为初期的使用大多在非法领域(洗钱,资金转移,黄赌毒等)所以各国对其政策不一,日本对其最为拥抱,但如今这个群体似乎是在扩大,加上它自己的属性——所以还是留给喜欢的人判断吧。