比特币系统是如何运行的?(转自知乎,原做者Wu Hao)

比特币系统是如何运行的?(转自知乎,原做者Wu Hao)安全

第零章 玩具

最近比特币又火了,并且获得了主流媒体的广泛报道。惋惜的是大概一万个谈论比特币的人中也没有一个真正懂它是怎么工做的,因而只要一提到比特币,什么庞氏骗局,传销之类的话立刻就杀过来了。弄得普及比特币知识的人一个个都是骗子。要知道比特币在进入大众视野以前,是一帮hackers和geeks慢慢养大的玩具,他们绝对不是生长骗子的土壤。

改变世界要从本身作起。因此我今天下定决心,写一篇让初中生也看得懂的文章(若是你以为仍是看不懂,绝对不是你智商不够,而是我无知自大,写得很差。那些说本身智商不够的朋友让我以为惶恐),来介绍比特币运行的原理。也许你看完跟我同样,会佩服其天才的设计:原来他是这样把“我的发行货币”这种荒诞不经的想法变为现实的。

通俗易懂是本文的初衷,同时又但愿篇幅尽可能小,势必要忽略细节,或作不精确的比喻,一定贻笑大方,还请谅解,并且欢迎各类批评指正。文中包含了大量比喻,对这部分千万不要当真。我会用非专业性的语言尽我所能地描述事实真相,可是若是想真正懂得原理,请去官网。固然本文也能够用于研究官方文档前的预热。

比特币是个比较复杂的系统,若是你想10分钟就弄明白,神仙也办不到。还但愿多开点耐心的预算。



第一章 帐单

第一章 第一节 撕纸游戏

比特币本质上是一个广播和管理帐单的系统。也许有点让人难以相信的是,每一个标准客户端都保存有有史以来每一笔账单。并且没有任何特殊结点(服务器),于是称之为去中心化的点对点系统。

很显然账单必须惟一,那么在一个点对点的系统中如何能作到这一点呢?想像100个互不信任的人住在一个小岛上,他们没有物理货币,只能相互给帐面上钱,而且每给一笔都喊一句让全部人知道。若是他们每人均可以记账,显然就乱套了:当两我的的账单对不上号怎么办?若是由一个指定的人来记账,那他又有可能以权谋私。

比特币怎么解决这个问提?每一个人均可以记账,把每一笔交易都记在一张牛皮纸上,签个名。那么,谁的牛皮纸算数呢?很简单,全部人都得把这张纸撕成等面积的两半,让偏差小于必定值,好比0.1%。若是知足这个条件,那么你的就被你们承认,每人复印一份拿回家。什么?你撕完了发现偏差是0.100001%?对不起,大侠请从新来过。为何要撕纸呢,由于纸一分为二造成的那一条线,是独一无二的,具有了防伪的功能。而撕成偏差极小的两半,是有“难度”的,没有难度没法成为游戏。

没事干玩撕纸游戏干吗?由于你们约定,每一个人均可以在账单上添一笔,说“比特岛公共基金给本人25元”。你的帐单被判为有效的话,你就获得了这25元。这个撕纸游戏就叫挖矿,由于游戏过程就像淘金同样。

比特币的挖矿就是用电脑来进行这种撕纸撞大运的游戏,当前的数据是全络“撕”61,000,000,000,000次每秒,换句话说大概每61,000,000,000,000 x 600 次尝试产生一个幸运儿。无疑这须要巨大的硬件和能源,可是如你如今所知,这是维持比特币这个金融系统必须付出的成本,而不是所谓的“纯粹浪费资源”。要明白现实中的金融系统要比这个昂贵得多,一个银行客服的成本至关于多少台电脑?


第一章第二节 帐单链

全部的有效帐单组合在一块儿,才能成为完整的帐单。怎么作到这一点呢?每一份帐单都把前一份帐单缩小成1/10,贴在本身的角落上,换句话说每一个帐单都知道上个帐单是哪一个,一个链就造成了。这对玩记帐游戏的人有产生问题了:假如第123份帐单生成好了,A和B都拿这个做为前一个节点,记帐,撕纸,而后他们几乎同时撕出了符合要求的帐单怎么办?那个稍微慢一点点的(假定是B)怎么甘心认输呢?方法很简单:大众只认最长的那一条链。因此,当一个新帐单生成并被广播时,每一个玩家会当即放弃当前这一局游戏,拿到最新的帐单缩小成1/10,贴在本身的新的一张帐单的角落上,开始下一轮游戏。不然就算你撕出了合法的帐单,也会被孤立,变得无效。

明白B是怎么被淘汰的了吗?想象这样一个有趣的无限接力赛游戏:环形赛道,每一棒一圈,每圈跑完之后你就把棒子插到一个“下一代接力棒生成器”中,生成一大堆下一代接力棒供下一棒的选手们使用。只要你的棒子的下一代被大多数人使用,你就为这一轮的胜者。显然下一棒的选手们会去拿最先生成的新一代棒子,于是其余的上一棒的选手会自动就放弃。哪怕是因为惯性B也跑到交棒点,而后顺手把棒子插到一个“下一代接力棒生成器”中,也是徒劳的。由于你们都已经跑了,再也没人理会你的接力棒了。

可是若是真的有两我的同时跑到终点怎么办?那也不要紧,下一轮就会有拿着两种棒子的人跑了。平局的这一轮两我的如何决胜?你应该也已经想到,“我不比你快,我儿子比你快就行”。在现实挖矿中,这种两种棒子同时跑的现象是十分常见的,因此矿工每隔一段时间就要经历一次“空欢喜”。具体可见Orphaned Blocks


第一章第三节 游戏规则

记帐是个平常事务,因此矿工每时每刻都在试图制造合法的帐单。那么假如我但愿天天一份帐单就好,可是这些矿工技术愈来愈好,玩的人愈来愈多了怎么办呢?不要紧,若是帐单生成得太快,就提升偏差要求,反之下降要求,以达到动态平衡。比特币的控制目标是十分钟一个帐单,就是传说中的一个"Block".

怎么保证没有人伪造帐单呢?答案是不能100%保证,可是伪造很是困难。因为帐单链的存在,伪造一份帐单必须把从这份帐单之后的全部帐单所有伪造一遍。不然,好比你伪造的是第123份,大众拿手里的第124份的复印件中的第123份的缩略图一对比,会发现撕纸的痕迹不同。于是拒绝认可你的合法性。你也没法直接窜改那牛皮纸,由于撕纸游戏规定一旦有改动,该纸当即做废。于是那个被大众所认可的帐单链表明的,实际上是历史上全部的最高效的撕纸生产力的总和。你要推翻它就必须拿出比这个更大的生产力伪造一条新的更长帐单链,而后混淆是非说,你这条链才是合法的,由于大众只承认最长的那一条。

注意,这不是不可能。现实中新一代矿机的制造商彻底有这样的能力,由于他们的生产力是别人的成百上千倍,再加上规模化制造矿机,这个是很容易实现的。但问题是很显然这背离了他们的利益,这会是对他们本身赖以赚钱的平台的核心机制毁灭性打击,因此这种事情是不会发生的。

若是对这个仍是不放心的话,其实已经有修补这个漏洞的方案,只不过彷佛目前并未实施。


第一章第四节 2100万

如同不少人知道斯诺克满分是147同样,不少人最早了解到比特币的信息之一即是,比特币总数上限是2100万。对普通人来讲,这就是最大的卖点。而这又是如何实现的呢?其实这个上限就是前面提到的比特岛公共基金的总量,经过撕纸游戏分配给获胜者。显然总有一天是要坐吃山空的,怎么办呢?两个办法。一是日后拖:每四年撕纸的奖励减半,09年还奖励50呢,现在13年就只有25了。这么玩要玩到下个世纪才算瓜分完。二是伸手要:假如你给别人钱的同时,给记帐的一点小费,别人就优先给你记帐,你的交易就较早第获得确认。原做者的假设是,到最后矿工只经过小费得到收益。

这里面隐藏的一个重要的信息是,比特岛公共基金是经过这个游戏作了另一件很是重要的事,把钱分发出去的。发现了吧,记帐和分发货币,这两个最基本的工做,就是由这个巧妙的游戏完成的。



第二章 支付

第二章第一节 匿名

说了这么多,其实最根本的问题尚未聊到,那就是比特岛上的人都是没有名字的,这个帐单要怎么写?更重要的是,D 说 D 给了 WM 0.5元,记帐的如何知道 D 的帐户上有没有0.5元,又如何记录 WM 今后多了0.5元钱呢?比特岛人是经过“发微博”实现的,神奇吧。

假定 D 的微博号是 188Nxs23XGUonU8og9u6n4CNwr5oqqsVjE(如下简写为188N),WM 的微博号是 19XRiapec1aDN4NCJMmLkkp7iXegEQvBGz(如下简写为19XR)。只要 D 在微博上发 “我支付给 @ 19XR 0.5元” 就行了。为何这句话直接就被断定为真话呢?@罗永浩说本身的ROM比MIUI好,你们都会怀疑他是否是吹牛,可是若是他说本身的ROM比MIUI差,就不会有人质疑他了。一样的道理若是@188说“@19XR支付给我0.5元”,是不会有人直接采信的,但反之则可。

咱们来一个案例分析,其中有三名参与者。除了上文提到的 D,WM 外,再加上微博号为 136LvpXuWFRjfuVBCmoqFFGSstbMQkNEKr(如下简写为136L)的比特岛居民 DS。DS辛苦挖矿获得25元,而后上交20元给 D, 后来 D 又支付0.5元给WM。

首先是 DS 赢得了某轮的撕纸大赛,那个全岛惟一,人手一份的帐单链上的最后一份帐单是 DS 生成的。那么这份帐单上就有一条写着“比特岛公共基金支付 @136L 25元”。(固然若是这位 DS 真名是雷锋,他就会写成 “比特岛公共基金支付 @188N 25元”,彻底把本身的劳动成果奉献给 D,这也是彻底能够的。)

而后 DS 经过微博帐号@136L 发微博说“我支付 @188N 20元”。这时全部矿工们(也就是记帐的)都看到了,要不要记录在册呢?他们首先要去查帐单链,看看@136L总共收到多少钱,又送出去多少钱,若是其他额大于20的话,那这笔帐就是有效的,能够记下了。矿工们查完发现@136L 只存在于一笔得到25元的交易上,余额就是25元,当前交易有效。

后来 D 又经过微博帐号@188N 发微博说“我支付 19XR 0.5元”。一样因为根据帐单链发现@188N余额大于0.5元,交易被记录。

总结一下。 第一,一组微博的用户名密码就是承载比特币的一个容器,所谓的“钱包”就是记录你所拥有的全部的微博用户名密码的文本文件。第二,帐单链中保存的所有都是“微博用户名”,你根本没法知道是谁拥有这些用户名对应的密码,这就是所谓的匿名。

可是从另一个角度看,比特币又是彻底透明的。由于任何一个“微博用户名”的财富总量都是公开的数据。若是你有兴趣能够去观摩一下高富帅的交易历史,好比Bitcoin Address 1933phfhK3ZgFQNLGSDXvqCn32k2buXY8a


第二章第二节 点对点

现实生活中比特币的交易是彻底点对点的,不依赖于微博这么蠢的东西。(事实上任何网站都不是比特币系统的一部分,无论是官网,仍是最大的交易网站mtgox,或者是blockchain.info。它们都只是这个生态圈的一部分,比特币的运转,不依赖于它们任何一个。)而作到这一点,比特币用的是数字签名技术。并且比特币系统并不会刻意跟踪某个地址拥有多少钱,而是经过管理每笔交易的输入输出来记录帐目的。

数字签名比较复杂,比特岛人是用不惯的,他们如何操做呢?仍是撕纸。咱们仍是拿 D 给 WM 0.5元为例子。咱们先假定 DS 在第1024页帐单的419条目给了 D 25元。
第一步,WM 随便拿张纸,随便撕成甲乙两半。而后吧其中甲部分交给 D,这半张纸就是一个比特币地址。
第二步,D 向大众广播这样一封信:“我是第1024页帐单的419条目的受益方,我要将其中的0.5元转让给这半张纸(附上 WM 给他的半张纸)。”
第三步,记帐者收到消息,调出第1024页帐单的419条目,查看此条目的受益方收到的钱够不够,而后验证次受益方就是本次交易的发起人。所有确认后,则把这则帐目包括这半张纸(或者其复印件)归入帐单中。假定此条目为1984页1989条。
如今,当 WM 要把钱转让给别人时,他就能够拿出他剩下的那张纸的乙部份,证实的收益方是他,由于世界上只有他这半张纸跟1984页1989条中记载的那半张纸匹配。
再回来看第二步,其实D也是经过提供某张纸的乙部份来证实他是第1024页帐单的419条目的收益方的。

总结一下,一个交易包含一下信息:
1.资金来源,即前面某个帐单中的某个条目。
2.资金去向,即某张纸的甲部分的复印件,和金额大小。用于指定本次交易的受益方和金额。
3.签名,即资金来源条目中所副的那张半张纸对应的乙部份的复印件,用于证实这次交易是由资金来源所指向的收益方发起的。
这里要注明的是,咱们假定撕开的纸的甲部分是能够无限重复复印的。而乙部份由受益方持有,且只有从原件复印出来的第一代复印有效,换句话说签名只有乙部份的持有人才能够作。

实际上在这个例子中,一张纸的甲部分就是比特币地址,好比我提供的136LvpXuWFRjfuVBCmoqFFGSstbMQkNEKr,而乙部份则是被我严格加密保存在wallet.dat中的一个秘钥,他跟136LvpXuWFRjfuVBCmoqFFGSstbMQkNEKr是一对。而所谓的附上乙部份的第一代复印件,就是利用秘钥对信息签名的过程。

换句话说,“我向136LvpXuWFRjfuVBCmoqFFGSstbMQkNEKr打入0.0001BTC”实际的意思是“我把0.0001BTC的控制权交给了136LvpXuWFRjfuVBCmoqFFGSstbMQkNEKr对应的秘密字符串的拥有者”。


第二章第三节 重要的细节

一个典型的比特币客户端含有N个地址及其对应的私钥,而不是一个。并且这N个地址相互没有什么特殊关系,只不过在界面上它会显示全部地址所拥有的比特币的余额。这是相对于常见的一用户名一密码模式的最大区别。这个带来的问题是“钱包备份”的问题:别觉得备份一次就万事大吉了,有可能有新产生的地址秘钥没有获得备份。固然这样的备份方法也是有的,这里只是提醒要安全备份,就不展开说了。

再介绍另一个有趣的细节。如上文所说,当你把比特币打给另一个地址时,你所发出的消是,“我要吧第M号交易的输出到地址X的一些比特比做为输入源,输出给地址Y”。这里有一个很是重要的规定,就是每笔交易都必须输入源的金额用光!因此比特币客户端的作法是建立一个“找零地址”,把额外的输入输出给这个找零地址。举个例子,假如个人某地址136LvpXuWFRjfuVBCmoqFFGSstbMQkNEKr某次交易得到了1万个比特币,而后当我拿这笔钱中的0.01个币买一瓶矿泉水时,公众就会从全局帐单看到地址136LvpXuWFRjfuVBCmoqFFGSstbMQkNEKr打到地址DZA 0.01个币,同时打到DZB 9999.99个币。固然公众无从知道这个DZB只是个人一个找零地址。因此有些搞数据分析的专家看到频繁的大规模财产转移就会觉得这是刻意的转移/掩盖财产,最后发现闹了笑话。



第三章 沙发 --总结以及FAQ


第三章第一节 主观臆断

这一章叫沙发,由于文章主体已经结束了。

相信不少人都抢过沙发,或者是在论坛上抢整。我想问你们一个问题:把时间倒回2009年,当比特币还一钱不值的时候,大家会去挖矿抢币吗?我想我必定会的,缘由跟抢沙发相似,可是比抢沙发更有意思:
a. 我所抢的东西是个“好”东西,它好到可让人崇拜。正如你会去抢你喜欢的人的沙发。
b. 稀缺,若是没有总量上限,我就不会去“抢”了。沙发也如此,是限量供应的。
c. 绝对可靠的物权,只要没有丢掉个人私钥,个人就永远是个人,没人能拿走。

我想,无论当初钟本聪开发比特币时,是抱着实验的心态,仍是真的预见到本身要改变世界,对于普通玩家来讲,在最初很长的一段时间内,挖矿只是一种优雅的抢沙发的方式,固然也许还有认为它往后真的能生根发芽的一种“信仰”。

总有人问我,比特币有什么“实际价值”,通常来讲有此会引起一堆关于法币,黄金或者是“Rai stones”的大辩论。这里我不想纠缠于这个问题,只想回答另一个问题:比特币问什么有价格?有人想要,能够交换,稀缺这三个要素构成了价格造成的必要条件。能够交换,稀缺是比特币天生的,那么”有人想要“这个判断为不为真呢?固然!我只须要举出一个例子,那就是我,本文做者。

回到那个虚拟的比特岛,若是把世界上的全部人分红两类,相信比特币的和不相信比特币的,而后前者都住在比特岛上。那么,无论在岛外的人看起来多么好笑,对于岛上的人来讲,比特币就是黄金。

比特岛外的人也是能够持有比特币的,由于尽管他不认可这种货币,可是只要他随时能够到比特岛换回”真金白银“就能够了。

据说过那个2010年有人用1万比特币买一个pizza的故事吗?比特币不是一个忽然冒出来的价值上千人民币一个的怪物。只不过是比特岛的人口一直在不紧不慢的增加,比特币的潜在价值也在不紧不慢地增长,在这个IT时代的参照系中,比特币发展得没有你想象的快。可是比特币的价格并无像其潜在价格同样增加,而常常是积蓄上涨的力量,而后忽然像火山喷发同样,吸引全世界的眼球。

比特币真的会改变世界吗?若是你问我并且只能用“会“或”不会“来回答,个人回答是”不会“。正如比尔盖茨所说“I think it's a techno tour de force, but that's an area where governments are gonna maintain a dominate role.(我认为比特币是个技术杰做,可是政府会在这个[货币]领域保持统治地位)”取代法币是妄想。比特币的下限是继续沦为少数人的玩具,上限是成为IT时代的黄金。

以上是主观臆断。


第三章第二节 客观事实

客观事实是:比特币不是骗局,因此任何形式的骗局都跟比特币无关。对我我的而言,说比特币是庞氏骗局会让我很难受,就像我原本有个女儿像奶茶妹同样漂亮却被人说长得跟凤姐同样。

先简单介绍一下庞氏骗局:我要骗钱,因而我成立了一个基金,可是我并不投资,只是作假帐,跟投资者说个人基金回报又稳定又高。这样一来个人基金必然会出现愈来愈大的实际亏空,这不要紧,只要有愈来愈多的人把钱投入个人基金,个人现金流就不会枯竭,骗局也就不会被拆穿。众所周知的诈骗500亿美圆的Bernard Madoff就是由于金融危机才致使其骗局显形。

说比特币是庞氏骗局的人认定比特币创始人 Satoshi Nakamoto(注:没人知道Satoshi是一我的仍是一个组织,并且目前他已经”退出江湖“) 就是 Bernard Madoff。由于Satoshi做为最先的挖矿者之一,是大量比特币的持有者,因此比特币升值他就是最大的受益者。于是他就是背后的骗子。这个理论最大的问题在于一个”骗“字。在比特币的世界,一切都是透明的,骗从何来?任何人若是购买比特币都是基于本身对公开信息的判断,Satoshi既没有也没法跟投资者保证又高又稳定的回报,而这个是庞氏骗局的基本特征。

任何一个庞氏骗局都有一个死穴,那就怀揣一本假帐。Madoff之前老是以商业机密为由,拒绝透露投资细节。任何一个基金只要将本身的投资流向彻底公开,就能够洗脱庞氏骗局的嫌疑了。那么我想问,若是Satoshi想要洗脱嫌疑,你做为怀疑者想要他公开什么?他持有的比特币的数量?好吧,就算他如人们所猜想拥有100万比特币,站在镜头前像全世界宣布这个事实,那又怎么样呢?比特币就土崩瓦解了?我看不出来为何这会对比特币有什么致命性的影响。没有谁骗了谁,没有阴暗的秘密,骗局无从谈起。

如今说说传销,比特币是我见过最滑稽的传销了。假如我拥有十个比特币,那么我传销一个比特币得到的收益有多少呢?咱们能够大体估算一下:假定传销出去一个比特币给比特币带来的升值约至关于销毁一个比特币所带来的,那么每传销出去一个比特币我持有的每一个比特币大约升值 1/(2100万)。换句话说,我这是为全部的比特岛人搞传销,或者说共产主义传销。这么崇高的共产主义传销你见过吗?

传销的特色是,每一个人*直接*从其下家获利,比特币彻底不具有这个特色。实际上持有比特币的人鼓吹比特币,跟持有黄金的人鼓吹黄金,或者持有北京房子的人鼓吹房价没有什么区别。是有点讨人厌啦,可是传销这帽子扣得大了点。我我的通常都在鼓吹的同时警示风险,表示不懂的话不要玩。

为何你们都喜欢说比特币是骗局呢,并非由于他们真的经过分析比较,而后从逻辑上得出这样一个论断。而是由于他们对比特币的见解是“没有实际价值,最后下家买单”。长得这么反革命,天然就是反革命了,拖出去游街批斗!

比特币长得这么反革命不是没有缘由的,可是我想把“没有实际价值,最后下家买单”改为“可能低于实际价值,可能最后下家买单”。对比特币的恶评,无非是来源于对其巨大的泡沫风险和不肯定性风险的反感。是的,查理芒格爷爷说得没错”比特币是老鼠药“。对于一个不了解它的人,最好把它当作老鼠药:不要碰!


第三章第三节 结语

比特币是什么?本质上,跟HTTP 或者 Bittorrent 同样,它是基于因特网的一个协议,一个天才的发明创造。跟HTTP 或者 Bittorrent 同样,它以互联网为基础,使得之前不可想象的事情变成可能。

在现实中,它被说成是一帮无政府主义者的乌托邦,也被说成是人类经济史上的一次大革命;它被认为是天才的技术创造,也被认为是有不少缺陷的一个开源软件;它被利用成投资或是投机的工具,也被当作不可接触的老鼠药。

因为不一样的背景,不一样的看问题角度,每一个人眼中必然有不一样的比特币。盖茨说它是技术杰做,而芒格说它是老鼠药,从某种角度看,他们都能自圆其说。做为键人我,惟一的但愿是,你看完这篇文章后不要再说比特币是“骗局”了。这种说法真的显得很没文化,你不以为吗?服务器

如下是比特币系统运行的图示~dom

相关文章
相关标签/搜索