比特币是数字货币的先驱,目前市面上各种数字货币的工作原理与比特币是类似的,所以本文希望通过通俗易懂的例子,解释比特币的工作原理。
解释数字货币的文章、视频、讲座多如牛毛,不仅大多写得不好,还动不动就要收费。我这篇文章不仅是免费的,而且只需高中文化就能看懂,在国内已经接近绝种了。
小明、小红和小刚各自有100比特币。如果小明向小红支付50比特币买雪糕,那么交易记录看上去就是这样的:
小明有100比特币。
小红有100比特币。
小刚有100比特币。
小明转账给小红50比特币。
事后,小红发现小明有吃雪糕的癖好,决定从小刚那边进货5支雪糕,每支进货价40比特币,共200比特币。小红向小刚支付200比特币之后,交易记录看上去就是这样的:
小明有100比特币。
小红有100比特币。
小刚有100比特币。
小明转账给小红50比特币。
小红转账给小刚200比特币。
小刚拿到这份交易记录,经过逐笔核算,发现了一个问题:小红收了小明的50元雪糕钱之后,账上总共只有150比特币,是不能向我支付200比特币的。因此不承认小红创建的这笔交易记录,不给小红发货。
于是小红只好把进货数量降低到了3支,共120比特币。交易记录现在看上去是这样的:
小明有100比特币。
小红有100比特币。
小刚有100比特币。
小明转账给小红50比特币。
小红转账给小刚120比特币。
小刚拿到交易记录,经过逐笔核算,没有发现问题,便承认了这笔交易,给小红发了货。
上面介绍的,就是数字货币最基本的工作方式:大家把金钱的往来做成交易记录,根据交易记录就可以算出每个人账户上的余额,通过这个余额来判断下一笔交易是否合理。如果合理就承认(并添加到交易记录中),不合理就拒绝。
延伸阅读:比特币的交易记录,是通过比特币网络实现互相传递的。比特币网络是由全世界比特币用户的计算机,通过国际互联网相互连接形成的,不管是谁,只要安装了比特币软件就可以加入比特币网络。由于没有任何人、组织能够买下世界上所有的计算机,所以比特币网络不从属于任何人或组织,而是由全体比特币用户拥有。如果要阻止比特币交易,就要阻断全世界的互联网通信。
当然,仅靠上面这样简单的设计会导致很多问题,接下来会一一介绍这些问题,以及比特币的应对方法。
显然,小红可以通过伪造、篡改交易记录给自己增加不存在的财富,比如像下面这样:
小明有400比特币。 (篡改)
小红有100比特币。
小刚有100比特币。
小明转账给小红300比特币。 (篡改)
小红转账给小刚350比特币。 (伪造)
面对小红这样的捣乱分子,比特币的解决方法很简单:把每一条交易记录都复制无数份,分别保存在每一台运行比特币程序的计算机上;这样小红如果偷偷篡改以往的交易记录,小刚只要跟其他比特币用户对比一下各自的交易记录,就拆穿了小红的诡计。
这也就是为什么每个比特币用户的计算机,在加入比特币网络的时候,都要先进行“同步”操作,从其他比特币用户那里下载比特币的全部历史交易记录。由于全世界都拥有这份一模一样的交易记录,你账户里的比特币,在全世界任何能够连接互联网的地方,都能够被验证,都可以用来换取商品和服务。这和由政府发行的货币(“法币”,法定货币)是不一样的,比如由越南政府发行的越南盾,在中国就没有办法用来购买商品,因为越南政府可以随便印刷越南盾,而普通中国人没有办法验证这些越南盾的真假和价值。
你也许会问,每天用比特币交易的人那么多,会产生海量的交易记录,把这些记录全都存在我的电脑上,那我的硬盘岂不是很快就爆炸了?确实如此,所以时至今日,直接把自己的电脑接入比特币网络的用户只占全部比特币用户中的很小一部分,剩下的用户则是通过各种网络“交易所”,进行代理交易。由于代理交易的安全性由交易所本身而不是比特币网络保障,所以经常发生交易所卷款跑路、交易所被盗等事件,对用户造成损失。如果用户直接接入比特币网络,就可以相当程度上避免这些问题,但要付出较高的硬件成本。
小红的伪造计划失败了,但她并没有放弃,她的名字是党旗的颜色。很快,小红又想出一个给自己增加财富的方法。
小红经过明察暗访,汇总了一个“全世界比特币用户黄页”的名单,名单上有100万自然人。然后小红从中国移动那里购买了伪造来电号码的服务,假装自己是比特币的发明人Satoshi, 给其中的50万人打电话。小红给他们每人1比特币的贿赂,要求他们帮小红承认一笔篡改的交易记录。由于天下的乌鸦一般黑,这50万人都收下了小红的贿赂,同意帮小红承认一笔记录。
经过篡改的交易记录如下:
小明有100比特币。
小红有100,000,000,000比特币。
……
经过篡改的记录获得了全球过半数比特币用户的承认,变成了“真相”。
经此一役,小红共支付贿赂款50万比特币,获得收入1000亿比特币,净赚999.995亿比特币,荣登中国富豪榜榜首。
为了应对这种团伙诈骗,比特币对交易记录提出了一个要求:每一笔交易记录的最后,要提供一道数学题的答案。这道数学题是这样的:
已知某个函数f,以及本条交易记录s,和上一道题的答案b,难度值d,且:
f(s, b, a) < d
求a的(任意一个合适的)值,作为这一道题的答案。
比特币故意选择了一个特别的函数f,使得:
函数f的细节略去不表,有兴趣可以看维基百科。
如果求一道题的答案,在一台电脑上要花一个小时,这就意味着,不管谁提交一条交易记录,都要先花一个小时的时间算题,然后才能成功提交。
而每一道数学题的答案,都和上一道题的答案是相关的,要得到这一道题的答案,必须先得出上一道题的答案。
因此,如果谁想要修改一条交易记录,而这条交易记录之后已经有了10条交易记录,那么他就需要花10个小时的时间,才能分别算出10道题的答案,并逐一作出修改。这样一来,小红就不能只用1比特币贿赂大家,因为在这10个小时里又会产生许多新的交易,这些交易和相关的数学题答案也都经过了无数比特币用户的验证,如果这时大家再按照小红10个小时前获取的交易记录作为范本修改,就会有很多用户损失大量的金钱。要让大家配合,小红就必须垫付这些用户的损失,而具体垫付的金额事前又无法获知,所以通过贿赂收买半数用户就变得非常困难。
你可能会问,如果小红租了一台超级计算机,可以以比生成交易记录更快的速度算题,那不就有成功篡改交易记录的可能性了?确实,但小红的计算能力必须超过除她之外所有比特币用户的计算能力之和(也就是买下半个地球的超级计算机),才能实现这个想法,而这是非常困难的。这保证了没有人能凭空变出比特币,保障了比特币的价值,进而保障了比特币作为货币的功能。
在上面的例子中,你也许注意到:虽然修改过去的交易记录非常困难(因为会造成大家的损失,所以得不到配合),但在取得相当部分人的支持的情况下,修改往后的(即将要发生的)交易记录是完全有可能的。
比如小红可以发起一个提议,从未来的某时某分开始,加入一条交易记录,给小红的账户凭空增加100,000,000,000比特币。再给其他所有人都凭空增加1比特币,作为支持提议的回报。
大家对这个提议的看法不一样。穷人认为,既然送老子1比特币,不拿白不拿;富人认为,你一下子给自己发一千亿,会造成通货膨胀,让我手中的比特币大幅度贬值,坚决反对。
于是在小红的号召下,穷人们纷纷修改比特币软件,并规定:在未来的某时某分,给小红的账户充一千亿,同时给其他所有人的账户都充值1比特币。这个版本的比特币软件,称为比特币穷人版,和原版就不兼容了。富人们则依然坚持用原版。
到了未来的某时某分,网络上会产生两个比特币版本,一个是穷人版,一个是原版,它们各自都能互相连网、维持运行,而且都包含了某时某分之前的交易记录,但是从某时某分开始,交易记录就各不一样了。这种情况称为数字货币的分叉(fork)。
现实世界中的比特币也确实发生过这样的分叉。不过并不是因为小红捣乱,而是因为比特币软件的开发者提出了一种更新版的比特币,这个新版本包含很多优点,包括交易效率更高。由于一部分人反对这个新版本,坚持用旧版本的比特币,市场上便同时流通了两种比特币,旧比特币被称为“经典比特币”。目前在所有数字货币交易所都能同时看到这两个版本。不管用户支持哪一个版本,原有的交易记录和账户余额,都是有效的,都可以在对应版本下继续使用。
一般来讲,如果一种数字货币在分叉的过程中,产生的两个新版本可以互相兼容、互相认可,就称为“软分叉”;反之如果造成了严重的分歧矛盾,并产生两种互不兼容的货币,就称为“硬分叉”。
区块链仅仅是实现细节,所以放到后面才讲。
比特币为了提高处理效率,并不是像我上面说的那样,为每一条交易记录分别计算数学题的答案,而是把N条交易记录合并成一条大的交易记录,称为区块,然后为这个区块计算数学题的答案。
由于每道数学题包含了上一道数学题的答案,所以为任何一个区块计算数学题,都必须先知道上一个区块的数学题的答案,因此就必须先知道上上个区块的数学题的答案……如此形成了一条从下到上逐层依赖的链条,把整个比特币历史上的每一个区块都串在一起,谓“区块链”。由于一种数字货币的区块链包含了这种数字货币的完整的历史,所以有时我们可以说区块链就是数字货币,数字货币就是区块链。
具体每一个区块就类似一个文件,仅仅是一段数据,可以以各种形式存储在各种介质上,比如存在你的电脑硬盘里。区块和区块链并不是真实存在的物体。
另一个细节也没有提,就是怎样防止其他人冒充小红提交交易记录,挪用小红账户里的资金?简单的说,怎么证明小红是小红?
其实也是通过算数学题,具体的讲叫签名算法。我在这里用RSA签名算法为例子。
小红的账户号码(公开)是一串数字u,账户密码(保密)是另一串数字p,这两个数字其实是配了对的,用p作为密码加密信息之后,可以用u作为密码进行解码。
于是小红用p加密“小红转给小刚120比特币”这条信息,发送到比特币网络;比特币网络上的其他用户收到小红的这条信息后,用u可以解密还原这条信息。由于密码p只有小红自己知道,所以这条信息肯定是小红发过来的,其他人没法假装成小红。
我们常说的比特币账户,就是这串长长的数字u,我们在生成账户的时候,会同时生成u和p,在密码学领域分别称为“公钥”和“私钥”。
因为每提交一笔交易都要算一大堆数学题,所以在比特币网络上并不是所有用户都会去计算区块链数学题,而是让那些拥有高速计算机的用户帮他们计算。这些高速用户维持着比特币网络的正常运作,为了鼓励他们,比特币规则规定,对于帮助计算区块链数学题、加速交易记录处理的用户,每个成功提交数学题答案的区块,奖励一定金额的比特币。所以如果一个人拥有非常强大的计算能力,他就可以把这些计算能力用到比特币网络的交易记录处理过程中,赚取奖金。这种行为,称为“挖矿”:所需要计算的数学题没有解析解,解题完全靠运气,收成时好时坏,和挖掘金矿类似。