【精读比特币白皮书】比特币与手工记帐
本文由EOSUnion(eos.ren)优质内容计划赞助
史上最白解读
今天和大家一起学习的是《比特币白皮书》的第一、二、三节,我自己感觉这可以是历史上最直白、最浅显的解读了,因为我自己觉得比特币就是在完美在模拟我们手工记帐的过程,只不过这一切都换成了电子的方式,用代码的形式来进行而已。
简介
互联网上的贸易,几乎都需要借助金融机构作为可资信赖的第三方来处理电子支付信息。虽然这类系统在绝大多数情况下都运作良好,但是这类系统仍然内生性地受制于“基于信用的模式”(trust based model)的弱点。我们无法实现完全不可逆的交易,因为金融机构总是不可避免地会出面协调争端。而金融中介的存在,也会增加交易的成本,并且限制了实际可行的最小交易规模,也限制了日常的小额支付交易。并且潜在的损失还在于,很多商品和服务本身是无法退货的,如果缺乏不可逆的支付手段,互联网的贸易就大大受限。因为有潜在的退款的可能,就需要交易双方拥有信任。而商家也必须提防自己的客户,因此会向客户索取完全不必要的个人信息。而实际的商业行为中,一定比例的欺诈性客户也被认为是不可避免的,相关损失视作销售费用处理。而在使用物理现金的情况下,这些销售费用和支付问题上的不确定性却是可以避免的,因为此时没有第三方信用中介的存在。
所以,我们非常需要这样一种电子支付系统,它基于密码学原理而不基于信用,使得任何达成一致的双方,能够直接进行支付,从而不需要第三方中介的参与。杜绝回滚(reverse)支付交易的可能,这就可以保护特定的卖家免于欺诈;而对于想要保护买家的人来说,在此环境下设立通常的第三方担保机制也可谓轻松加愉快。在这篇论文中,我们(we)将提出一种通过点对点分布式的时间戳服务器来生成依照时间前后排列并加以记录的电子交易证明,从而解决双重支付问题。只要诚实的节点所控制的计算能力的总和,大于有合作关系的(cooperating)攻击者的计算能力的总和,该系统就是安全的。
简介简介,就是简单介绍,作为正文的第一部分,中本聪在这一部分对整个文章的内容进行简单介绍。那么他介绍了些什么呢?这部分有两个自然段,他分别提了现在存在的问题,以及他提出的解决方案。
传统互联网完成支付需要借助三方金融机构来处理,中本聪同学列举了以下特点:
- 受制于“基于信用的模式”
- 无法实现完全不可逆
- 增加交易成本,限制最小交易规模和小额交易
- 由于很多卖家的商品和服务无法退货,缺乏不可逆的支付导致了互联网贸易因此受限
- 交易双方因为信任问题,卖家会索取买家完全不必要的个人信息
针对看到的问题,中本聪认为新的交易系统应该有下面些特点:
1.基于密码学原理而不基于信用,买卖双方能够直接进行支付,从而不需要第三方中介的参与。
2.杜绝回滚(reverse)支付交易的可能。
要实现这些功能,需要哪些技术支撑呢?
1.通过点对点分布式的时间戳服务器来生成依照时间前后排列并加以记录的电子交易证明,从而解决双重支付问题。
2.只要诚实的节点所控制的计算能力的总和,大于有合作关系的(cooperating)攻击者的计算能力的总和。
由于这部分本身就是简单介绍,我们对后面要学习的内容有一个大致的了解就好了,具体的内容后面再慢慢讲。
交易
我们定义,一枚电子货币(an electronic coin)是这样的一串数字签名:每一位所有者通过对前一次交易和下一位拥有者的公钥(Public key) 签署一个随机散列的数字签名,并将这个签名附加在这枚电子货币的末尾,电子货币就发送给了下一位所有者。而收款人通过对签名进行检验,就能够验证该链条的所有者。
比特币交易.png
该过程的问题在于,收款人将难以检验,之前的某位所有者,是否对这枚电子货币进行了双重支付。通常的解决方案,就是引入信得过的第三方权威,或者类似于造币厂(mint)的机构,来对每一笔交易进行检验,以防止双重支付。在每一笔交易结束后,这枚电子货币就要被造币厂回收,而造币厂将发行一枚新的电子货币;而只有造币厂直接发行的电子货币,才算作有效,这样就能够防止双重支付。可是该解决方案的问题在于,整个货币系统的命运完全依赖于运作造币厂的公司,因为每一笔交易都要经过该造币厂的确认,而该造币厂就好比是一家银行。
我们需要收款人有某种方法,能够确保之前的所有者没有对更早发生的交易实施签名。从逻辑上看,为了达到目的,实际上我们需要关注的只是于本交易之前发生的交易,而不需要关注这笔交易发生之后是否会有双重支付的尝试。为了确保某一次交易是不存在的,那么唯一的方法就是获悉之前发生过的所有交易。在造币厂模型里面,造币厂获悉所有的交易,并且决定了交易完成的先后顺序。如果想要在电子系统中排除第三方中介机构,那么交易信息就应当被公开宣布(publicly announced)[1] ,我们需要整个系统内的所有参与者,都有唯一公认的历史交易序列。收款人需要确保在交易期间绝大多数的节点都认同该交易是首次出现。
在这一部分中本聪同学先是详细的说明了传统支付模式下的第三方权威如何实现防止双花,但是假设如果我们要排除第三方中介机构,那么又该如何做呢?
假设在这里你没有看到后面的答案,你会想出什么样的办法呢?排除了第三方,那就让所有人都来充当第三方。
中本聪的办法就是把所有的交易信息进行公开宣布,这实际上是实现了人人都来监督,从而避免的造假、避免双花的可能。
时间戳服务器(Timestamp server)
本解决方案首先提出一个“时间戳服务器”。时间戳服务器通过对以区块(block)形式存在的一组数据实施随机散列而加上时间戳,并将该随机散列进行广播,就像在新闻或世界性新闻组网络(Usenet)的发帖一样[2][3][4][5] 。显然,该时间戳能够证实特定数据必然于某特定时间是的确存在的,因为只有在该时刻存在了才能获取相应的随机散列值。每个时间戳应当将前一个时间戳纳入其随机散列值中,每一个随后的时间戳都对之前的一个时间戳进行增强(reinforcing),这样就形成了一个链条(Chain)。
我个人理解,要把握这部分的内容,最重要的是理解一个对应关系,即,特定的时间戳能够证实特定的数据只存在于特定的时间,这实际上就是在解决一个唯一性的问题,也就是说这个数据在整个比特币账本中是唯一的。
这部分还有三个重要的名词,区块、链、时间戳服务器,我个人有一个不太合适的类比,可以帮助理解部分内容,不一定准确,仅供大家参考。
请大家联想到日常生活中我们的手工用笔和纸进行记帐的过程,区块实际上就相当于我们每一页的账本,这一页可能记录了一天或者一个月的收支情况,然后完了之后我们会在这一页上写上一个时间,就相当于是盖上了时间戳,每页之间,通过实际存在的线进行连接,这就是相当于区块之间进行的连接,所有的区块连接在一起,就是区块链,就形成了整个账本。而实际上的比特币本身也就是一个账本,只不过它是通过代码、去中心化、分布的方式来记录所有的交易。
欢迎留言和我进行探讨交流。
最后向大家报告一下没有按时更新以及部分时间停更的原因,那是因为我去学游泳了,在这个过程当中,真的能感觉到自己开始阶段的笨拙,想要继续的游下去,先是要心平气和的接受自己的笨拙,学习的过程本来如此,没有办法跳过这个过程,能有的办法就是泡在水里面,一遍一遍的进行刻意练习。
再联想到自己的写作,自己的区块链学习,也没有什么速成的办法,唯有积累,每天进步一点点,和大家一起共勉。
人生没有白走的路,每一步都算数, 不可一日不拱卒。