用人话解释比特币原理
究竟是什么让一枚虚拟货币的汇率在3年间翻了25000倍,是什么力量让央行副行长“感兴趣”但“不承认”,抛开投机与商业欺诈比特币作为一种工具究竟有没有价值?欢迎收看今天的走进“伪”科学——用普通人也能理解的话解释比特币。
比特币大热,北京时间上周六下午五点多,比特币网络刚刚成交了有史以来最大的一笔交易——19 万比特币被抛向了市场,按照当时的价格 5000 左右计算,一个 10 亿人民币级的富翁就这样诞生了,你们随便感受下。
但是,这篇文章并不是教你如何投机的,小编也无意怂恿任何人进入比特币投机市场。请务必看准这几个大字再继续往下阅读:
比特币市场风险巨大,投机请异常谨慎!
好了,该打的预防针打了,接下来我们谈正事:这篇文章并不讨论比特币的商业逻辑,也不讨论它是不是骗局,而是将比特币的原理用通俗易懂、非极客也能听理解的语言进行解释,让大家来看看这个让央行副行长表示“有特点”而且“很有启发性”的电子货币究竟是个啥东西。因为考虑到要做到浅显易懂的原因,有些地方的解释并不十分严谨,有基础想要进一步研究的同学可以去看这篇比特币的原始论文《比特币:一种点对点的电子现金系统》。
下面,我们就开始走进比特币……
首先,从比特币的本质说起,比特币的本质其实就是一堆复杂算法所生成的特解。特解是指方程组所能得到无限个(其实比特币是有限个)解中的一组。而每一个特解都能解开方程并且是唯一的。
以人民币来比喻的话,比特币就是人民币的序列号,你知道了某张钞票上的序列号,你就拥有了这张钞票。
而挖矿的过程就是通过庞大的计算量不断的去寻求这个方程组的特解,这个方程组被设计成了只有 2100 万个特解,所以比特币的上限就是 2100 万。
到这里为止,比特币本质和挖矿的部分就解释完了,很扯对吧?凭什么我知道了钞票号码钱就是我的?那我把钱花出去了还记着号码不行么?
不行。
比特币网络是一个在线系统,比特币本身作为一串数(特解)离开了比特币网络一点用处也没有,这些数只有放进比特币网络里才能正常运作。换句话说,在这里将比特币比作下片的种子,将比特币网络比作下载用的网络,离开了下载工具,徒留你一大把种子也下不到泷泽萝拉不是么?
比特币网络被设计成了一种分布式存储数据库,换句话说,就像你在银行存了钱,银行将这些钱拿出去借贷了但是你仍然能够在你的网银账户里看到钱数,其实就是银行在数据库里写下了你的账户金额。比特币也存在这么一个数据库,但是这个数据库并不存在某个中心的服务器里而是面向所有人公开:每一个比特币钱包都是一个节点,这些节点用类似于 BT 下载的 P2P 网络相连,现在比特币钱包安装后下载的数据大约为 7G,记录着全世界所有人比特币钱包里的数据。当然,如果以后发展比特币钱包继续增大也可以抛弃一些陈旧且无意义的交易细节。
为什么要这么做?
还记得比特币只是一串数吗?为什么能保证这串数在同一时刻只会拥有一个合法的主人呢?
答案来了:每当你发起一次交易的时候,都会向整个比特币网发出广播,内容如下:
“我是节点 A,有特解 123,现在要转账给节点(钱包)B,你们看好了昂?”
比特币网络里的其他节点收到这个信息纷纷与自己的本地数据库进行比对,并回应:
“我带入方程算了下,这确实是个解,而且我看到了 A 是有 123,B 节点也存在,我承认这笔交易。”
当确认的节点数达到一定量的时候(取决于收款方想要有多稳妥),交易就成功发生了。
接下来,越来越多的节点收到了这个消息,并且没有人提出异议,这个交易记录就被整个比特币网络所接受,从此特解 123 成为了 B 钱包里的所有物。
如果你在交易结束之后,欺骗本地客户端,又让 A 钱包发出信息:
“我是节点 A,有特解 123,现在要转账给节点 C,你们看好了昂?”(即之前提到的记人民币号手法)。
其他节点收到信息与本地数据库一对比:
“不对,我这写着特解 123 在 B 手里,不承认交易。”
越来越多的节点拒绝了交易,于是你的交易就失败了。
挖矿也是同样的原理,利用大量的计算力去计算方程组特解,而你的矿机程序会先与本地的数据库进行对比,发现自己这里从来没有这个特解,于是向全网广播:
“我是 A,我这有个新比特币,叫 234,你们要没见过我可就收下了?”
之后的原理与交易就相同了。
比特币网络有一定的容错机制,可以保证即便是有一定的欺诈者(一直发发布虚假信息)和捣乱者(一直拒绝承认别人的交易)也不会影响到整个网络的运转。
也因此,比特币虽然是匿名的但是也是完全透明的,只要你想的话,你可以在本地的数据库中追查到某个比特币从被发现之时起所有交易经过的节点。通过这些交易记录与那些各大比特币交易所的市场深度进行对比,其实要人肉某个账户相对来说也是比较容易的。
有人又会问:既然比特币的算法是开源的,数据库是开放的,网络是无人控制的,那么难道不能以举国之力来“破解”比特币网络么?
知乎上有这么一个问题:“如果用天河二号做比特币挖矿机效果如何?”
简而言之就是比特币网络中现有的计算量已经非常庞大,即便是让国家级超级计算机加入比特币网络也不一定能获得优势,考虑到比特币的价格不稳定说不定还付不起超算的电费。而且在算法上,比特币保证了当整个网络的计算量提升的时候运算难度也会相应的提升,超算加入比特币网络大概也就只能领先一周左右。
还有同样的来自开源的问题:如果比特币的算法是开源的,那么怎么能够保证它的上限只有 2100 万,为什么不能修改?
谁告诉你不能修改的?当然可以修改
比特币官方客户端源代码中这个文件的第 998 行附近:
int64_t GetBlockValue(int nHeight, int64_t nFees) { int64_t nSubsidy = 50 * COIN; // Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years. nSubsidy >>= (nHeight / Params().SubsidyHalvingInterval()); return nSubsidy + nFees; }
只要修改那个 50 就可以增加比特币上限值,但是问题是比特币是开源的,标准是开放的,网络是没有中心管理的。“官方”客户端改了用户不一定愿意用,第三方客户端一看用户不愿意用人家也不跟进,所以某一家改了这个数字一点意义都没有。除非有足够大足够多的节点统一采用了新上限的客户端才会导致比特币网络的货币存量上限上升。
所以,比特币的 2100 万上限不会增加并不是一个不能的问题,而是一个大家都不想于是达不成统一意见的问题(客观上确实就是增加不了)。
针对商业上的逻辑就不好分析了,是不是旁氏骗局仁者见仁,不过比特币所浪费的计算力确实是货真价实的浪费,可不是像 SETI@Home 那样给什么研究机构做了贡献。不过因为比特币算法发明人中本聪身世扑朔迷离,发表了开头的那篇比特币初始算法和体系的论文之后就人间蒸发了,也说不定人家是某个神秘科学家正在利用大家的计算量和宇宙未知力量作战。
不过,有一点到值得一提,现在中美都有金融界的相关学者提到了这样一个有趣的用途:比特币的这套系统和算法可以被用来代替现有的 SWIFT 国际资金清算系统,它的结算速度比现有的结算系统更快速,而且也十分安全可靠(这里是指算法可靠)。
但是,即便真的比特币算法被当作一种新型的国际间结算标准使用,也不会使用现有的比特币网络来做。就像同样采用 BitTorrent 标准,国内的某些下载客户端可以保证只给自己的客户端供源而无视其他客户端一样。银行肯定会修改一定的算法作为一种银行业专用的私有系统进行结算,现有的比特币也肯定不会得到这个新私有网络的认可,所以和大众也没什么关系,这并不算是一个十足的利好消息。
再吼一遍:比特币风险巨大,投机异常谨慎。
作者:逍遥小妖