科普 | 比特币的提出动机是什么?能够解决什么问题?
文章有点长,但看完一定能让你明白比特币的三生三世,其中包括提出比特币的动机、能够解决什么问题、关键组件和设计方案在这篇文章中展现的淋漓尽致。
有一个村庄名叫叫“比特村”,他们的交易方式就是以物易物。为什么会是以物易物呢?而不是像我们一样直接用钱去买?
1、初始,以物易物的日子很满足
比特村与世隔绝,过着自给自足的生活,村民们没有进行过大规模的交易活动,只围绕着鸡鸭鹅兔等商品之间直接交换,而没有中间流通介质,也就是说没有货币流通。
2、实物货币应运而生
老张不想拎着重重的面粉再去换老李的羊了,他想用一个中间的流通介质代替面粉,直接去老李家买羊。要不怎么说社会的发展都是由“懒人”推动的,经过大家共同商议决定分割一些稀有的金属或者贝壳来充当和货物等值的流通介质,这个过程需要细分,例如,1g黄金等于1袋面粉。比特村就此进入了实物货币时代。
3、进一步发展为符号货币
好景不长,金属磨损过于严重、丢失或故意囤积而导致总量损耗严重的情况,起初10g的黄金经过100次交易以后,本来能买10袋面粉,现在只能买9袋,但中间的这个损失却不知道由谁来承担。
这个时候村长提出来“纸质黄金”,由村里多位德高望重的人集体在纸上写上10g黄金,那这张纸就能代表10g黄金,而且造假的难度很大,不会出现通货膨胀,大家再次达成共识。
如果磨损严重大家就可以找到村长一干人等重新再写一张,之前的作废。此时,比特村进入了符号货币(纸币)时代。而老村长就承担了政府和银行的角色。
4、中央系统虚拟货币
日子没过几年老村长操劳过度去世了,由儿子二狗子担任新一任村长。年轻人总有很多新想法,他将村民的纸币全部收上去,如果有人要进行交易就要经过他的记账,大家的通识再次达成。
由二狗子担任中间记账者的角色,例如老张要拿1克金子向老李换1只羊,他俩需要一起给二狗子打电话,说明要将老张的1克金子划归老李,二狗子拿出账本,看看老张名下是否有1克金子,如果有就在老张的名下减掉1克,在老李的名下加上1克,此时老李在电话中听到二狗子确认转账完成,就可以放心让老张把羊牵走了。
此时比特村进入了中央系统虚拟货币时代。每个村民都不需要用实物支付,支付过程变成了二狗子维护账本上数字的变更。
5、分布式虚拟货币
二狗子开始有野心了,他开始觊觎村民账本上的金子,二狗子私下将老张账上的10g金子划给了自己。这个账本是可以被村民查阅的,老张发现自己账上少了10g金子,二狗子没想到老张竟然也有记账的习惯,老张用自己的账本和二狗子的账本进行对比发现了那笔未经老张审核的转账。
东窗事发!比特村炸开锅了。二狗子被大家弹劾下台。不过大家也发现了账本集中在一个人手里的弊端:
· 这个体系完全依赖于账本持有人的个人信用,如果这个人不守规矩,随意篡改账本,那么整个货币系统就会崩溃
· 如果这个人家里失火或者账本失窃,同样也会为整个体系带来毁灭性的打击
6、比特币的虚拟货币系统
由于问题出来的匆忙,村里早已乱成一锅粥,大家纷纷守好自己的钱袋子不再信任任何人。
这时候村里一个叫中本聪的宅男科学家走上了台,告诉大家他已经设计了一套不依赖任何中央处理人的叫比特币的虚拟货币系统,可以解决上述问题。然后他缓缓讲述了自己的方案。我们先来看看他的方案具体是什么样的?
一、基础设施搭建
1、账簿公开机制
中本聪首先说明,要对现有账簿进行如下改造:
1. 账簿上不再记载每户村民的余额,而只记载每一笔交易。即记载每一笔交易的付款人、收款人和付款金额。只要账簿的初始状态确定,每一笔交易记录可靠并有时间作为依据,当前每个人持有多少钱是可以推算出来的。
2. 账簿由私有改为公开,只要任何村民需要,都可以获得当前完整的账簿,账簿上记录了从账簿创建开始到当前所有的交易记录。
公开账簿让村民无法接受,为什么自己的资产数量要让别人知道,这样隐私不就完全暴露了吗?鉴于村民们的种种担心和疑虑,中本聪说了一个方法就是身份与签名机制(公钥加密系统)。
2、身份与签名机制(公钥加密系统)
在这套机制下,任何人都不使用真实身份交易,而是使用一个唯一的代号交易。
他展示了手里神奇的东西,说这两件东西分别叫保密印章和印章扫描器。后面他会给村里每一户发一个保密印章和一个印章扫描器。两者的作用如下:
· 保密印章可以在纸上盖一个章,每个印章盖出的章都隐含了一个全村唯一的一串字符,但是凭肉眼是看不出来的。也无法通过观察来制造出相应的印章。
· 印章扫描器可以扫描某个已经盖好的章,读出隐含的信息,并在液晶屏上显示出一串字符。
有了这两个神奇的东西,大家就可以在不暴露真实身份的情况下进行交易了,而印章隐含的那一串字符就是这户人家的代号。
4、成立虚拟矿工组织(挖矿群体)
中本聪面向全村招募虚拟矿工,招募要求如下:
· 矿工以组为单位,一组可以是单独的一户,也可以是几户联合为一组
· 成为矿工不影响正常使用货币
· 矿工每天要花费一定时间从事比特币“挖矿”活动,但是不同于挖金矿,虚拟矿工不需要拿着工具去野外作业,在家里就可以完成工作
· 矿工有一定可能性获得报酬,在挖矿活动中付出的越多,获得报酬的可能性越大
· 矿工可以随时退出,也可以随时加入新的矿工
很快,大约有1/5的村民加入比特币矿工组织,共分成了7个组。
二、建立初始账簿(创世块)
中本聪说,将二狗子手里的账簿当作依据,把抵押的所有黄金按账簿记录的余额退还给每位村民,然后彻底销毁这本账簿。
再用一本新账簿,在账簿的第一页上记录了一些交易记录,与之前不同的是,这些记录的付款人一栏全都是“系统”,而收款人分别是每个印章对应的隐含字符。
代表初始时刻,系统为每一户默认分配了一定数量比特币,但是数量非常少,都只有几枚,甚至有些不幸的村户没有获得比特币。
接着中本聪表示,由于当前市面上比特币非常少,大家可以先回到用黄金做货币的时代,由于我不是村长,我也没有权利强迫大家一定要承认比特币,大家可以自行决定要不要接受比特币。
不过随着比特币的流动和矿工的活动,比特币会慢慢多起来。
三、支付与交易
接下来我们以老张付给老李10个比特币为例来具体看一下这个交易的流程。
1、付款人签署交易单
为了支付10个比特币,老张首先要询问老李的标识字符串,例如是“ABCDEFG”,而老张也有一个标识字符串例如是“HIJKLMN”,转账的单子就出来了,内容为“HILKLMN支付10比特币给ABCDEFG”,老张用自己的保密印章盖章(保护自己的隐私),然后将这张单子交给老李。
为了便于追溯这笔钱的来源,还要在单子里注明这笔钱的来源记在哪一页。
例如老张的10比特币来自建立账簿时系统的赠送,记录在账簿第10页。
2、收款人确认单据签署人
老李拿到单子需要确认是否来自“HIJKLMN”这个人(也就是老张)签署的,这个并不困难。
因为单子上必须有保密章,老李拿出印章扫描器便可验证,如果液晶屏显示出的字符和付款人字符是一致的(这里是“HIJKLMN”),就可以确认单子确实是付款人签署的。
3、收款人确认付款人余额
之前的中央虚拟货币系统中,二狗子负责检查付款人的余额,并通知收款人交易是否有效,现在二狗子被开了,谁来负责记账和确认每笔交易的有效性呢?
这个系统是分布式货币系统,不依赖任何中央人物,因此不会有一个或少数几个人负责这件事,最终承担这份工作的是矿工组织。
四、矿工的工作
矿工的工作是整个系统的核心,也是最复杂性最高的地方。我们来看一下矿工的工作内容和目的。
1、矿工的工具
比特币矿工不用铁撅、铁锨和探照灯等工具,不过也要有一些必备的东西。
初始账簿。每个组首先自己复制一份初始账簿,初始账簿只有1页,记录了系统的第一次赠送
空账簿纸。每个小组有若干账簿纸,每一页纸上仅有账簿结构,没有填内容,具体如下:
编码生成器(哈希函数)。中本聪向矿工组织的每个组分发了若干编码生成器,这个东西可以将一页账簿填好内容的账簿纸放入这个机器,机器会在账簿纸的“本账单编号”一栏自动打印一串由“0”和“1”组成的编号,共256个。最神奇的是,编号生成器有如下功能:
· 生成的编号仅与账簿纸上填入的内容有关,与填写人、字体、填写时间等因素均无关
· 内容相同的账簿纸生成的编号总是相同,但是如果内容哪怕只改一个字符,编号就会面目全非
· 编码生成器在打印编码时需要将所有填入账簿纸的交易单放入,机器会扫描交易单和填入交易单的一致性,尤其是保密印章,如果发现保密印章和付款人不一致,会拒绝打印编码
· 将一张已打印的账簿纸放入,机器会判定编号是否是有效的机器打印,并且判定编号和内容是否一致,这个编号无法伪造
· 交易单收件箱。每个矿工小组需要在门口挂一个箱子用于收集交易单。
· 公告板。每个矿工小组同样需要一个公告板公示一些信息。
有了上面的工具,矿工组织就可以开工了!
2、收集交易单
中本聪规定,每笔交易的发起人,不但要将交易单给到收款人,还要同时复制若干份一模一样的交易单投递到每个矿工小组的收件箱里。
矿工小组的人定期到自己的收件箱里把收集到的交易单一并取出来。
3、填写账簿
此时小组的人拿出一张空的账簿纸,把这些交易填写到“交易清单”一栏,同时找到当前账簿最后一页,将最后一页的编号抄写到“上一张账单编号一栏”。
注意还有个“幸运数字”,可以随便填上一个数字,如12345。然后,将这样账簿纸放入编号生成器,打印好编号,一张账簿就算完成了。
如果你以为矿工的工作就这么简单,那就大错特错了,中本聪有个变态的规定:只有编号的前10个数均为0,这页账簿纸才算有效。
根据之前对编号生成器的描述,要修改编号,只能修改账簿纸的内容,而“交易清单”和“上一张账簿纸编号”是不能随便改的,那么只能改幸运数字了。
如果编号的每一个数字都是随机的,那么平均写1000多张幸运数字不同的纸才能获得一个有效的编号。
于是为了生成有效的账簿纸,小组里的矿工就不断抄写账簿纸,但每张纸的幸运数字都不同,然后不断的重复将纸放入编码器,如果生成的编号不符合规定,这张纸就算废了,重复这个过程直到生成一串有效的编号。
还记得之前说过矿工有报酬吧,这就是矿工的动力了。
中本聪规定:每一张账簿纸的交易清单第一条交易为“系统给这个小组支付50个比特币”。也就是说,如果你生成了一张有意义的账簿纸,并且被所有挖矿小组接受了,那么就意味着这条交易也被接受了,你的挖矿小组获得了50个比特币。
这就是这些矿工为什么要拼命干这看似无意义的事情的原因了。
例如下面是一个挖矿过程,这个小组的公共比特币帐号为“UVWXYZ”。
在幸运数字尝试到“533”时,系统生成了一页有效账簿。
4、确认账簿
当某挖矿小组幸运的生成了一张有意义的账簿,为了得到奖励,必须立刻请其它小组确认自己的工作。
前面说过,当前村里有7个挖矿组,所以这个小组必须将有效账簿纸誊抄6份快马加鞭送到其他6个小组请求确认。
中本聪规定,当某个小组接到其他小组送来的账簿纸时,必须立即停下手里的挖矿工作进行账簿确认。
需要确认的信息有三个:
1. 账簿的编号有效
只要将送来的账簿纸放入编码生成器进行验证,如果验证通过,则编号有效。
2. 账簿的前一页账簿有效
需要将账簿页上的“上一页账簿纸编号”和这个小组目前保存的有效账簿最后一页编号比对。
如果相同则确认;如果不同,需要顺着已有账簿向前比对,直到找到这个编号的页。
如果没有找到指定的“上一页账簿纸编号”对应的页,这个小组会将此页丢掉。不予确认。
3. 交易清单有效
就是要确认当前每笔交易的付款人有足够的余额支付这笔钱。
交易信息里包含这笔钱是如何来的,还包含了记录来源交易的账单编号。
例如,HIJKLMN要给ABCDEFG10个比特币,并注明了这10个比特币来自之前OPQRST支付给HIJKLMN的一笔交易。确认时首先要确认之前这笔交易是否存在,同时还要检查HIJKLMN在这之前没有将这10个比特币支付给别人。
这一切确认后,这笔交易有效性就被确认了。
如果完成了所有了上述验证并全部通过,这个小组就认可了上述账簿纸有效,然后将这张账簿纸并入小组的主账簿,舍弃目前正在进行的工作,后面的挖矿工作会基于这本更新后的主账本进行。
5、账簿确认反馈
对挖矿小组来说,当账簿纸送出去后,如果后面有收到其他小组送来的账簿纸,其“上一页账簿纸编号”是自己之前送出去的账簿纸,那么就表示他们的工作成功被其他小组认可了,因为已经有小组基于他们的账簿纸继续工作了。此时,可以认为已经得到了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页的情况下从另一个分支赶超当前主分支是非常困难的,除非攻击者拥有非常多的人力,超过其他所有诚实矿工的人力之和。
而且,如果攻击者有如此多人力,与其花这么大力气搞这种攻击,还不如做良民挖矿来的收益大。这就从动机上杜绝了攻击的形成。
第三个问题:比特币会一直增加下去,岂不是会严重通货膨胀?
中本聪说,我给矿工组织的操作细则手册会说明,刚开始我们协议每生成一页账簿,奖励小组50个比特币,后面,每当账簿增加21,000页,奖励就减半,例如当达到210,000页后,每生成一页账簿奖励25个比特币,420,000页后,每生成一页奖励12.5个,依次类推,等账簿达到6,930,000页后,新生成账簿页就没有奖励了。此时比特币全量约为21,000,000个,这就是比特币的总量,所以不会无限增加下去。
第四个问题:没有奖励后,就没人做矿工了,岂不是没人帮忙确认交易了?
矿工的收益会由挖矿所得变为收取手续费。例如,你在转账时可以指定其中1%作为手续费支付给生成账簿页的小组,各个小组会挑选手续费高的交易单优先确认。
第五个问题:矿工如果越来越多,比特币生成速度会变快吗?
不会。中本聪解释,虽然可以任意加入和退出矿工组织,导致矿工人数变化,每个矿工也会拿到一个编码生成器,不过我已经在编码生成器中加入了调控机制,当前工作的编码生成器越多,每个机器的效率就越低,保证新账簿页生成速率不变。
比特币的原理及运作机制就是这样,比特村也越来越富有了,中本聪的出现无疑不是比特村的福星。