大家好,我是芒果~~
区块链爱好者和探索者;
也是一个区块链创业公司的首席打杂师~~(坐标:上海)
-----------------------------------------------------------
借这篇文章,我想用自己肤浅的认知,以一种通俗易懂的方式,为大家360度立体全方位无死角地解析一下犹太链圈&基督币圈的《创世纪》—比特币白皮书。
(Ps:之后有时间也会相继推出以太坊,EOS等主流公链的白皮书分析。)
话不多说,直接开扒。
------------------------------------------------------------------
注:
【这里面的东西就是白皮书原文的英译汉内容】
---------------------------------------------------------
【标题:一种点对点的电子现金系统】
在标题中,中本聪本人就已经对比特币做出了超级精准的注释:
首先看名词,这是一个系统,维基百科中系统意为“由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。”
前置位定语是电子现金,也就是说,这是围绕比特币这个电子现金的多节点多功能自洽系统。
接着点对点,原文为peer-to-peer, 就是在说这套电子现金系统的应用场景。
合起来,我们得到了比特币就是在一个人和另一个人直接交易时使用的电子现金。比特币网络就是一个人和另一个人直接交易时使用的电子现金系统。
【原文作者:中本聪(Satoshi Nakamoto)】
注意!!!
这可能是一个人,也可能是一个暗搓搓的组织。
匿名,让人沉迷革命。
摘要略过,因为讲完摘要我就没啥好讲了。o(╥﹏╥)o ~~
【1. 简介:互联网上的贸易,几乎都需要借助金融机构作为可资信赖的第三方来处理电子支付信息。虽然这类系统在绝大多数情况下都运作良好,但是这类系统仍然内生性地受制于“基于信用的模式”(trust based model)的弱点。】
这里指出了比特币诞生的背景,隐约我们也猜到本聪大哥想怼的就是这些第三方——金融机构。
【我们无法实现完全不可逆的交易,因为金融机构总是不可避免地会出面协调争端。而金融中介的存在,也会增加交易的成本,并且限制了实际可行的最小交易规模,也限制了日常的小额支付交易。并且潜在的损失还在于,很多商品和服务本身是无法退货的,如果缺乏不可逆的支付手段,互联网的贸易就大大受限。因为有潜在的退款的可能,就需要交易双方拥有信任。而商家也必须提防自己的客户,因此会向客户索取完全不必要的个人信息。而实际的商业行为中,一定比例的欺诈性客户也被认为是不可避免的,相关损失视作销售费用处理。而在使用物理现金的情况下,这些销售费用和支付问题上的不确定性却是可以避免的,因为此时没有第三方信用中介的存在。】
这里实际上指出了一个最大的问题就是退款,其他的限制最小交易规模,索取不必要的个人信息,都是派生问题。我咋感觉中本聪一定做过某宝或者某迅卖家呢?对欺诈性客户恨到造出了一个逆天的比特币来治他们,然鹅,还是没治住。
为啥说没治呢?
因为如果需要不可逆的交易的话/也就是不退款,某宝只要把这个功能取消就好了。
Ok,我们想象一下,取消了退款或者说某宝的客服都下岗了,情况会是咋样的,如果是像小编这种不良人,一定会疯狂找人刷好评,把我多年积攒的假冒伪劣货都卖出去,反正买家付了钱就不能退款。这样一来,买家方的游戏体验极差,心态会崩,他们不接盘了,某宝怎么玩下去呢?
因此,退款的重点不在于交易的可不可逆,而在于货品的验真。诚然,直到现在,某宝也没有从根本上解决这个问题,因为第三方人工(理论上最准确的验货方式)验证成本实在是太高了!所以搞出了曲线救国的买家秀和宝贝好不好,问问买的人。虽然有一定比例的刷单和欺诈买家,但比起整个某宝的生存来说,简直是赚大了。
既然主要的问题没解决,自然它派生出来的交易成本高导致小额交易受限制和索取不必要的买家信息等当然也都没有解决。
看看现在比特币的转账费用吧(0.001个比特币,按一个比特币7w,一瓶可乐2.4元来算,将近30瓶可乐,相比之下,宇宙第一行的转账费率简直感人)。
我们小区的便利店老板和我抱怨生意难做,大家去他店都只买可乐,2.2成本的可乐卖2.4,就赚2毛钱(老板良心啊),如果使用比特币转账的话,我猜他可能怀疑人生。
另外,买家信息,当然也不能少。在网上买卖的话,只有付了钱再发货(保护卖家)或者收到货了再打钱(保护买家),如果没有第三方仲裁,没有退款,既然强制性只保护一方,另一方怎么就不能提些无理要求比如授权查看芝麻信用来保护自己呢?
当然,线下超市里买东西这种一手交钱一手交货的不在讨论范围内。好,既然比特币并没有解决他爸最想解决的问题,那它还有什么用呢。为啥一帮人嗷嗷叫要买它呢?
因为它无意间解决了黑产的大问题:支付。
黑产的支付有两个最关键的要求,一个是匿名,一个是可以验真。
还有一个锦上添很多花的要求是方便(转移)。
匿名
不用说了,没有精神正常的人会扯着嗓子(银行转账)说我这么多钱是贩毒卖军火来的。
验真
难道我把脑袋别在裤腰上干的买卖你还要拿假钞来骗我?
方便
Emmmm 虽然相比上述两条是值得牺牲的,但是我也不想提着一箱箱现金或者金条或者钻石(这当然是很轻的)行走在危险的交易路上,因为很容易被抢啊!
我敢说80%的黑帮片,盗贼片,间谍片都有这样的情节,好片请左,烂片请右。
而比特币,全方位地满足了需求。这是个万亿级的市场啊,多少vc寻寻觅觅的独角兽,出现了。
当然,有一句话叫做有心栽花花不开,无心插柳柳成荫,不说废话了,继续看比特币是怎么全方位满足需求的。
【所以,我们非常需要这样一种电子支付系统,它基于密码学原理而不基于信用,使得任何达成一致的双方,能够直接进行支付,从而不需要第三方中介的参与。杜绝回滚(reverse)支付交易的可能,这就可以保护特定的卖家免于欺诈;而对于想要保护买家的人来说,在此环境下设立通常的第三方担保机制也可谓轻松加愉快。在这篇论文中,我们(we)将提出一种通过点对点分布式的时间戳服务器来生成依照时间前后排列并加以记录的电子交易证明,从而解决双重支付问题。只要诚实的节点所控制的计算能力的总和,大于有合作关系的(cooperating)攻击者的计算能力的总和,该系统就是安全的。】
比特币的精华部分来了!!!
首先,要解决验真的问题,需要大家都承认这个东西是有价值的,可以来兑换dollar(别的法币当然也行)进而兑换高级享受的。
这里就引出了比特币系统如何达成共识的问题。
作为货币,本质是这个经济体系中信任的载体,那么如何保证大家都认可一个比特币的真实性和价值。在这个共识的基础上,还要解决双重支付问题,因为在互联网上,没有什么漏洞是钻不出来的,尤其双重支付这种空手套白狼的bug。
举个栗子:我有100元钱,把这100元给了小李当工资,又给了小张当工资,他们都拿到了100元工资,而我只花了100元,请问怎么会有这样的好事,双重支付就是这样的好事。
如何构建共识(如何生成,如何验证)?如何解决双重支付?系统的风险和解决办法是什么?
这些就是接下来的重点。
【2. 交易(Transactions)我们定义,一枚电子货币(an electronic coin)是这样的一串数字签名:每一位所有者通过对前一次交易和下一位拥有者的公钥(Public key) 签署一个随机散列的数字签名,并将这个签名附加在这枚电子货币的末尾,电子货币就发送给了下一位所有者。而收款人通过对签名进行检验,就能够验证该链条的所有者。】
所以,电子货币到底是啥呢?
记得比特币历史最高点的时候,我作为萌新去赶潮流,参加了一场区块链科技大会。入场时某某区块链研究所的摊位送了每个来咨询的朋友一枚金色的…比特币。当时我以一种看待黄金十万的心情如获至宝。而现在,emm,我准备拿它垫桌脚。
因为比特币,是一串数字签名(信息流)啊!每一枚比特币诞生的时候,只有它进账的那个账户地址/公钥,然后它就会扭动着,不断生长生长,差不多就是这样的
(双重支付会分叉和贪吃蛇撞到自己会死真的好像。。。)
简单来说,一个比特币就是记载了它自身经历的所有交易记录的一本加密账本。
下面举个很啰嗦的栗子:
我们想象我造了一所房子,比特币就是我的房产证。
首先,我在它上面写了我的名字。接下来,我要把它给我的女神王春花当聘礼。
在把房产证给春花之前,我在我的名字后面添加了她的名字,然后用左脚摁了一个脚趾印,因为别人不可能山寨出我独特的小分子信号。
春花拿到房产证之后,她可以看到在她的名字前有我的名字(说明这张房产证原来的主人是我)。在她验证了这个脚趾印的确是我拿左脚摁的之后,她就可以相信这张房产证(比特币)是我给她的,不是隔壁老王给她的。
【该过程的问题在于,收款人将难以检验,之前的某位所有者,是否对这枚电子货币进行了双重支付。通常的解决方案,就是引入信得过的第三方权威,或者类似于造币厂(mint)的机构,来对每一笔交易进行检验,以防止双重支付。在每一笔交易结束后,这枚电子货币就要被造币厂回收,而造币厂将发行一枚新的电子货币;而只有造币厂直接发行的电子货币,才算作有效,这样就能够防止双重支付。可是该解决方案的问题在于,整个货币系统的命运完全依赖于运作造币厂的公司,因为每一笔交易都要经过该造币厂的确认,而该造币厂就好比是一家银行。】
还是那个经典的问题, 爱我还是她。
女人的敏感让春花始终怀疑我在给她这张房产证的同时,也复制了一张同样的房产证,写上了张翠花的名字,用左脚摁印后给了张翠花。
如果春花怀疑我,我说什么她都不会信的。无奈,我只好找产权中心来证明它没有被复制过。产权中心嘛,大家也知道,排队人超多,下午四点就关门,周五下午还要培训,关键是接待态度还令人捉急。
可能我上辈子是混梁山泊的吧,面对种种官方刁难,我决定不忍了,邮件中本聪大神帮帮忙。
【我们需要收款人有某种方法,能够确保之前的所有者没有对更早发生的交易实施签名。从逻辑上看,为了达到目的,实际上我们需要关注的只是于本交易之前发生的交易,而不需要关注这笔交易发生之后是否会有双重支付的尝试。为了确保某一次交易是不存在的,那么唯一的方法就是获悉之前发生过的所有交易。在造币厂模型里面,造币厂获悉所有的交易,并且决定了交易完成的先后顺序。如果想要在电子系统中排除第三方中介机构,那么交易信息就应当被公开宣布(publicly announced)[1] ,我们需要整个系统内的所有参与者,都有唯一公认的历史交易序列。收款人需要确保在交易期间绝大多数的节点都认同该交易是首次出现。】
我们来梳理一下:
房产证的持有人:春花之前房产证的持有人
我春花臆想中的另一个持有人:张翠花(实际上是世界上所有剩下的雌性生物)
程序员还是脑子好啊,他一下就发现了这条猜疑链的突破核心,房产证这个东西也就是下次卖房子的时候有用,春花信不信不是关键,只要下一个可能买这栋房子的人信就可以了。但怎么知道下一个人是谁呢,我都不知道下一次卖房子是什么时候。
那就只好无差别通知,又称:在世界中心呼唤爱!
然后周围的人都听到了,大家一起帮我们记录了这历史性的一刻,顺便把这张房产证的变更记录编号后传上了微博公开永久版,所有人可见,有10万+转发的那种…春花满意了,因为她知道,不管我有没有拷贝,只有她手上的房产证,可以换人民币!女人有了安全感,她还管你到底爱她还是她还是她她她她她。
同时,我们总结一下,这一段说的是交易的存证方式,交易的存证不再通过一个权威的第三方去验真,保存;而是通过广播的形式,让所有人知道,让所有人形成共识来保存交易记录。正所谓,假话说了一万遍就是真话,当福音传遍世界,上帝自然存在。比特币的价值不是物质的证明,是意识的争夺。虚拟世界,数字货币,更像是唯心主义对于唯物主义权威的反扑。
【3. 时间戳服务器(Timestamp server)本解决方案首先提出一个“时间戳服务器”。时间戳服务器通过对以区块(block)形式存在的一组数据实施随机散列而加上时间戳,并将该随机散列进行广播,就像在新闻或世界性新闻组网络(Usenet)的发帖一样[2][3][4][5] 。显然,该时间戳能够证实特定数据必然于某特定时间是的确存在的,因为只有在该时刻存在了才能获取相应的随机散列值。每个时间戳应当将前一个时间戳纳入其随机散列值中,每一个随后的时间戳都对之前的一个时间戳进行增强(reinforcing),这样就形成了一个链条(Chain)。】
上文提到的微博公开永久版,我们俗称区块链。提到的时间戳服务器,俗称节点或者矿工。
这里我们有必要先了解下,这里的时间戳实际就是一个加密过的时间标记。
而时间戳服务器就是帮忙打标记的机器(和背后操控的人)。
至于这个时间戳为什么要加密呢?先卖个关子,反正他这里原文也没讲。
加完了时间以后,就可以上传到链条里了,怎么传呢,中本聪说了,就像在虎扑这种世界性新闻组网络里发帖一样。这里,我们看到,时间戳的作用就是为了证实特定数据必然在某特定时间是存在的。
因为假设(目前还没有被平行世界推翻)时间是一条无限向前延伸的射线(再再假设宇宙的确由一个奇点爆炸而来),那么这条时间线上包涵了0和所有的正实数时间点,并且不会有两个2018年3月21日星期三。
因此,既然时间戳服务器是给区块数据加上当前时间的,那么如果没有区块数据,则也不存在这个时间戳。而根据下面的描述,后面的时间戳会把前一个时间戳纳入其生成的随机散列的加密内容中,随后的每一个时间戳都会在前一个时间戳加密内容之上再次加密,形成一个层层加密的链条。
因此,无论中间的哪一个区块数据消失或被篡改,该时间戳的加密散列就会改。
【4. 工作量证明(Proof-of-Work)为了在点对点的基础上构建一组分散化的时间戳服务器,仅仅像报纸或世界性新闻网络组一样工作是不够的,我们还需要一个类似于亚当•柏克(Adam Back)提出的哈希现金(Hashcash)[6] 。】
上回书说到,时间戳服务器,俗称矿工。矿工的工作就是打包交易进区块,然后给区块盖上时间戳。如果你说这和富士康流水线上组装零件,放入包装,并贴上爱疯正品标差不多,也没毛病。
在整个交易流程中,你是广播交易信息的,矿工是记录交易信息并以此获得手续费和奖励金的。不管金额大小,都是比特币呀,矿工们都争先恐后地打包交易。同样的交易被N个矿工打包进了自己的区块里,大家都希望自己的区块能被选中传到主链上。
不像传统的报纸,权威自然能说话,也只有权威能说话。在这里,任何人都能说话,但是谁说的话能被发表是需要靠工作量(俗称绩效)来评选的。
这里提到的哈希现金就是工作量证明的代表产品,它是由亚当贝克开发出来,解决服务请求攻击和反对垃圾邮件的。
它的原理就是让用户在进行网站操作的时候付出一定的成本来杜绝恶意(通常是反复高频的)操作。最简单的当然莫过于交Dollar,但是,交dollar这么简单体现不出程序员的水平和互联网的先进性,另外用户体验会大大下降,你看看某企鹅的一系列游戏,改个名字还要花钱,不仅不高级还很败路人感。
所以,亚当贝克给出的方案是算数学题。
对,还是必须使用穷举法的那种数学题 。
【在进行随机散列运算时,工作量证明机制引入了对某一个特定值的扫描工作,比方说SHA-256下,随机散列值以一个或多个0开始。那么随着0的数目的上升, 找到这个解所需要的工作量将呈指数增长,而对结果进行检验则仅需要一次随机散列运算。】
专业术语来袭,大家不要怕。我们一个一个来看
随机散列运算:简单来说就是经过一系列令人窒息的操作,将原始的数据信息压缩成一个固定长度的比特串。这种随机函数最重要的特性就是确定性和单向性。确定性指的是有输入必有对应的输出,单向性指的是,通过输出的结果不能反推出输入的是什么。
这也是为什么大家都在吹区块链的可检验性和隐私保护性。
SHA-256是SHA-2(全称:Secure Hash Algorithm 2)的一种算法标准,由美国国家安全局研发。
SHA-256定义每个字符为32位的小块,然后经过N次加密转换,每8个小块的散列值合成256位的比特串,如果有超过一个以上的区块(8个小块合成1个区块),再把多个256位的比特串混合加密成一串比特串。
【我们在区块中补增一个随机数(Nonce),这个随机数要使得该给定区块的随机散列值出现了所需的那么多个0。我们通过反复尝试来找到这个随机数,直到找到为止,这样我们就构建了一个工作量证明机制。】
工作量证明=找到随机数=用暴力代值法解数学题。
该数学题的表述是,求一个N,hash(hash(区块时间戳)+N)有M个0不过该过程最坑也是最被人诟病的一点是,有且只能有一个状元,其他人都实力陪跑,被迫炮灰,俗称:浪费计算资源
【只要该CPU耗费的工作量能够满足该工作量证明机制,那么除非重新完成相当的,该区块的信息就不可更改。由于之后的区块是链接在该区块之后的,所以想要更改该区块中的信息,就还需要重新完成之后所有区块的全部工作量。】
问100个人区块链的特点是什么,100个人会和你提到不可篡改。
不可篡改是去中心化理念某种意义上是最重要的一种应用体现。
真的不可篡改吗?为什么不可篡改?这段话给出了答案。
不是完全不可篡改,只是篡改的成本和失败率都极高。上文提到每一个区块的时间戳散列值都包含上一个区块的,因此,如果要篡改第2000个区块中的交易信息,你需要重新把从第2000个开始往后的每个区块的数学难题都再算出解,才算完成了工作量证明。仅仅完成之前的工作量证明也是不够的,胜利的条件是你要超过别人,成为最长的链。最绝望的是,在你重新计算的时候,别人在原来的链上还在继续添加区块。
最最绝望的是:
人家的矿机计算解的速度
你的矿机计算解的速度:
【同时,该工作量证明机制还解决了在集体投票表决时,谁是大多数的问题。如果决定大多数的方式是基于IP地址的,一IP地址一票,那么如果有人拥有分配大量IP地址的权力,则该机制就被破坏了。而工作量证明机制的本质则是一CPU一票。“大多数”的决定表达为最长的链,因为最长的链包含了最大的工作量。如果大多数的CPU为诚实的节点控制,那么诚实的链条将以最快的速度延长,并超越其他的竞争链条。如果想要对业已出现的区块进行修改,攻击者必须重新完成该区块的工作量外加该区块之后所有区块的工作量,并最终赶上和超越诚实节点的工作量。我们将在后文证明,设想一个较慢的攻击者试图赶上随后的区块,那么其成功概率将呈指数化递减。】
这里的投票表决,就是站队。
中本聪考虑到了出现分叉的可能性,他给出的分叉解决办法就是让大家用算力去投票,你愿意承认哪条链就把你的算力贡献在哪条链上。最长的链包含了最多的算力,因此也代表了大多数人的意见。这句话的前半部分是正确的推导,但是后半部分却不是正确的推导了。因为算力(产量)等于资本+技术,不等于人数。
这是工业时代就已经成立的公式,到了信息时代,哪个行业的战争不是资本的战争。
IP可以买,CPU难道不能用钱买?
接下来,中本聪又给出了一个理工男的淳朴假设:如果大多数的CPU为诚实的节点控制。10000比特币换一个比萨饼的时候,我相信这个假设妥妥成立10000披萨饼换一个比特币的时候,鬼都不相信这个假设成立
比特大陆当然是吴老师说了算,BCH当然也是吴老师说了算。BTC,吴老师说了可能也算。
但是吴老师及其他大佬应该是不会轻易篡改交易数据的,除了信仰之外,他们还要靠加密货币升值来赚钱的。
【另一个问题是,硬件的运算速度在高速增长,而节点参与网络的程度则会有所起伏。为了解决这个问题,工作量证明的难度(the proof-of-work difficulty)将采用移动平均目标的方法来确定,即令难度指向令每小时生成区块的速度为某一个预定的平均数。如果区块生成的速度过快,那么难度就会提高。】
比特币网络的区块生成速度:每小时平均6个(每10分钟一个)。利用随机数的难度来调节算出随机数的速度也就是区块生成的速度。
其实这两段分析下来,我揣摩中本聪心里还是比较谨慎的,毕竟程序大神,不太愿意瞎吹,动不动估值千亿。所以不管是比特币的总量,区块生成速度,还是对于节点的假设他都是抱着一种比特币应该只会在小范围使用的认知去设计的。
不过也是因为不愿意瞎吹,才让后来的吴老师抓住了小辫子,以比特币区块生成速度太慢导致交易拥堵为由硬分出了一个比特币现金。
【5. 网络运行该网络的步骤如下:[size=1em]1) 新的交易向全网进行广播;[size=1em]2) 每一个节点都将收到的交易信息纳入一个区块中;[size=1em]3)】
每个节点都尝试在自己的区块中找到一个具有足够难度的工作量证明;[size=1em]4) 当一个节点找到了一个工作量证明,它就向全网进行广播;[size=1em]5) 当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性;[size=1em]6) 其他节点表示他们接受该区块,而表示接受的方法,则是在跟随该区块的末尾,制造新的区块以延长该链条,而将被接受区块的随机散列值视为先于新区快的随机散列值。
【节点始终都将最长的链条视为正确的链条,并持续工作和延长它。如果有两个节点同时广播不同版本的新区块,那么其他节点在接收到该区块的时间上将存在先后差别。当此情形,他们将在率先收到的区块基础上进行工作,但也会保留另外一个链条,以防后者变成最长的链条。该僵局(tie)的打破要等到下一个工作量证明被发现,而其中的一条链条被证实为是较长的一条,那么在另一条分支链条上工作的节点将转换阵营,开始在较长的链条上工作。】
这里中本聪提出了他认为的共识原则:大家都以最长的链(包含最多的交易信息和工作量)为准。如果出现超小概率的同时广播,则在下一个区块广播的时候,理论上会有时间差了,因为连续同时的概率是呈指数级降低的。
【所谓“新的交易要广播”,实际上不需要抵达全部的节点。只要交易信息能够抵达足够多的节点,那么他们将很快被整合进一个区块中。而区块的广播对被丢弃的信息是具有容错能力的。如果一个节点没有收到某特定区块,那么该节点将会发现自己缺失了某个区块,也就可以提出自己下载该区块的请求。】
这里提到了比特币网络的容错能力。大意就是,各位矿工同学,反正考点都在教科书上,上课跟不上进度没关系,回家看书查漏补缺也可以的。
【6.激励我们约定如此:每个区块的第一笔交易进行特殊化处理,该交易产生一枚由该区块创造者拥有的新的电子货币。这样就增加了节点支持该网络的激励,并在没有中央集权机构发行货币的情况下,提供了一种将电子货币分配到流通领域的一种方法。这种将一定数量新货币持续增添到货币系统中的方法,非常类似于耗费资源去挖掘金矿并将黄金注入到流通领域。此时,CPU的时间和电力消耗就是消耗的资源。】
激励这一节其实是本白皮书写的最平易近人的部分了,大家都能看懂。
这个简单的激励机制,俗称挖矿。
它的作用是保证在去中心化(没有收费的第三方给你服务)的情况下,维持这个网络的正常运行。
数字货币的设计者们都达成了共识,给钱(数字货币)。
但是万一比特币不值钱呢,还会有多少人来贡献?
很简单,设置发行上限,发行量指数递减。人性的弱点,先来的吃肉,后来的喝洗脚水,比营销号还会引爆大家的焦虑。
挖矿概念最早是由B-money(1999年的数字货币先驱)提出的,但很可惜,B-money没有应用到区块链的最长链共识,因而没有解决双重支付的问题。
别看中本聪虽然都是借鉴的前人的想法,他对于这些想法的融合以及升华真的是艺术级别的。
B-money当时想的挖矿是需要网络中的各个节点对于资源投入产出比(也就是算题挖矿一次得多少钱)投票达成共识。这显然是一个复杂且容易有恶意扰乱的方法。而中本聪的解决办法是我们之前提到的,预设每一次挖矿的奖励,然后调整问题难度来锚定一个平均的计算问题速度以抵消未来硬件快速发展的不公平。
【另外一个激励的来源则是交易费(transaction fees)。如果某笔交易的输出值小于输入值,那么差额就是交易费,该交易费将被增加到该区块的激励中。只要既定数量的电子货币已经进入流通,那么激励机制就可以逐渐转换为完全依靠交易费,那么本货币系统就能够免于通货膨胀。】
中本聪还是受到了自己时代的限制。难道只有通货膨胀才值得恐惧吗?
但!通货紧缩也是一个严重的问题,当货币比商品价格高的时候,货币的囤积现象会越发严重,恶性循环损害货币的流通,导致交易的萎靡,最终使得整个经济体没有动力去继续运行而死亡。所以说,抠死是真的可能的。
为了解决这个通货紧缩的问题,我个人目前想到有两种方向,
一个是有更多的类似比特币的数字货币进行自由互换(部分实现),
另一个是创造比特币的新侧链甚至是和其他链跨链通信连接(比特币的扩展协议不支持,跨链技术也正在发展)。
当然本质上这两种方法都是在迂回突破中本聪设立的比特币发行上限(俗称硬顶)。
【激励系统也有助于鼓励节点保持诚实。如果有一个贪婪的攻击者能够调集比所有诚实节点加起来还要多的CPU计算力,那么他就面临一个选择:要么将其用于诚实工作产生新的电子货币,或者将其用于进行二次支付攻击。那么他就会发现,按照规则行事、诚实工作是更有利可图的。因为该等规则使得他能够拥有更多的电子货币,而不是破坏这个系统使得其自身财富的有效性受损。】
这段话也非常简单,但是耐人寻味。
数字货币是网络世界的经济共同体,一损俱损,一荣俱荣,所以不要想着内部作弊,恶意攻击,被外面的韭菜看到了,人家还会进来接盘吗?拿比特币网络赖以生存的信任共识开玩笑,外面人都不敢接盘,还不是砸自己手里。
【7. 回收硬盘空间如果最近的交易已经被纳入了足够多的区块之中,那么就可以丢弃该交易之前的数据,以回收硬盘空间。为了同时确保不损害区块的随机散列值,交易信息被随机散列时,被构建成一种Merkle树(Merkle tree)[7] 的形态,使得只有根(root)被纳入了区块的随机散列值。通过将该树(tree)的分支拔除(stubbing)的方法,老区块就能被压缩。而内部的随机散列值是不必保存的。】
大家还记得之前在讲时间戳的时候,我们提到每一个区块都包含之前的一个区块信息。因此,实际上如果最新的区块是第100个,那么第一个区块的信息在这条链上就重复了100次。每个区块里都有,实在是太占地方了。又因为Merkle树数据储存形态追溯源头只需要部分交易信息。所以中本聪采用它来记录整条链上的交易信息并丢弃重复确认的交易信息。
下面的伪科普,大家就瞎看看吧。
Merkle树在以太坊的白皮书里会有比较详细的说明。这个merkle树的概念是在一个区块里面的,而不是一条链上的。各个交易就是叶子,最新交易会被随机散列值,两两的随机散列加起来形成上一层的枝干。枝干再两两相加向上推到最后,所有交易的随机散列值之和就是根节点。
【不含交易信息的区块头(Block header)大小仅有80字节。如果我们设定区块生成的速率为每10分钟一个,那么每一年产生的数据位4.2MB。(80 bytes * 6 * 24 * 365 = 4.2MB)。2008年,PC系统通常的内存容量为2GB,按照摩尔定律的预言,即使将全部的区块头存储于内存之中都不是问题。】
这个就是回收硬盘的预计结果:比特币网络的所有区块头小到一个PC电脑的内存就可以存放,这也符合中本聪的期待,普通人都可以参与比特币网络至少能验证并追溯网络中的全部交易信息。
【8. 简化的支付确认(Simplified Payment Verification)在不运行完整网络节点的情况下,也能够对支付进行检验。一个用户需要保留最长的工作量证明链条的区块头的拷贝,它可以不断向网络发起询问,直到它确信自己拥有最长的链条,并能够通过merkle的分支通向它被加上时间戳并纳入区块的那次交易。节点想要自行检验该交易的有效性原本是不可能的,但通过追溯到链条的某个位置,它就能看到某个节点曾经接受过它,并且于其后追加的区块也进一步证明全网曾经接受了它。】
每一个区块头由前一个区块头的随机散列值+难题的答案(随机散列值)+交易的merkle树根的随机散列值三者联合生成。因此验证自己的交易记录就是在拥有最新Mercle树根的情况下通过merkle的分支一层层向下推导出它被加上时间戳并纳入区块的那次交易。
【当此情形,只要诚实的节点控制了网络,检验机制就是可靠的。但是,当全网被一个计算力占优的攻击者攻击时,将变得较为脆弱。因为网络节点能够自行确认交易的有效性,只要攻击者能够持续地保持计算力优势,简化的机制会被攻击者焊接的(fabricated)交易欺骗。】
之前提到区块的竞争上链最重要的就是计算能力,计算最快的节点有可能持续产生新的上链区块,这种情况下,如果这个节点想将一些虚假的交易打包进自己的区块上传到链然后自己再去确认(在该区块后面继续产生区块)是很可能发生的。
【那么一个可行的策略就是,只要他们发现了一个无效的区块,就立刻发出警报,收到警报的用户将立刻开始下载被警告有问题的区块或交易的完整信息,以便对信息的不一致进行判定。对于日常会发生大量收付的商业机构,可能仍会希望运行他们自己的完整节点,以保持较大的独立完全性和检验的快速性。因此,我们设立了一个警报机制,当任意一个节点发现无效的区块时就可以发出警报,收到警报的所有节点即来下载验证该区块及其交易信息。只要发现问题的节点足够多,合起算力开始追赶是一定能超过那个作恶节点的算力的。】
但是中国有个故事说的好,一根筷子好折断,三根筷子不好折断。一个恶意节点好超越,一个恶意矿池呢?
只能寄希望于他们不会蠢到做杀鸡取卵的事情了。
最后一句话本来是对轻节点(一般只有必要的时候验证交易)和重节点(验证每一个交易)的注释,但现在看来,是给了现在的私有连和联盟链以启发。
很多人说私有链和联盟链没必要存在,一个公司内部有什么信用欺诈问题要解决的,还不是炒概念。
其实,内部欺诈不一定没有,伪造文件,作假帐,吃空饷啥的真不少。甚至有些在你看来没什么大不了的事,比如拿单位的复印机复印自己的身份证,严格来说,是属于一种梁上君子的行为。如果100人的公司,平均每个人每天打印一张,公司每年的损失也可能接近500元。
【9. 价值的组合与分割(Combining and Splitting Value)虽然可以单个单个地对电子货币进行处理,但是对于每一枚电子货币单独发起一次交易将是一种笨拙的办法。为了使得价值易于组合与分割,交易被设计为可以纳入多个输入和输出。一般而言是某次价值较大的前次交易构成的单一输入,或者由某几个价值较小的前次交易共同构成的并行输入,但是输出最多只有两个:一个用于支付,另一个用于找零(如有)。需要指出的是,当一笔交易依赖于之前的多笔交易时,这些交易又各自依赖于多笔交易,但这并不存在任何问题。因为这个工作机制并不需要展开检验之前发生的所有交易历史。】
这一段阐述了比特币的面值。比特币的最小单位是1亿分之一个比特币(聪),最大面值为2100万(发行总量),中间没有类似100,50的指定面额。尽管如此,还是非常类似现金的交易。当我支付现金的时候,我只能支付我身上之前从别人那里赚来的现金,而不能凭空造出现金,也不能凭空更改现金的面额。
举个例子,我去小卖部买3块钱的可爱多,我要么支付3个一元钱,要么支付一张5元钱再拿回2元钱找零。这三个一元钱是我之前坐公交换的零钱,这张五元是我妈给的零花钱。
比特币也是这样,你只能支付出去自己曾经收到过的比特币,如果你有收到5个比特币,1个比特币。那你支付5.5个比特币的情况下,就只能支付5个加1个,然后收获0.5个找零。
这里通过找零机制不断地零散化可作为输出的比特币,方便比特币流通的同时也保证了每一聪比特币的可追溯性。
【10. 隐私(Privacy)
传统的造币厂模型为交易的参与者提供了一定程度的隐私保护,因为试图向可信任的第三方索取交易信息是严格受限的。但是如果将交易信息向全网进行广播,就意味着这样的方法失效了。但是隐私依然可以得到保护:将公钥保持为匿名。公众得知的信息仅仅是有某个人将一定数量的货币发所给了另外一个人,但是难以将该交易同特定的人联系在一起,也就是说,公众难以确信,这些人究竟是谁。这同股票交易所发布的信息是类似的,股票交易发生的时间、交易量是记录在案且可供查询的,但是交易双方的身份信息却不予透露。作为额外的预防措施,使用者可以让每次交易都生成一个新的地址,以确保这些交易不被追溯到一个共同的所有者。但是由于并行输入的存在,一定程度上的追溯还是不可避免的,因为并行输入表明这些货币都属于同一个所有者。此时的风险在于,如果某个人的某一个公钥被确认属于他,那么就可以追溯出此人的其它很多交易。】
都说比特币匿名,可以用来洗钱,事实究竟是不是这样呢?
这段文字已经告诉我们了:要么天堂,要么地狱。
一个比特币账户只拥有两个东西,公钥和私钥。
私钥仅为自己保存,公钥是经常要给别人,是别人给你打币的地址。
私钥这个东西,因为只有自己保管,经常看到有人自己都忘了私钥白丢几百万的新闻,所以泄露的概率不大。
但是公钥就不同了,虽然说给公钥的时候不会告诉别人你是谁。但是由于上一节说的每聪比特币都可追溯其交易历史的原因。别人很有可能在区块浏览器上分析你公钥的交易行为推测出你是谁。甚至还有些特殊手法可以知道公钥对应的操作者。
因此建议大家多搞几个地址,资产不要放在同一个篮子里。
不要这样
要这样
11节是中本聪对于比特币双重支付攻击概率的推算,其讲解的也非常清晰,大家可以自行理解,我就不过多赘述了。
【11. 计算】
【设想如下场景:一个攻击者试图比诚实节点产生链条更快地制造替代性区块链。即便它达到了这一目的,但是整个系统也并非就此完全受制于攻击者的独断意志了,比方说凭空创造价值,或者掠夺本不属于攻击者的货币。这是因为节点将不会接受无效的交易,而诚实的节点永远不会接受一个包含了无效信息的区块。一个攻击者能做的,最多是更改他自己的交易信息,并试图拿回他刚刚付给别人的钱。
这里中本桑把攻击者的作恶行为局限到了双重支付。实在是对人性的充分判断。因为,凭空创造价值损害了所有人的利益,掠夺比特币又会导致大家人心慌慌,害怕下一个被掠夺的是自己,反而会团结起来制止作恶。只有双重支付,作恶的对象仅为那个收钱的节点,作恶的手法又比较隐蔽,成功的可能性较之前两者高。
诚实链条和攻击者链条之间的竞赛,可以用二叉树随机漫步(Binomial Random Walk)来描述。成功事件定义为诚实链条延长了一个区块,使其领先性+1,而失败事件则是攻击者的链条被延长了一个区块,使得差距-1。
攻击者成功填补某一既定差距的可能性,可以近似地看做赌徒破产问题(Gambler’s Ruin problem)。假定一个赌徒拥有无限的透支信用,然后开始进行潜在次数为无穷的赌博,试图填补上自己的亏空。那么我们可以计算他填补上亏空的概率,也就是该攻击者赶上诚实链条,如下所示[8] :
假定p>q,那么攻击成功的概率就因为区块数的增长而呈现指数化下降。由于概率是攻击者的敌人,如果他不能幸运且快速地获得成功,那么他获得成功的机会随着时间的流逝就变得愈发渺茫。那么我们考虑一个收款人需要等待多长时间,才能足够确信付款人已经难以更改交易了。我们假设付款人是一个支付攻击者,希望让收款人在一段时间内相信他已经付过款了,然后立即将支付的款项重新支付给自己。虽然收款人届时会发现这一点,但为时已晚。
收款人生成了新的一对密钥组合,然后只预留一个较短的时间将公钥发送给付款人。这将可以防止以下情况:付款人预先准备好一个区块链然后持续地对此区块进行运算,直到运气让他的区块链超越了诚实链条,方才立即执行支付。当此情形,只要交易一旦发出,攻击者就开始秘密地准备一条包含了该交易替代版本的平行链条。
这里再次提到了公钥随时变换的重要性,可以防止别人事先知道了你的公钥地址,在预备交易的过程中,紧锣密鼓地筹备自己的链以代替最长链来对这笔交易做手脚。
然后收款人将等待交易出现在首个区块中,然后在等到z个区块链接其后。此时,他仍然不能确切知道攻击者已经进展了多少个区块,但是假设诚实区块将耗费平均预期时间以产生一个区块,那么攻击者的潜在进展就是一个泊松分布,分布的期望值为:
当此情形,为了计算攻击者追赶上的概率,我们将攻击者取得进展区块数量的泊松分布的概率密度,乘以在该数量下攻击者依然能够追赶上的概率。
化为如下形式,避免对无限数列求和:
写为如下C语言代码:
#include double
AttackerSuccessProbability(double q, int z)
{
double p = 1.0 -
q;
double lambda =
z * (q / p);
double sum =
1.0;
int i, k;
for (k = 0; k
<= z; k++)
{
double poisson =
exp(-lambda);
for (i = 1; i
<= k; i++)
poisson *=
lambda / i;
sum -= poisson *
(1 - pow (q / p, z - k));
}
return sum;
}
对其进行运算,我们可以得到如下的概率结果,发现概率对z值呈指数下降。
当q=0.1时
z=0 P=1.0000000
z=1 P=0.2045873
z=2 P=0.0509779
z=3 P=0.0131722
z=4 P=0.0034552
z=5 P=0.0009137
z=6 P=0.0002428
z=7 P=0.0000647
z=8 P=0.0000173
z=9 P=0.0000046
z=10 P=0.0000012
当q=0.3时
z=0 P=1.0000000
z=5 P=0.1773523
z=10 P=0.0416605
z=15 P=0.0101008
z=20 P=0.0024804
z=25 P=0.0006132
z=30 P=0.0001522
z=35 P=0.0000379
z=40 P=0.0000095
z=45 P=0.0000024
z=50 P=0.0000006
求解令P<0.1%的z值:
为使P<0.001,则
q=0.10 z=5
q=0.15 z=8
q=0.20 z=11
q=0.25 z=15
q=0.30 z=24
q=0.35 z=41
q=0.40 z=89
q=0.45 z=340
12.结论
我们在此提出了一种不需要信用中介的电子支付系统。我们首先讨论了通常的电子货币的电子签名原理,虽然这种系统为所有权提供了强有力的控制,但是不足以防止双重支付。
为了解决这个问题,我们提出了一种采用工作量证明机制的点对点网络来记录交易的公开信息,只要诚实的节点能够控制绝大多数的CPU计算能力,就能使得攻击者事实上难以改变交易记录。该网络的强健之处在于它结构上的简洁性。节点之间的工作大部分是彼此独立的,只需要很少的协同。
每个节点都不需要明确自己的身份,由于交易信息的流动路径并无任何要求,所以只需要尽其最大努力传播即可。节点可以随时离开网络,而想重新加入网络也非常容易,因为只需要补充接收离开期间的工作量证明链条即可。
节点通过自己的CPU计算力进行投票,表决他们对有效区块的确认,他们不断延长有效的区块链来表达自己的确认,并拒绝在无效的区块之后延长区块以表示拒绝。本框架包含了一个P2P电子货币系统所需要的全部规则和激励措施。】
-
---------------------------------------------------------------------
OK,以上就是我对《比特币白皮书》的浅显理解。
由于笔者的认知有限,有些内容肯定还存在很多疏漏,还望大家多多包涵,也希望各位读者能不吝提出来,大家一起探讨和交流。
之后有时间,我也会继续写一些以太坊,EOS等主流公链的白皮书分析,希望能继续和大家来交流、学习。
好了,我是芒果,区块链爱好者和探索者,也是一个区块链创业公司的首席打杂师~~(坐标:上海)
我的微信号是:mangou1987
也希望志同道合的朋友前来骚扰~~
---------------------------------------------------------------
————本文由笔者原创,未经许可,严禁转载!谢谢。
网友评论