区块链到底是什么?一个故事告诉你比特币的原理和运行机制虽然不敢说每个细节都看透了,但是总体思路和关键部分的主要原理还是比较清楚的。写一篇文章分享给大家。本文的定位会比较科普,尽量用类比的方式来解释比特币的基本原理。本文将不涉及算法和协议中更详细的部分。以后打算再写一篇程序员视角的比特币原理的文章,从技术人员的角度分析比特币系统中的关键数据结构和算法。以及关于协议的一些解释。在本文中,我将给出一个名为“比特村”的虚拟村庄。整篇文章会一步步告诉你比特币的动机,它解决了什么问题,以及一些关键部件的目标和设计方案。.提出这个问题,我们先从比特币的动机说起。据说在这个世界上,有一个叫做比特村的小村子,村子里有数百户人家。村子几乎与世隔绝,过着自给自足的生活。因为没有大规模的贸易,比特村的村民一直过着以物易物的生活,也就是说村民没有使用统一的货币。彼此之间的交易,基本上就是老张家给老李家换一袋面粉。为了一只羊,王阿姨用一筐野果换了刘阿姨的两尺布。村民们一直过着这样简朴的生活。实物货币终于有一天来了,村民们觉得一直这样以物易物太不方便了,于是全村人开会商量如何解决这个问题。有人建议,对于黄金等易分稀有的物品,作为一般等价物,应将其他物品与黄金的对应关系编成表格,如1克黄金对应一只羊,一克黄金对应一袋面粉等等,这时候,老张再也不用气喘吁吁地背着一袋面粉去老李家换羊了。他只要从他家找出一克黄金,去老李家带回一只羊就可以了。一克黄金,只要愿意卖面粉的人,就可以换一袋面粉,当然也可以换任何等值于一克黄金的物品。此时,比特村已经进入了实物货币时代。符号货币的好景不长,过了一段时间,实物货币的劣势也出现了。因为比特村附近的金矿并不多,开采和冶炼黄金实在是太费时费力了。随着使用,黄金总是会磨损、丢失或被故意囤积。全村人又坐在一起,开始商议对策。这时候有人说,其实不用黄金,随便找张纸,写上“一克黄金”,只要全村人都同意这张纸等于一克就可以了黄金,问题就迎刃而解了。其他人表示赞同,但与此同时,又出现了一个新问题:真金需要开采和冶炼。金矿是有限的,开采和冶炼也是需要成本的,所以没有人能够在短时间内凭空炼出大量的黄金。写作是不同的。现在只要纸笔够多,想写多少就写多少,到时候就变成了家里谁纸多的大战,说不定10000张纸可以换一只羊(其实,这会造成经济问题(学术通货膨胀)。大家也在思考。但这时有人想出了一个办法:这张纸谁写谁无效,我们只认村里德高望重的老村长的字迹,老村长的字迹大家都知道。老村长写了一些纸,同时根据每家的黄金存量,给大家发了等量的纸。比如老张家有200克黄金,老村长送老张200张纸,上面写着“一克黄金”。同时,他们还拿走了老张家里的黄金作为抵押。就这样,老村长把村里所有的黄金都带回了自己家,并根据每家上交的黄金数量,分发了等量的写在上面的纸。这时候,村民们就可以把这些纸当作黄金来交易了,老村长的话大家都能认出来,其他人就无法伪造了。另外,如果有人的纸磨损得太厉害,也可以从老村长那里拿来换取等值的新纸。另外,老村长承诺,谁要换真金,只要把纸拿回来,老村长就会还给他们。将等值的黄金还给该男子。因为老村长写的纸上的金子和家里实际放的金子数量是一样的,所以只要严格按照废纸新纸多写新的原则,每一个有效的纸片随时可以换取相应的真金。此时,比特村进入了符号货币(纸币)时代。老村长承担了政府和银行的职责。自中央系统的虚拟货币以来已经过去了几年。老村长每天要核对大量的旧钞票,写新钞票,认真记录各种账目。一来二去,老村长劳累过度,不幸驾车西行。比特村再次召开全体会议,商讨对策。这时,老村长的儿子二狗子自告奋勇接过父亲的笔,承担起发行货币的重任。年轻的村长二狗子很聪明。他工作了几天,发现其实并不需要写那么多论文。完全可以这样:村民们把纸币全部上交销毁,但是二狗子会记录每户上交的纸币数量。如果以后要付钱,比如老张要跟老李换一克黄金换一只羊,他就把二狗子一起叫来,说明要转老张手下的1克黄金以老李的名字命名,二狗子拿出账本,看看老张名下有没有一克黄金,如果有,老张名下减去一克,老李名下加一克,支付完成。这时,老李听到二狗子在电话里确认转账已经完成,这才放心让老张把羊带走。此时,比特村已经进入了中央系统虚拟货币时代。每个村民都不需要实物支付,支付过程变成了二狗子维护的账本上的数字变更。新上任的分布式虚拟货币二狗子很聪明,但是这个人有时候聪明,被小聪明误了。一天,二狗子盯着账本,想着村里每户有多少钱我说了算,我岂不是……。于是他就一时冲动,私自将老张账户上的十克黄金转到了自己的名下。本以为完美,没想到老张也有记账的习惯。有一天他正要付钱,二狗子却告诉他账户没钱了。老张查了一下账本,还有十克,就拿着账本去找二狗子理论。查了一下,发现是未经老张同意的转账。发生了一些事!比特村炸了。二狗子的弹劾是不可避免的,但是通过这件事,大家发现了把账本集中在一个人手里的弊端:这个系统完全依赖于账本持有人的个人信用,如果这个人不遵守规则,他可以随意篡改如果这个人的房子着火了或者账本被盗了,也会给整个系统带来毁灭性的打击。就在人们一头雾水之际,村里一位名叫中本聪的宅男科学家走上台来,告诉大家他设计了一种不依赖任何中央处理器的虚拟货币系统比特币,可以解决上述问题。然后他慢慢地描述了他的计划。我们来看看中本聪是如何设计这个系统的。基础设施建设账簿公开机制中本聪首先解释说,现有的账簿应该修改如下:账簿不再记录每个村民的余额,而只记录每笔交易。即记录每笔交易的付款人、收款人和付款金额。只要确定了账本的初始状态,并且每笔交易记录都是可靠的、及时的,就可以计算出每个人目前持有多少钱。账簿由私有变为公开。只要有村民需要,都可以获得当前完整的账本。账簿记录了从创建账簿到现在的所有交易记录。此话一出,下面立刻炸锅了。第一个无所谓,但是第二个简直不能接受,因为账本上记录着村民的所有交易,所以大家的隐私并没有完全暴露。中本聪不紧不慢地拿出一对奇怪的东西。身份和签名机制(公钥加密系统)中本聪说,不要惊慌。在他的机制下,没有人使用真实身份交易,而是使用唯一码交易。他炫耀着手中的神奇之物,说这两样东西分别叫做保密印章和印章扫描仪。以后,他还要给村里的每户人家发保密印章和印章扫描仪。两者的作用是:保密印章可以在纸上盖上一枚印章,每枚印章上都印有全村唯一的一串字符,但肉眼是看不到的。也不可能通过观察来制作相应的印章。邮票扫描仪可以扫描一张已盖章的邮票,读出隐藏的信息,并在液晶屏上显示一串字符。有了这两个神奇的东西,每个人都可以在不暴露真实身份的情况下进行交易,而封印中隐藏的那一串字符,就是这个家族的代号。下面将详细介绍如何巧妙地使用机密印章和印章扫描仪进行交易。建立虚拟矿工组织(挖矿组)接下来,中本聪从全村招募虚拟矿工。招聘要求如下:矿工以组为单位,组可以是单户,也可以是几户的组合。为了不影响矿工对货币的正常使用,矿工们每天都会花一定的时间从事比特币“挖矿”活动,但与淘金不同的是,虚拟矿工不需要携带工具下地作业,而且可以在家完成作业。矿工有可能在挖矿活动中付出的努力越多,获得报酬的可能性就越大矿工组织分为7个团体。初始账本(创世区块)建立后,中本聪宣布,首先,根据二狗子手中的账本,按照账本记录的余额,将抵押的黄金全部归还给每个村民,然后账簿就会被彻底销毁。接着,中本聪拿出一本新的账本,在账本的第一页记录了一些交易记录。尤其是,这些记录的付款人一栏都是“系统”,收款人是每个印章对应的隐藏字符,代表初始时刻。系统默认给每户分配一定数量的比特币,但是??数量很少,只有几家,甚至有些倒霉的村户也没有拿到比特币。随后中本聪表示,由于目前市场上的比特币很少,大家可以回到黄金作为货币的时代。由于我不是村长,我无权强制所有人承认比特币。每个人都可以自己决定。不接受比特币。但是随着比特币的流通和矿工的活跃,比特币会逐渐增加。支付和交易做了这么多准备工作,终于到了重点。下面说说在这样的系统下如何完成支付。以老张付给老李10个比特币为例。为了让付款人在交易单上签字支付10个比特币,老张首先需要向老李要标识串,比如“ABCDEFG”,而老张也有标识串比如“HIJKLMN”,然后老张写了一张表格,内容是“HILKLMN支付10个比特币给ABCDEFG”,然后用自己的保密印章改了一章,把这张表格交给老李。另外,为了便于追溯资金来源,还需要在清单中注明资金来源记录在哪一页。比如这个列表中,老张的10个比特币来自系统在建立账本时的赠送,记录在账本的第一页。收款人确认单据的签署人老李在拿到单据后需要确认单据确实是“HIJKLMN”(即老张)本人的签名。这并不难。因为表格上肯定有保密印章,所以老李拿出印章扫描仪扫描了印章。如果液晶屏上显示的字符与付款人的字符一致(此处为“HIJKLMN”),则可以确认表格确实是付款人的签名。这是因为根据保密印章的机制,其他人无法伪造印章,任何人扫描印章都可以确认名单的付款人是否与盖章的人相同。收款人确认付款人余额的系统仍然存在很大问题。通过保密印章,收款人虽然可以确认付款人确实在表格上签字,但无法确认付款人是否有足够的余额支付。在之前的中央虚拟货币系统中,二狗子负责检查付款人的余额,并通知收款人交易是否有效。现在二狗子开通了,谁来负责记账,确认每笔交易的有效性?之前说过,中本聪设计的系统是一个分布式货币系统,不依赖任何一个中心化的人,所以不会有一个或几个人来负责这件事,最终还是由上面提到的矿工来承担。工作组织。老张、老李和村里其他任何使用比特币进行交易的村民,都是靠矿工组织的劳动来完成交易的。矿工的工作矿工的工作是整个系统的核心,也是复杂度最高的地方。下面逐步介绍矿工的工作内容和目的。工欲善其事,工欲善其事,必先利其器。比特币矿工虽然不需要铁棍、铲子、探照灯等工具,但也有一些必备的东西。初始分类帐。每组先复印一份初始账簿。初始账本只有一页,记录的是系统给出的第一张空账本纸。每组有若干账本纸,每页只有账本结构,没有填写内容,具体内容的书写规则后面会讲到。下面是一个空的账本纸,后面代码生成器(哈希函数)会讲到各个字段的含义。中本聪给矿工组织的各个小组分发了若干代码生成器。这件事太神奇了。将一张记有账本内容的账本纸放入机器,机器会在账本纸的“票号”中写入代码。栏目自动打印一串由“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分支作为当前主干,并基于该分支进行后续工作。从局部来看,虽然某个时刻各个组的会计骨干可能不一致,但大方向是一致的,那些因异步而偶尔产生的小分支会很快被历史淹没。矿组有人造假账怎么办对于这个问题,中本聪表示,只要矿组的大部分人都是诚实的,系统就是可靠的,他会从几个方面来回答这个问题。首先,基于保密印章机制,任何人都不能伪造他人身份进行支付,因为代码生成器在打印代码时会检查所有交易单的保密印章,如果印章与付款人不一致,他们将拒绝打印。而且,诚实的矿工不会承认非法交易(例如某笔交易的付款人余额不足)。所以只有一种可能的攻击行为,即收款人确认收款后,从另一家分行创建另一笔交易订单,取消之前的支付,将同样的钱再次支付给另一个人(所谓的双花问题).下面也用一个例子来说明这个问题。首先假设有一个拥有10个比特币的攻击者,他打算同时将钱支付给两个受害者A和B,并且都被承认。第一步,攻击者准备从受害者A手中购买10个比特币的黄金,他给受害者A签了交易单,将10个比特币转给受害者A。第二步,在最新的账本上确认交易页面并由各种挖矿团队宣布。受害者A看到公告,确认比特币已经到账,并给了攻击者相当于10个比特币的黄金。第三步,攻击者找到账本,从包含刚才交易的账本页的上一页做一个分支,生成比上一个分支更多的账单页。由于刚才攻击者创建的分支变成了主分支,而包含受害者A获得的钱的分支变成了副分支,所以矿工组织不再认可刚才的转账,受害者获得的10个比特币A取消。向上。第四步,攻击者可以再次签署交易,并向受害者B支付等量的钱,受害者B在确认钱到账后向攻击者支付等值的黄金。至此,攻击者两次花费10个比特币从两名受害者手中购买了等量的黄金。攻击者也可以做同样的事情,取消与受害人B的转账,并向其他人支付相同数量的钱......关于这种攻击,中本聪给出的解决方案是建议收款人不要发帖公告立即确认交易完成,但要稍等片刻,等待各挖矿团队再发6个确认账户,且之前的账本没有注销,才能确认钱到账。中本聪解释说,设置这些变态的编号规则就是为了抵御这种情况。综上所述,想要生成有效的账本页并不是那么简单,需要大量人力反复尝试不同的幸运数字,过程完全靠运气。如果一个账本页面包含你收到钱的确认信息,并且它持续了6个以上,攻击者很难在落后6页的情况下从另一个分支赶上当前的master分支,除非攻击者有一个大量人力,超过所有其他诚实矿工的总和。而且,如果攻击者有这么多人手,与其花那么大的力气来进行这种攻击,还不如好好挖矿,获取更多的收益。这样可以防止从动机上形成攻击。比特币会继续涨,不会造成严重的通货膨胀吗?中本聪说,我也想到了这个。前面忘了说了,我给矿工组织的操作规程手册上会说明,在我们的协议开始的时候,每产生一页账本,本组奖励50个比特币。以后账本每增加21000页,奖励减半。例如,当达到21万页后,每生成一个账本奖励25个比特币;42万页后,每生成一页奖励12.5个比特币,以此类推。当账本达到693万页时,新生成的账本页数将没有奖励。此时比特币的总量约为21,000,000,这是比特币的总量,所以不会无限增加。如果没有奖励,就没有人会成为矿工。不是说没有人会帮忙确认交易吗?届时,矿工的收入将从挖矿收入变为手续费。比如你转账的时候,你可以指定其中的1%作为手续费支付给生成账户页面的团队,每个团队会选择手续费高的交易单进行优先确认。如果矿工越来越多,比特币的生成速度会不会变快?中本聪解释说,虽然可以随意加入和退出矿工组织,导致矿工数量发生变化,但每个矿工也会得到一个代码生成器,但我在代码生成器中加入了控制机制,而当前工作的代码生成器越多,每台机器的效率越低,保证新书页的生成率不变。虽然每个人的代号都是匿名的,但是如果泄露了某个人的代号,账本公开了,那岂不是他的所有账户都被查出来了?比如你想和某人交易,你必须得到他的代码才能填写交易表格。因为收款人一栏需要填写那个人的代号。不过,中本聪表示,可以提供无限的保密印章,建议每笔交易使用不同的保密印章,这样就无法通过查账簿查到同一个人的所有账户。问答结束。说明本文用通俗的比喻解释了比特币的运行机制。有几点需要说明一下:为了便于理解,我做了很多简化,所以一些机制细节可能和实际的比特币不完全一样。但总体思路和关键原则是相同的。由于计算机世界中的很多东西(比如公钥系统、网络传输)在现实世界中并没有特别好的对等物,所以故事中难免会出现一些生硬不合理的细节。本文描述了比特币网络本身的技术原理和运行机制。当比特币交易在Mtgox等交易市场进行时,市场充当中间代理,并不遵循上述机制。参考Bitcoin:APeer-to-PeerElectronicCashSystemhttps://bitcoin.it通俗易懂的比特币工作机制详解||版权声明:本文为博主杜金洋原创文章,转载请注明出处。
