精读比特币论文

上一次读比特币论文还是几年前,在区块链大火的今天,决定仔细重读一下,并写下读后感。

本文试图以一种从宏观到微观,先静态后动态的叙述方式,描述比特币系统,文中绝大多数内容来自于中本聪的比特币论文,加上了一些自己的理解。

世界地图上看比特币

时至今日,比特币在物理上已是包含一万两千多个节点的,遍布全球的分布式系统。其中的每一个节点可能是普通的笔记本电脑、台式机、服务器、也可能是专用的“矿机”,归根结底,是一台具备计算和存储能力的计算机。这些节点通过Internet连接在一起,使用TCP/IP协议通信。

节点

每一个比特币节点上存储的数据是相同的,或者说是大致相同的。换句话说,比特币系统里面的每一个节点,都拥有所有的比特币数据。这些数据以一种叫做区块链的数据结构组织在一起,使得数据一旦存储到链上,就不容易被篡改。

区块的大小是最大1MB,由一些不同类型的数据组成,其中一部分是它前一个区块Hash值,这样每一个区块都包含一个指向前一个区块的Hash,构成了一个非常普通的数据结构,链表,称之为区块链。区块链的巧妙之处在于难以篡改数据,如果要修改链上某个区块内的数据,它的Hash值就会变,这样其后的每一个区块都会变。

区块

区块由header和body两部分组成,整体大小的最大值为1MB,其中header占80个字节。header中包含了前一个区块的Hash值、本区块body内容的hash值、以及填充数据Nonce。其中填充数据Nonce用来调整控制当前区块的Hash值,其作用,在接下来描述区块如何生成时再介绍。

事实上,所谓区块的Hash值,指的是区块的80字节大小的header的Hash值。那区块链如何保证body的内容不被篡改呢?是使用了一种名为Merkle Tree的数据结构。

In cryptography and computer science, a hash tree or Merkle tree is a tree in which every leaf node is labelled with the hash of a data block and every non-leaf node is labelled with the cryptographic hash of the labels of its child nodes. Hash trees allow efficient and secure verification of the contents of large data structures. Hash trees are a generalization of hash lists and hash chains.

这样,通过在叶子节点存储实际数据,逐层计算Hash,最终将根节点Root Hash保存到区块header中,使得任何一个叶子数据发生变动,从根节点到该叶子节点路径上的Hash值,包含Root Hash在内都要发生变动。从而保证了数据不被篡改。

那么这样做带来了什么好处呢?这给区块链带来了删除数据的能力,即Merkle Tree叶子节点的数据不能被修改,但可以直接删除不再保存,而其Root Hash不变,区块的Hash也不会变。这一点保证了区块链在不断增加新区块的过程中,数据不会爆发性增长,使得区块全都存储在一个单计算机节点上,成为可能。

在比特币系统里面,组成区块body的Merkle Tree的叶子节点存储的,是一个交易。

交易

比特币里面交易用来将比特币从一个人传递给另一个人,跟现实世界一个人付钱给另一个一样。不同的是,现实世界需要钱这个实体,需要钱背后的政府背书,而比特币世界里面,交易既表达交易本身,又代表了比特币的持有权。

所以每一笔交易都包含了之前一笔交易的Hash值,用来做输入;同时包含交易对象的公钥,用来做输出。这样比特币的所有权就从之前一笔交易包含的公钥所对应的私钥的持有人,转移到了当前这笔交易包含的公钥对应的私钥的持有人。

当然,因为私钥代表了对一笔交易的所有权,每一笔交易都必须要使用作为其输入的交易包含的公钥对应的私钥进行签名,才生效。

持有私钥就可以交易,那么怎么避免持有人将一个比特币,支付给多人,也就是说怎样解决双花问题?答案是,所有交易数据都是公开的,存储到区块链上,不能篡改的,这样在验证一个新交易时,通过遍历已有交易,可以判断出是否存在双花现象。

交易链

论文中将比特币定义为一个交易链,其所有权在交易中流转,持有最后一笔交易中公钥所对应私钥的人,拥有该交易链所代表的比特币的所有权。

现实中的交易,可能有一次消费多个币,可能有找零,等需求。考虑到这一点,论文中将交易扩展为支持多个输入交易和多个输出公钥,至此,一次可以消费多个币,一个币也可以掰开来花。

比特币的诞生

代表比特币的交易链中每一笔交易都至少要有一笔交易作为输入,那第一笔交易哪来的呢,也就是说,比特币何时诞生呢?

区块的body由交易组成的Merkle Tree组成,而每一个区块内的第一笔交易,是一笔特殊交易,特殊之处在于没有输入,用来奖励该区块的生成者。这样随着交易增多,区块就增多,而随着区块增多,比特币/交易链也增多,相当于货币不断增发。

谁来生成区块

第一个区块是中本聪生成的,称之为创世区块,也是唯一一个不含其它块的Hash的区块。其余的区块都是由比特币节点生成,节点收集网络上尚未被确认的交易,进行确认后组成区块,同时将区块添加到区块链上。

一万两千多个节点,由哪一个节点来生成呢?比特币使用一种较为POW的机制来达成共识,比特币规定了每个区块的Hash值末尾的几位必须为0,这样节点在计算区块header的Hash值时,就必须不断调整填充字段Nonce的内容,以满足Hash值要求。由于Sha256这种Cryptographic hash的特性,计算特定的Hash值十分困难,需要大量的计算资源。而当一个节点找到符合条件的Nonce时,其它节点验证起来又特别的容易。

节点都在不断的计算新的区块的Hash值的过程,就称作挖矿,新区块的奖励交易,也就是挖矿的收益了。因为网络上的节点都在挖矿每个节点都有挖到的可能,并且网络也存在分区的可能(比如海底光缆被挖断、遭到了网络攻击等),网络上可能存在多条合法的区块链,当出现这种情况时,论文规定,长链胜出,短的被抛弃,其上与长链不一致的交易,也会被取消。

如果节点在某一时刻,收到了两条长度相当的区块链,那么它会同时保存两条链。同时,在收到的第一条上进行挖矿,直到随着交易进行,两条链有一条胜出,则抛弃失败的那条。

货币发行政策

作为一种货币,比特币也有其货币政策,前面也提到随着区块生成,货币不断增发。有一个问题是,随着比特币网络不断壮大,节点越来越多,生成新区快的速度也会不断增加,这会导致比特币数量不断增多。为了解决这个问题,论文中描述了一种Hash值计算难度自动调节的机制,通过根据区块生成速度,自动调整Hash值末尾0的个数,使得货币发行速度不受全网算力的影响。

按照论文的设计,当发行到一定数量后,计算出新区块不再受到比特币奖励,即不再有货币发行。比特币数量维持稳定,生成区块的节点,只收到交易手续费用的奖励。交易手续费,指一笔交易中,输入大于输出,则多余的被当做交易手续费,相当于打赏比特币节点的小费。小费高的交易,更容易吸引节点,因此更容易被确认,交易速度更快。

隐私保护

跟传统银行交易只提供给本人查询不同,比特币的交易是对所有人公开的。但比特币的所有权是靠RSA密钥来证明的,即比特币系统不保证交易的隐私性,但保证了比特币持有人的匿名性。

安全验证

只要掌控一定数量的算力,就可以攻破比特币共识协议,使得已确认的交易能够被撤销。论文中,对安全问题进行了论证,主要是讨论了,在不同的算力比例下,需等待多少个区块领先后,交易就可以被认为是安全的。此处不再赘述了,有兴趣去论文详读。

相比算力攻击,网络攻击似乎更容易些。只要刻意制造一个小的网络分区,就很容易使得分区内的交易被撤销。但论文中也提到,即便黑客控制了更多算力等,也只能撤销交易,进行欺诈。受益于交易链公私钥的所有权证明,黑客并不能花别人的钱。

比特币为什么值钱

因为大家相信它值钱。法币的背后是国家政府信用,比特币更多靠信仰吧,跟黄金一样。

总结

论文描述了比特币系统的整体设计,一个非常精致的分布式计算系统。当然有一些工程和安全上的问题没有讨论到,但已经足够精致了,很聪明,读起来过瘾。

熟悉分布式存储系统,分布式共识算法的人应当对文中的很多概念特别熟悉,我觉着也会有一些疑惑,觉着有一些问题,比如对网络的假设太简单,只考虑replication没考虑sharding等等。后面我会找机会去读下代码和衍生系统,期待更多的惊喜。

原文地址:https://www.cnblogs.com/xinzhao/p/8584477.html

时间: 2024-10-30 07:54:21

精读比特币论文的相关文章

白话比特币原理解密

一.比特币的背景 对于当下流行的电子货币-比特币系统,朋友圈里有很多介绍性的文章,也有人试图通过漫画来生动的解释比特币的特性,但是始终不得要领,总是有些问题想不清楚,为了弄清楚这些问题,最近深入的研读了几本比特币的书籍以及中本聪本人发表的比特币论文,感觉茅塞顿开,迫不及待的与大家分享我的理解,希望与大家共同探讨.共同进步. 二.什么是比特币 比特币是一种利用点对点技术实现的电子现金系统,它允许一个组织直接与另外一个组织进行在线支付,而不需要中间的权威的清算机构. 在比特币的世界里,如果你想拥有比

解密比特币的那些核心技术原理

白话比特币原理解密 1 背景 对于当下流行的电子货币-比特币系统,朋友圈里有很多介绍性的文章,也有人试图通过漫画来生动的解释比特币的特性,但是始终不得要领,总是有些问题想不清楚,为了弄清楚这些问题,最近深入的研读了几本比特币的书籍以及中本聪本人发表的比特币论文,感觉茅塞顿开,迫不及待的与大家分享我的理解,希望与大家共同探讨.共同进步. 2 比特币 比特币是一种利用点对点技术实现的电子现金系统,它允许一个组织直接与另外一个组织进行在线支付,而不需要中间的权威的清算机构. 在比特币的世界里,如果你想

[论文复现]何恺明博士CVPR2009去雾算法(2)

一.前言 终于,简单实现了何博士论文去雾算法的基础部分.由于CVPR2009论文中的优化方法比较麻烦,速度比较慢,何博士于2010ECCV补充了一篇Guided Image Filtering优化求解速度,此处后面的优化我直接调用了何博士的函数. 主要参考文献: [1] He K, Jian S, Tang X. Single image haze removal using dark channel prior[C]// IEEE Conference on Computer Vision &

精选文章推荐汇总-2018.03.01

大话爬虫的实践技巧 作者:SFLYQ简介:如今已然是大数据时代,数据正在驱动着业务开发,驱动着运营手段,有了数据的支撑可以对用户进行用户画像,个性化定制,数据可以指明方案设计和决策优化方向,所以互联网产品的开发都是离不开对数据的收集和分析,数据收集的一种是方式是通过上报API进行自身平台用户交互情况的捕获,还有一种手段是通过开发爬虫程序,爬取竞品平台的数据,后面就重点说下爬虫的应用场景和实践中会遇到的问题和反反爬虫的一些套路与技巧. 爱情有备胎,数据中心有MC-LAG 作者:姜汁啤酒简介:最近咱

为什么读文献?如何去读!

今天导师安排我去看看,关于阅读文献的方法,让我在小书虫上面搜索一下,我好像没有搜索到具体的文章帖子. 于是,只能求助于万能的搜索引擎了,结果令人是欣喜的. 我们也知道学习,方法有时候真的比努力重要!一个好的学习方法可以让你事半功倍.显然,关于文献阅读学习方面的问题,早就有很多人提出. 我就借着前人的经验来记录下,各方面都有摘抄,以此记录下来,指引同为不太明白高效学习的各位. 知乎: 为什么要读论文?目的是什么? 大部分情况下,我们读论文,是要解决一个问题,或者了解一个知识.在这种情况下,相对于这

精读论文node2vec

摘要: 文章首先指出,现存的特征学习方法还不能足够的捕捉出显示网络中被观测到的联通模式的的多样性 作者同时认为在搜索相邻节点时增加灵活性时提升特征学习算法的关键 主要贡献:我们定义了节点网络的表述,并且提出了一种带偏置的随机游走策略,这种策略可以有效地检索分散的相邻节点. 正文1 任何的有监督的学习算法均需要一系列的信息性,差异性和独立的特征表示,一种典型的解决方法是基于专业知识手动设计特定领域的特征.这样的特征只能适应于特定的任务领域.另一种可选的方法是通过解决优化问题去学习一组特征表示.其中

802.11协议精读12:初探协议性能

序言 在初始的802.11协议版本之后,陆续更新的802.11e,以及802.11n以及更新的802.11技术,其都是基于改善当前802.11协议的缺陷不断进行改进的.为了理解这些改进,我们首先要理解802.11存在的一些问题,其中一个主要的问题就是性能问题. 本文我们先简单介绍802.11中一个常见问题,即路由器的宣称速率不等于实际速率的问题,然后我们具体分析一下这个宣称速率(即物理层速率)的计算方法.在后面一篇文章中,我们会介绍用数学方法对该吞吐量具体进行估计的方法,即Bianchi模型.

论文写作经验 集萃

IEEE ICIP: International conference on Image Processing 图像处理领域最具影响力国际会议,一年一次 图像处理 IEEE ICASSP: International Conference on Acoustics, Speech and Signal Processing 是语音和声学信号处理领域最权威的国际学术会议之一,也是图像.视频信号处理领域的权威会议之一,每年举办一次 信号处理 英文投稿的一点经验[转载] From: http://ch

【转】研究生如何读文献 写论文 发文章 毕业论文

研究生论文写作步骤 1. 先看综述,后看论著.看综述搞清概念,看论著掌握方法.2. 早动手在师兄师姐离开之前学会关键技术.3. 多数文章看摘要,少数文章看全文.掌握了一点查全文的技巧,往往会以搞到全文为乐,以至于没有时间看文章的内容,更不屑于看摘要.真正有用的全文并不多,过分追求全文是浪费,不可走极端.当然只看摘要也是不对的.4. 集中时间看文献,看过总会遗忘.看文献的时间越分散,浪费时间越多.集中时间看更容易联系起来,形成整体印象.5. 做好记录和标记复印或打印的文献,直接用笔标记或批注.pd