(本文开始撰写于2022年8月)
写在开头
在决定开始探索web3领域后,发现市面上信息、学习资料非常多,文字音频视频应有尽有。信息如此之多以至于“从哪里下手”成了一个问题。在日常生活中我们研究亚马逊怎么发展壮大的、特斯拉股价怎么一路飙升的,这种从历史寻找线索及归因的习惯让我决定从较早期的比特币Bitcoin开始学起。
在学习白皮书的过程中我遇到了很多加密货币领域必用的名词,想要搞懂白皮书在讲什么就需要将未知名词一个个攻克理解,这一部分确实比较耗时(youtube是很好的学习资源)。但当我结束这部分学习再去阅读其他web3领域文章时,我竟然可以很快能理解文章在讲什么,遇到新的名词也能很快get。所以我也非常建议在阅读这篇文章的你(默认读到这篇文章的是零基础)也可以尝试通过逐层翻译理解来打基础,加快对此领域基础知识的掌握。
我发布的初衷
比特币白皮书问世是2003年,至今已经有无数人翻译、整理自己的想法,youtube也有无数动画、大白话视频来告诉你比特币到底是什么东西。而我决定自己从头开始的原因是:**系统梳理学习过程,并用输出倒逼输入。**费曼学习法中讲“如果你不能清楚地讲出来并让别人理解,那意味着你并没有搞懂”,所以想通过输出的方式更好地吸收,也方便复习。
学习前我对区块链、金融行业一无所知,平时刷刷微博公众号看完就过,基本没什么概念。那么我遇到的问题会是大多数初学者遇到的问题,整理出来更适用于像我一样的零基础,所以想整理出来。同时也分享一些我的获取信息途径,给无从下手的小白一些参考。
我的背景
目前在互联网公司工作,日常会用到数据库语言SQL,不会其他编程语言;
没有专业金融背景,在货币、市场关系方面没有学术知识储备;
在阅读学习《比特币白皮书 Bitcoin Whitepaper》之前没有学习过任何去中心化领域的知识,零基础开始学习。
文章的结构
按《比特币白皮书》的章节进行分章,每章内容包含:理解前需要储备的名词概念、翻译、扩展阅读,同时会附上原文及参考资料。
本文章获取信息的途径与使用的工具
《比特币白皮书 Bitcoin Whitepaper》英文版
《How to DeFi》中文版:理解去中心化相关内容,业内很经典
Youtube/B站视频:任何不知道什么意思的概念,只需要搜索“What is xxx”、“How to xxx”,有很多动画视频可以清晰讲述
翻译软件:不理解的地方就翻译一下,有道词典有划词功能,随时划随时理解(可以初步翻译,想要详细理解还是需要结合专业术语及其语境)
注:所有文件及网页链接我都附在相关章节下,更新完毕后再汇总一次,方便大家自行获取。
其他web3领域信息源
web3Q、王建硕大白话系列播客节目、关注的公众号等)
目前互联网上的交易几乎完全依赖金融机构作为可信任第三方来进行电子支付。虽然该运行机制适用于大多数交易,但因为它需要保证“诚信交易”,所以有其带来的固有弱点。在此基础上没有任一交易是绝对不可逆的,因为金融机构无法避免调解纠纷(纠纷出现时就需要回溯以及取消交易,所以任何交易都需要留痕并且具备可取消的条件)。
第三方的参与具有以下几点局限性:1) 增加了交易成本;2) 限制了实际交易规模最小化的边界;3) 切断了小规模偶然交易的可能性;4) 因为无法避免需要调解纠纷的交易,需要保留交易可逆的能力。而真正需要可逆的交易占比非常小,为无需追回的大部分交易保留可逆追回的能力带来额外的巨大的成本。
交易存在撤销的可能性,所以需要对交易双方知根知底。因此中央银行必须提防着用户,要求他们提供更多的、非必要的个人信息。由于出错是不可避免的,所以存在一定程度的容错率,也就表示一定程度的欺诈行为是被允许发生的。在现实生活中进行线下交易时,这些第三方成本与非必要支出可以被避免,但对于线上交易来说,【无第三方监管下进行交易】的线上交易途径是不存在的,额外的成本也变得必然。
我们需要的是基于加密认证(私钥、密码学原理、cryptographic proof)的电子支付系统,来支持任何自愿发生的点对点直接交易,而不是基于需要第三方监管平台介入的信任机制。不可逆转的交易行为可以保护卖家不受欺诈,同时具有流程机制的托管系统(routine escrow mechanisms) 可以保障买方的利益。(基于密码学的交易方式可以安全、有效、低成本的支持对双方点对点直接交易,同时对需要托管来进行交易的用户来说,基于密码学的电子支付系统也可以实现,而不需要基于信任与第三方介入来监管)
在这份论文中,我们提供了解决Double-Spending的途径:使用点对点分布式时间戳服务器按时间顺序生成交易记录的加密认证的数字证明(computational proof)。只要诚实节点所控制的CPU计算能力总和大于任何攻击者节点的计算能力总和,这个交易系统就能保持绝对安全。
从简介部分就可以看出,中本聪想要解决的问题主要是关于电子交易:如何在交易双方间实现点对点交易,而不需要第三方介入。
Q1: 首先需要理解“点对点”与“第三方介入”都是什么意思:
**点对点:**比如线下交易,我卖给你一杯牛奶,你把现金直接交付于我,这就叫做点对点交易,交易涉及的人员就是我和你,没有第三方介入。
**第三方介入的电子交易:**而现在我们都是通过微信、支付宝、电子银行进行支付与交易。这个过程就是一个第三方介入的交易过程:例如我扫了微信付款二维码然后进行付款,在输入完交易密码后这笔交易的申请会传送到微信的金融服务中心,金融服务中心会优先查看我的微信零钱或者支付使用的银行卡是否有充足的金额,如果有就把款项划转到收款方账户上,如果余额不足以支付则会取消交易并告知我。
Q2: 为什么中本聪希望电子交易变为点对点,而不是维持第三方的形式?
第三方监管增加了交易成本及收集额外个人信息:我们日常在进行任何电子交易时,为了保障电子交易中双方的可靠性,参与交易的人都需要进行身份认证。为了证明我们是有能力支付并且诚信交易,第三方监管机构几乎掌握着我们所有的个人信息。一方面我们几乎没什么个人隐私了,另一方面光是管理、存储这些大量的信息,就会是很大的成本。
限制了实际交易规模最小化的边界:转账这一过程的流程是固定的,所需要的成本也是有最小限度的。即使转账0.01元也是需要走完一整套流程,所需要的交易手续费与有最小值。这就在一定程度上对交易金额的量级有了限制。
额外的资源占用:由于电子交易无法避免的会有需要调解纠纷的交易,所以需要保留交易可逆的能力。而真正需要可逆的交易占比非常小,为无需追回的大部分交易保留可逆追回的能力带来额外的巨大的成本。举个例子:假设淘宝一天的订单量是100万单,其中只有0.01%也就是100个订单是需要处理纠纷的订单,而由于无法预先知道这0.01%会是哪些订单,淘宝需要将所有的100万单的细节信息都存储下来,也就是说即使纠纷只占0.01%,而这一机制所耗费的成本是需要记录100%的账单信息。
私人信息泄漏风险:而隐私和不可逆性是联系在一起的:因为可能存在欺诈、违约等情况需要取消交易,所以需要记录所有人的信息来保证交易需要取消时能顺利进行。如果支付真的是不可逆转的,那交易是可以在不泄露任何私人信息的情况下发生的。
Q3: 现有的电子交易采用第三方介入的方式而不是点对点的方式,则必然是因为第三方介入有着不可替代的作用。而中本聪的提议将如何在点对点交易中实现这些作用?
第三方介入的电子交易最大的作用是防止双重支付(double-spending),即同一笔钱同时参与了两笔交易。银行可以有效的防止我账户里的100元同时转账给两个人,保障金额的总额是不变的,只有账户上的划转。
本报告提供的解决方法:一枚电子货币上记录着先前发生过的所有交易记录。在当此交易被确认后所有信息会以编码的形式补入该货币上已有的信息链条的末端,用来证明此次交易的存在。这样避免了同一货币在同一时刻参与多笔交易,而且一旦写入就无法修改,保证了一枚电子货币不会同时被多方所有。买方可以通过电子货币中编码信息的确认来检验自己成功接受了该电子货币,证明在当前时刻他是该货币的末端所有者。
Q4: 交易、区块、区块链之间的关系?
Q5: 为什么设定这种规则?
这种按顺序的交易记录,可以有效防治双重支付:对于一枚coin来说,同一时刻只能参与一笔交易。因为每笔成交的交易都会被记录下来,当一枚coin交易成功时该coin的信息就会补上该交易信息及成交时间。只要查看正要使用的coin中的交易历史记录,就可以保证每笔历史交易都是交易时刻唯一的交易。
安全性高,不会有被盗或hack的风险:如果想把他人交易使用的coin据为己有,就需要篡改已发生交易的成交信息。由于区块链是单一的一条链状,想要篡改某一交易则须连同该交易之后的所有区块信息。在实行篡改的同时又会不断产生新的交易,也就是说想要全改就需要保证篡改信息的速度高于新交易的速度,要满足这个条件所需要的CPU计算力与电力的成本是巨大的。或者说,有这种高超的能力及成本付出能力,不如投入挖矿,以正当的形式获取更大的利益。(此部分详细内容可在【6.奖励】中阅读)
我们定义,一枚电子货币是多个数字签名形成的链:一枚电子货币上记录着先前发生过的所有交易记录。在进行一次货币转移时需要的元素有:该货币先前已发生的所有历史交易记录、收款方的收款地址、汇款方的转账确认。汇款方需要确认一串【该电子货币所有历史交易记录+收款方的收货地址】的随机散列结果,确认后的结果会以编码的形式补入该货币上已有的信息链条的末端,用来证明此次交易的存在。这样避免了同一货币在同一时刻参与多笔交易,而且一旦写入就无法修改,保证了一枚电子货币不会同时被多方所有。买方可以通过电子货币中编码信息的确认来检验自己成功接受了该电子货币,证明在当前时刻他是该货币的末端所有者。
该过程的问题在于收款人无法验证之前的某个所有者是否用这枚货币双重支付。通常的解决方案是引入一个可信任的中央权威机构或造币厂来检验每一笔交易,防止双重支付。每个交易完成时货币必须回到铸币厂重铸再发行到收款人手中,只有直接从铸币厂发行的货币才算正品。这个解决方案的局限性在于每笔交易都必须通过铸币厂,相当于再次引入了第三方角色。
对于单次交易来说,我们需要解决的问题是:让收款人知道卖方没有在此次交易之前签署其他交易。为了达到此目的,一枚货币在进行交易的过程中签署最早的那笔是算数的,其余的都不作数。所以确认某货币的一次交易是否算数的唯一方法是细数当下该货币参与的所有交易,并按时间顺序确认最终结果(即同一枚货币同时参与两笔交易,哪一笔的成功支付时间更早,就判定哪一笔交易是算数的)。在铸造厂这一形式中,铸造厂可以获取到所有提交的交易并判定最早成交的。而在没有第三方参与的情况下达成目的,就需要使所有提交的交易公开化:通过公开信息确定交易提交的时间顺序,使交易参与者就最终哪一笔为成交交易达成一致,即系统生成一条公开的、公认的交易序列。收款人验收交易时只需要核实链上其他大部分节点确认“该次交易是该货币在当下交易过程中首个提交的”这一事实即可。
这一章节内容很多,有很多概念需要详细解读。要理解交易的原理,就需要先了解三个概念。
公钥加密系统(public key cryptography):https://zh.wikipedia.org/wiki/公开密钥加密
是密码学的一种算法,它需要两个密钥:公开密钥——用于加密,私有密钥——用于解密。以银行账户举例,你的卡号类似于公钥,它代表你的银行账户,任何人可以通过这个公钥来给你汇款,但不能通过它知道你有多少钱或从你的账户提取现金。银行卡的密码是私钥,只有你知道并且可以进行转账等操作。因为它加密与解密并不是同一个密钥,所以它又被称作“非对称加密系统(Asymmetric cryptography)”。
在任何涉及支付或安全浏览网页的加密场景中,每个用户都有两个密钥:一个是保密的私钥,另一个是众所周知的公钥。公钥是一个标识符,就像邮政信箱或银行账号一样。您可以使用它向特定用户发送信息。私钥就像打开邮政信箱的钥匙或允许进入银行账户的秘密密码。
别人可以知道你的公钥,但不能通过公钥推测出私钥(就像不能通过银行卡号推出银行卡密码)。此外,你可以使用“数字签名”来进行操作,而不需要提供你的私钥。
**数字签名(Digital signature):**是只能通过你的私钥生成的一串代码,它可以和私钥一样保证这边交易是你本人操作的,同时你不用真的使用私钥从而降低了泄露的风险。目前我们常收到的验证码就与数字签名的功能很类似:只有你本人会收到,输入后证明确实是你在操作。
散列(Hash):https://www.youtube.com/watch?v=2BldESGZKB8
随机散列可以讲任何信息转化为64位的代码。转化前的原文叫做input,转化后的代码叫做哈希值(Hash Value),中间这个加工的过程就叫做随机散列(Hash function)。
随机散列特点:
a. 无论原文信息长短,最终的代码都会是固定的长度(比特币所使用的SHA-256生成代码固定长度为256字节);
b. 无论两条原文是否高度相似,最终的代码都将随机生成、无任何相关性;
c. 不可逆,不能通过代码倒推出原文(就像不能通过数字签名倒推出私钥)
理解以上概念后回到中本聪白皮书的交易方式。以经典的Alice与Bob为例:如果Alice想要将一枚硬币转移给Bob,她使用她的私钥生成数字签名来确认一段信息,这段信息包含着两个内容:表示该硬币所有历史交易记录的随机散列代码、Bob(接收方)的公钥。将硬币从Alice转移到Bob的交易有三个部分:
a. 前一个交易的哈希值(Alice第一次获得硬币也是通过交易)
b. 硬币的去向(鲍勃的公钥)
c. 爱丽丝确认以上两条信息的数字签名(Alice的数字签名可以确认以上两条信息,就证明她确实是那枚硬币的前主人)。
对于解决“双重支付(double-spending)”问题,中本聪认为需要做两件事:
a. 所有交易都必须留下记录
b. 当同一枚coin同时涉及多笔交易时,成立最早的那一笔交易算数,其余的不算数。这种情况下需要有一个规则来判定哪一笔交易是最早的。
第一点通过上述链状的交易记录解决;第二点的规则详情见下一章节【时间戳服务器(Timestamp Server)】。