这篇文章的定位会更大众化。试着类比一下比特币的基本原理。本文不会涉及算法和协议的细节。在本文中,我将给出一个名为“比特村”的虚拟村庄。整篇文章会通过讲故事的方式,一步步告诉你比特币的产生动机,解决了哪些问题,以及一些关键部件的目标和设计方案。
先说比特币的动机。
为例。在这个世界上,有一个叫比特村的小村庄,有几百户人家。村子几乎与世隔绝,过着自给自足的生活。因为没有大规模的贸易,比特村的村民一直过着以物易物的生活,也就是说,村民之间没有统一的货币。他们之间的交易基本就是老张家拿一袋面粉换老李家的一只羊,王姐拿一筐野果换刘阿姨的两尺布。村民们一直过着这样简单的生活。
终于有一天,村民们觉得一直以物易物太不方便了,于是全体村民开会讨论如何解决这个问题。提出把稀有的东西,如黄金,作为普遍等价物,把其他物品与黄金的对应关系编成表格,如一克黄金对应一只羊,一克黄金对应一袋面粉等。这个时候,老张就不再需要气喘吁吁地背着一袋面粉去老李家换羊了。他只要从家里拿出一克黄金,就可以去老李家带回一只羊,老李灿用这一克黄金换任何愿意卖面粉的人。
此时咬村进入真金白银时代。
并没有持续多久。过了一段时间,实物货币的弊端也显现出来了。因为比特村附近金矿不多,采金、炼金太费时费力。然而,随着使用,黄金总是会磨损,丢失或故意囤积。全村人又坐在一起,开始商量对策。这时候有人说,其实不一定要真的用黄金。随便找一张纸,写上“一克黄金”。只要全村人都认同这张纸等于一克黄金,问题就解决了。也有人赞同,但同时也出现了新的问题:真金需要开采和冶炼,金矿是有限的,开采和冶炼也需要成本,没有人能在短时间内凭空造出大量的黄金,写作就不一样了。只要我有足够的纸和笔,我想写多少就写多少,然后就变成了拼谁的纸多的问题,也许一万张纸可以换一只羊(其实这样会造成经济通货膨胀)。
大家都这么认为。然而这时有人提出了一个解决方案:这篇论文并不是对所有人都有效。我们只认村里德高望重的老村长写的字,老村长的字大家都知道。老村长写一些纸,同时根据各家的黄金存量给大家同等数量的纸。比如老张家有200克黄金,老村长给老张200张写着“一克黄金”的纸,拿走老张家的黄金做抵押。老村长就这样把村里所有的金子都收进了自己的家里,按照各家上交的金子多少,分发等量的带字的纸。这时候村民就可以拿这些纸当黄金交易了,老村长的话大家都知道,别人却无法伪造。此外,如果某人的纸张磨损得太厉害,他们还可以从老村长那里得到它,以换取新的等价纸张。另外,老村长承诺,如果有人想换真金,只要把纸拿回来,他就把等值的黄金还给那个人。因为老村长写的纸含金量和真正家里的含金量是一样的,只要严格遵循纸毁多少纸新写多少纸的原则,每一张有效纸总能换来相应的真金。
此时,咬村进入了符号货币(纸币)时代。老村长承担了政府和银行的角色。
又过了几年。由于老村长每天都要清点大量的旧钞,写新钞,所以他必须仔细记录各种账目。长此以往,老村长劳累过度,不幸去了西部。
咬村再次召开全体会议,讨论怎么办。这时,老村长的儿子二狗子自告奋勇接过父亲的笔,承担起货币发行的责任。年轻的村长子很聪明。他做了几天,发现其实不需要写那么多论文。完全有可能:村民把钞票全部上交,销毁,但两只狗会记录每户上交的钞票数量。如果以后要打款,比如老张要和老李用一克黄金换一只羊,就一起打电话给子,说明要把老张名下的一克黄金转到老李名下,子就拿出账本,看看老张名下有没有一克黄金。如果有,你就在老张的名字上减一克,在老李的名字上加一克,这样就完成了支付。这时,老李灿放心了,老张听到二狗在电话里确认过户,就把羊带走了。
此时咬村进入了中枢系统的虚拟货币时代。每个村民都不需要实物支付,支付过程就变成了二狗子维护的账本上数字的变化。
这个新来的傻逼很聪明,但有时候这个人很聪明,却被自己的聪明误了。有一天,两只狗盯着这个账本,心想这个村子里每户人家有多少钱都是我说了算,那我不就…于是他头脑一热,偷偷从老张的账户上划了十克黄金到自己名下。
我以为很完美,没想到老张还有记账的习惯。有一天,他准备付款的时候,被二狗告知,他的账户没钱了。老张查了一下自己的账本,明明还有十克,就拿着账本去找二狗理论。这一查发现了未经老张同意的转账。
只是窗户!咬村爆炸了。二狗被弹劾是必然的。但通过这件事,大家发现了账本集中在一只手里的弊端:
这种制度尚力财经小编2022完全依赖于账本持有人的个人信用。如果这个人不遵守规则,随意篡改账本,那么整个货币体系就会崩溃
如果这个人家里着火或者账本被盗,也会给整个体系带来毁灭性的打击
村里的宅男科学家中本聪走上舞台,告诉大家,他设计了一个虚拟货币系统,叫比特币,不依赖任何中央处理器,可以解决上述问题。然后他慢慢描述了他的计划。
让我们看看中本聪是如何设计这个系统的。
中本聪首先解释说,现有的账本应该进行如下改革:
账本不再记录每个村民的余额,只记录每笔交易。即记录每笔交易的付款人、收款人和付款金额。只要确定了账本的初始状态,每笔交易记录都是可靠的、时序的,就可以计算出每个人当前持有的货币量。
账簿由私有变更为公有。任何村民只要有需要,都可以拿到现行的完整的户口本。账簿记录了从账簿建立到现在的所有交易记录。
此言一出,接下来的炸锅立马就下去了。第一个无所谓,第二个根本不能接受,因为账本记录了村民的所有交易,这样大家的隐私就没有完全暴露。中本聪不慌不忙,拿出一副奇怪的东西。
身份和签名机制(公钥加密系统)
他展示了手里的神奇的东西,说这两个东西分别叫秘密印章和印章扫描仪。之后,他会给村里每家每户送去一个秘密印章和印章扫描仪。 两者的作用如下:
一个秘密印章可以在纸上盖一个章,每个印章盖的章都隐含着全村独一无二的一串字符,但肉眼是看不见的。无法通过观察做出相应的密封。
印章扫描仪可以扫描一个盖章的印章,读出隐含的信息,在液晶屏上显示一串字符。
有了这两样神奇的东西,每个人都可以在不暴露真实身份的情况下进行交易,印章所隐含的那串字符就是这一家的代号。接下来将详细介绍如何熟练使用秘密印章和印章扫描仪进行交易。
建立虚拟矿工组织(采矿组)
矿工分组,一个组可以是单户,也可以几户合组
当矿工不影响正常用钱
[虚拟矿工可以在家完成工作,不用拿工具矿工有一定的获得报酬的可能性。他们在采矿活动中付出的努力越多,获得报酬的可能性就越大矿工可以随时退出,也可以随时有新的矿工加入很快,大约五分之一的村民加入了比特币矿工组织,这个组织被分成了七个。建立初始账本(创世块)接下来,中本聪宣布,根据二狗子手里的账本,将抵押的黄金按照账本记载的余额全部返还给每个村民,然后这个账本将被彻底销毁。然后,中本聪拿出一个新的账本,在账本的第一页记录了一些交易记录。特别是这些记录的付款人一栏都是“系统”,而收款人则是每一枚印章对应的隐藏字符,代表最初的时刻。系统默认分配给每家每户一定数量的比特币,但是数量很少,只有几个,甚至有些不幸的村民没有拿到比特币。然后中本聪说,由于目前市场上的比特币非常少,你可以回到黄金被用作货币的时代。由于我不是村长,我没有权利强迫你承认比特币,你可以自己决定要不要接受。但随着比特币的流动和矿工的活动,比特币会逐渐增多。支付与交易准备了这么多,终于说到重点了。接下来介绍在这样的系统下如何完成支付。以老张支付给老李10个比特币为例。付款人签署交易单为了支付10个比特币,老张先要老李的识别字符串,比如“ABCDEFG”,老张也有一个识别字符串,比如“HIJKLMN”。然后老张写了一张单子,上面写着“HILKLMN付10个比特币给ABCDEFG”,然后用自己的秘密印章改了。另外,为了追查这笔钱的来源,还需要在清单上注明这笔钱的来源记录在哪一页。比如这份清单中,老张的10个比特币,来自于建立账本时系统的赠予,被记录在账本的第一页。收款人确认文件签署人
收款人确认付款人余额
如前所述,中本聪设计的系统是一个分布式的货币系统,它不依赖于任何一个中心人物,所以不会有一个人或几个人负责,最后会由前面提到的矿工组织来接手这项工作。老张、老李,以及村里其他任何使用比特币进行交易的村民,都是依靠矿工组织的工作来完成交易的。
矿工的工作
矿工的工具
初始账簿。每个小组首先自己复制一个初始账簿。初始账本只有一页,记录系统第一次捐赠
空账本纸。每个组有几个账簿,每页只有账簿结构,没有内容。具体内容的书写规则将在后面描述。接下来是空账本的样子。每个字段的含义将在后面的
代码生成器(哈希函数)中描述。中本聪还向矿工组织的每个部门发送了一些代码生成器。这东西太神奇了。将一页填有内容的账本纸放入本机,机器会自动在账本纸的“本票据编号”一栏打印一串由“0”和“1”组成的数字,共计256。最神奇的是,数字生成器有以下功能:
生成的数字只与账簿填写的内容上述文章内容就是,与填写人、字体、填写时间等因素无关。内容相同的账簿生成的数字总是一样的,但即使内容只改变一个字符,数字也会完全无法识别。代码生成器在打印代码时还需要填写所有的账簿。机器会扫描交易单和填写的交易单的一致性,尤其是机密印章。如发现密印与付款人不符,将拒绝打印代码,放入打印好的账册。机器将确定该号码是否对机器打印有效,以及号码和内容是否一致。该号码不能伪造到交易单收件箱中。每个矿工组需要在门口挂一个箱子,收集交易单。公告板。每个矿工小组还需要一个公告栏来公布一些信息。有了以上工具,矿工组织就可以动手了!收集交易单中本聪规定,每笔交易的发起者不仅要将交易单交给收款人,还要复印几份相同的交易单,投递到每个矿工组的收件箱中。矿工组的人会定期去自己的收件箱,把收集的交易列出来拿出来。填写账本这时,组里的人拿出一张空账本纸,在“交易清单”一栏里填写这些交易。同时,他们找到了当前账本的最后一页,把最后一页的号码复制到了之前账单号码的一栏。注意,还有一个“幸运数字”。可以填写任意数字,比如12345。然后,将帐簿纸放入号码发生器,打印号码,从而完成帐簿。如果你以为矿工的工作就这么简单,那就大错特错了。中本聪有一个反常的规律:只有数字的前10位全是0,这个账本才有效。根据前面对号码生成器的描述,要修改号码,只能修改账本纸的内容,而“交易清单”和“以前的账本纸号码”是不能随便改的,所以只能改幸运号码。于是,为了生成有效的帐纸,组里的矿工不停地复印帐纸,但每张纸的幸运数字都不一样,然后反复把纸放进编码器。如果生成的数字不 我们知道,如果数字的每一位都是随机的,平均可以写1000多张不同幸运数字的纸,得到一个有效数字。这就奇怪了。为什么这些矿工会想尽办法去做这种看似毫无意义的事情?还记得以前矿工发工资吗?这就是矿工的动力。中本聪规定,每张账户纸的交易列表中,第一笔交易是“系统将支付该组50个比特币”。也就是说,如果你生成了一张有意义的账本纸,并且被所有挖矿组接受,就意味着这笔交易也被接受了,你的挖矿组获得了50个比特币。这就是为什么矿工被称为矿工,也是为什么之前说比特币的数量会随着交易和矿工的活动不断增加。例如,接下来是一个挖掘过程。这个群体的公共比特币账号是“UVWXYZ”。当幸运数字尝试“533”时,系统生成有效账簿。
确认账本当一个矿团有幸生成一个有意义的账本,为了获得奖励,请立即。其它小组确认自己的工作。前面说过,当前村里有7个挖矿组,所以这个小组必须将有效账簿纸誊抄6份快马加鞭送到其他6个小组请求确认。中本聪规定,当某个小组接到其他小组送来的账簿纸时,必须立即停下手里的挖矿工作进行账簿确认。需要确认的信息有三个:账簿的编号有效账簿的前一页账簿有效交易清单有效首先看第一个,这个确认比较简单。只要将送来的账簿纸放入编码生成器进行验证,如果验证通过,则编号有效。第二部分需要将账簿页上的“上一页账簿纸编号”和这个小组目前保存的有效账簿最后一页编号比对,如果相同则确认,如果不同,需要顺着已有账簿向前比对,直到找到这个编号的页。如果没有找到指定的“上一页账簿纸编号”对应的页,这个小组会将此页丢掉。不予确认。注意,由上面的机制可以保证,如果各个小组手里的账簿纸是相同的,那么他们都能按同样的顺序装订成相同的账簿。因为后面一张纸的编号总是依赖前面的纸的编号,编码生成器的机制保证了所有合法账簿纸的相对先后顺序在每个小组那里都是相同的(可能会有分支,但不会出现环,后面细讲)。最后是怎么样确认交易清单有效,其实也就是要确认当前每笔交易的付款人有足够的余额支付这笔钱。由于交易信息里包含这笔钱是怎么样来的,还包含了记录来源交易的账单编号。例如,HIJKLMN要给ABCDEFG10个比特币,并注明了这10个比特币来自之前OPQRST支付给HIJKLMN的一笔交易,确认时首先要确认之前这笔交易是否存在,同时还要检查HIJKLMN在这之前没有将这10个比特币支付给别人。这一切确认后,这笔交易有效性就被确认了。
其中第一笔是系统奖励给生成这页账簿的小组的50个,这笔交易大家都默认承认,后面的只要按照上述方法追溯,就可以确认HIJKLMN是否当前真有10个比特币支付给ABCDEFG。如果完成了所有了上述验证并全部通过,这个小组就认可了上述账簿纸有效,然后将这张账簿纸并入小组的主账簿,舍弃目前正在进行的工作,后面的挖矿工作会基于这本更新后的主账本进行。账簿确认反馈对于挖矿小组来说,当账簿纸送出去后,如果后面有收到其他小组送来的账簿纸,其“上一页账簿纸编号”为自己之前送出去的账簿纸,那么就表示他们的工作成功被其他小组认可了,因为已经有小组基于他们的账簿纸继续工作了。此时,可以粗略的说可以认为已经得到了50个比特币。另外,任何一个小组当新生成有效账簿纸或确认了别的小组的账簿纸时,就将最新被这个小组承认的交易写到公告牌上,那么收款人只要发现相关交易被各个小组认可了,基本就可以认为这笔钱已经到了自己的账上,后面他就可以在付款时将钱的来源指向这笔交易了。以上就是整个比特币的支付体系。接下来我们来分析一下,这个体系为什么可以工作下去,以及这个体系可能面临的风险。工作机制分析虽然上面阐述了比特币的基本运作规则,但是村民们还是有不少疑问。所以中本聪同学专门开了个答疑会,解答常见问题。接下来总结一下村民最集中关心的问题。核心问题答疑如果同时收到两份合法的账簿页怎么办?注意在上面的运行机制中,各个挖矿小组是并行工作的,因此完全可能出现这样的情况:某小组收到两份不一样的账簿页,它们都基于当前这个小组的主账簿的最后一页,并且内容也都完全合法,怎么办?关于这个问题,中本聪同学说,小组不应该以线性方式组织账簿,而应该以树状组织账簿,任何时刻,都以当前最长分支作为主账簿,但是保留其它分支。举个例子,某小组同时收到A、B两份账簿页,经核算都是合法的,此时小组应该将两页以分叉的形式组织起来,如下图所示:黑色表示当前账簿主干。此时,可以随便选择一个页作为当前主分支,例如选择A:
此时如果有一个新的账簿页是基于A的,那么这个主干就延续下去:
如果这个主干一直这么延续下去,表示大家基本都以A为主干,B就会被遗忘。但是也有可能忽然B变成更长了:
那么我们就需要将B分支作为当前主干,基于这个分支进行后续工作。
从局部来看,虽然在某一时刻各个小组的账簿主干可能存在不一致,但大方向是一致的,那些偶尔由于不同步产生的小分支,会很快被淹没在历史中。
如果挖矿小组有人伪造账簿怎么办关于这个问题,中本聪同学说,只要挖矿组织中大多数人是诚实的,这个系统就可靠,具体分几个方面给予答复。首先,基于保密印章机制,没有人能伪造他人身份进行付款,因为编码生成器在打印编码时会核对所有交易单的保密印章,印章和付款人不一致会拒绝打印。而且诚实的矿工也不会承认不合法的交易(如某笔交易付款方余额不够)。所以只有一种可能的攻击行为,即在收款人确认收款后,从另一条分支上建立另外的交易单,取消之前的付款,而将同一笔钱再次付款给另一个人(即所谓的double-spending问题)。接下来同样用一个例子说明这个问题。先假设有一个攻击者拥有10个比特币,他准备将这笔钱同时支付给两名受害者A和B,并都得到承认。第一步,攻击者准备从受害者A手里买10比特币的黄金,他签署交易单给受害者A,转10个比特币给受害者A。第二步,这笔交易在最新的账簿页中被确认,并被各个挖矿小组公告出来。受害人A看到公告,确认比特币到账,给了攻击者10个比特币等值的黄金。
第三步,攻击者找到账簿,从包含刚才交易的账簿页的前一页做出一个分支,生成更多的账单页,超过刚才的分支。由于此时刚才攻击者制造的分支变成了主干分支,而包含受害者A得到钱的分支变成了旁支,因此挖矿组织不再承认刚才的转账,受害者A得到的10比特币被取消了。
第四步,攻击者可以再次签署交易单,将同一笔钱支付给受害者B。受害者B确认钱到账后,支付给攻击者等值黄金。
至此,攻击者将10个比特币花了两次,从两名受害者那里各购得等值黄金。攻击者还可以如法炮制,取消与受害者B的转账,将同一笔钱再支付给其他人……
关于这种攻击,中本聪给出的解决方案是,建议收款人不要在公告挂出时立即确认交易完成,而是应该再看一段时间,等待各个挖矿小组再挂出6张确认账簿,并且之前的账簿没有被取消,才确认钱已到账。中本聪解释道,之前设定变态的编号规则,正是为了防御这一点。根据前面所述,生成有效账簿页不是那么简单的,要花费大量的人力反复试不同的幸运数字,而且过程完全是碰运气。如果某账簿页包含你收到钱的确认,并且在后面又延续了6个,那么攻击者想要在落后6页的情况下从另一个分支赶超当前主分支是非常困难的,除非攻击者拥有非常多的人力,超过其他所有诚实矿工的人力之和。而且,如果攻击者有如此多人力,与其花这么大力气搞这种攻击,还不如做良民挖矿来的收益大。这就从动机上杜绝了攻击的形成。比特币会一直增加下去,岂不是会严重通货膨胀中本聪说,这一点我也想到了。前面忘了说了,我给矿工组织的操作细则手册会说明,刚开始我们协议每生成一页账簿,奖励小组50个比特币,后面,每当账簿增加21,000页,奖励就减半,例如当达到210,000页后,每生成一页账簿奖励25个比特币,420,000页后,每生成一页奖励12.5个,依次类推,等账簿达到6,930,000页后,新生成账簿页就没有奖励了。此时比特币全量约为21,000,000个,这就是比特币的总量,所以不会无限增加下去。没有奖励后,就没人做矿工了,岂不是没人帮忙确认交易了到时,矿工的收益会由挖矿所得变为收取手续费。例如,你在转账时可以指定其中1%作为手续费支付给生成账簿页的小组,各个小组会挑选手续费高的交易单优先确认。矿工如果越来越多,比特币生成速度会变快吗不会。中本聪解释,虽然可以任意加入和退出矿工组织,导致矿工人数变化,每个矿工也会拿到一个编码生成器,不过我已经在编码生成器中加入了调控机制,当前工作的编码生成器越多,每个机器的效率就越低,保证新账簿页生成速率不变。虽然每个人的代号是匿名的,但如果泄露了某个人的代号,账簿又是公开的,岂不是他的所有账目都查出来了确实是这样的。例如你要和某人交易,必然要要到他的代号才能填写交易单。因为收款人一栏要填入那人的代号。不过中本聪说可以提供无限制的保密印章,建议每一次交易用不同的保密印章,这样查账簿就追查不到同一个人的所有账目了。答疑完毕。说明本文用通俗比喻的方式讲解了比特币的运行机制。有几点需要说明:为了便于理解,我做了很多简化,因此有些机制细节和实际的比特币可能不完全相同。但总体思想和关键原理是一致的。由于很多计算机世界的东西(如公钥体系、网络传输)在现实世界中并没有特别好的对等物,所以故事里难免有一些生硬和不合常理的细节。本文描述的是比特币网络本身的技术原理和运作机制,当在如Mtgox这种买卖市场中进行比特币交易时,市场做了中间代理,并不遵从上述机制。引用链接:http://blog.codinglabs.org/articles/bitcoin-mechanism-make-easy.html?出自:张洋的博客