用人话解释比特币原理

转载 2013年12月03日 12:06:23

究竟是什么让一枚虚拟货币的汇率在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 标准,国内的某些下载客户端可以保证只给自己的客户端供源而无视其他客户端一样。银行肯定会修改一定的算法作为一种银行业专用的私有系统进行结算,现有的比特币也肯定不会得到这个新私有网络的认可,所以和大众也没什么关系,这并不算是一个十足的利好消息。

再吼一遍:比特币风险巨大,投机异常谨慎。

作者:逍遥小妖

用人话解释比特币原理

究竟是什么让一枚虚拟货币的汇率在3年间翻了25000倍,是什么力量让央行副行长“感兴趣”但“不承认”,抛开投机与商业欺诈比特币作为一种工具究竟有没有价值?欢迎收看今天的走进“伪”科学——用普通人也能理...
  • swanabin
  • swanabin
  • 2013年12月12日 21:22
  • 1010

用人话解释比特币原理(转载)

究竟是什么让一枚虚拟货币的汇率在3年间翻了25000倍,是什么力量让央行副行长“感兴趣”但“不承认”,抛开投机与商业欺诈比特币作为一种工具究竟有没有价值?欢迎收看今天的走进“伪”科学——用普通人也能理...
  • taifei
  • taifei
  • 2016年12月27日 18:14
  • 3923

bootstrap界面杂谈

link标签和meta标签的体会,以及bootstrap中背景图片全区域化的问题解决方案。...
  • shansusu
  • shansusu
  • 2014年12月02日 20:50
  • 1183

解释下原型继承的原理。

prototype与[[prototype]] 在有面象对象基础的前提下,来看一段代码: 1 2 3 4 5 6 7 ...
  • xujie_0311
  • xujie_0311
  • 2015年03月19日 22:26
  • 2114

写给程序员的编程语言科普——(一)解释器的基本工作流程和构造方法

在这篇文章里我将介绍常见的解释器主要的工作流程,由于一个解释器通常有很多复杂的细节,在这里我仅仅是进行一些粗略的介绍。此外我将介绍人们通常是用怎样的方法来构建一个想要的解释器的。关于为什么我只介绍解释...
  • hrcnpc
  • hrcnpc
  • 2014年04月05日 19:54
  • 1737

linux解释器原理

对于会shell编程的人肯定不会对#!/bin/sh感到陌生。这一行字符串到底意味着什么呢? 应该明确,所谓解释器就是指#!行后面的可执行程序。   我们从exec函数说起。 exec函数总共...
  • qiqijianglu
  • qiqijianglu
  • 2013年01月12日 12:48
  • 3469

浅谈编译器和解释器

作为程序开发人员,经常会听到说这种语言是编译型语言,哪种是解释性语言,是不是会搞糊涂,在这里笔者浅谈一下编译器和解释器的认识。首先想谈一些编译器和解释器,如果学过编译原理的朋友都知道,这两者的区别,现...
  • sxb0841901116
  • sxb0841901116
  • 2014年03月17日 01:45
  • 3585

Python解释执行原理

这里的解释执行是相对于编译执行而言的。我们都知道,使用C/C++之类的编译性语言编写的程序,是需要从源文件转换成计算机使用的机器语言,经过链接器链接之后形成了二进制的可执行文件。运行该程序的时候,就可...
  • clarkchenhot
  • clarkchenhot
  • 2016年08月02日 10:56
  • 1027

JavaScript运行原理解析

写在前面的话: 发现使用了那么长时间的Javascript,但是对其运行原理还是不清晰,今天特意总结一下,把大神们的理论和自己的总结都记录到下面; 1. 什么是JavaScript解析引擎? 简单地...
  • liaodehong
  • liaodehong
  • 2016年01月09日 17:06
  • 9980

编译原理概述

介绍编译和解释基本概念,和编译的基本步骤。
  • tfygg
  • tfygg
  • 2015年06月27日 21:32
  • 743
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用人话解释比特币原理
举报原因:
原因补充:

(最多只允许输入30个字)