Why is Bitcoin

Posted by Run.D.Guan on August 18, 2018

Sorry to be a wet blanket. But, writing a description of Bitcoin for general audiences is bloody hard. There’s nothing to relate it to.

                        - Satoshi Nakamoto, July 5, 2010

探寻起源

比特币逐渐被世人接受必然有它的价值所在,它诞生的背景决定了它要解决当前金融体系哪些弊端,首先来看看当时甚至现在依旧存在的问题

  • 隐私问题 – 数字世界的发展给人类带来了前所未有的便利,与此同时却带来了用户隐私很难保密,民主社会国家的民众对此表示担忧,尤其对于极客们更是对此深恶痛绝。
  • 货币超发 – 政府总是有超发货币的倾向来扩大投资以保证经济增速保持在预期水平,还可以充实自己,但会导致民众的财富缩水。直接导火索是2008年美国金融危机,美国政府开始给自己印钞票,民众的钱缩水,物价上涨。比特币的创始人(或组织)中本聪看不下去了,后来发明出比特币。
  • 中心化的被攻击风险 – 当前金融系统基本都是中心化的模式,中心化有中心化明显优势,如信用背书,但他们权力过于集中,可能自己存的钱被他们用于别的用途;同时记账权是在他们手里,账本是集中管理的,当它遭遇黑客攻陷后损失是毁灭的。

基于以上以及其他现实存在的问题,中本聪于2008年发表论文《比特币:一种点对点的电子现金系统》,文中介绍了一种通过点对点的方式在线从一端转移到另一端而不经过任何金融机构的电子现金,其中用到的核心创新技术就是区块链。几个月后中本聪通过这套开源软件挖出创世区块并获得了50枚比特币的奖励,任何人都可以安装这套软件并成为比特币点对点网络的一部分。

  • 2008年
    • 8月18日    “bitcoin.org”域名注册
    • 10月31日   比特币白皮书发布
    • 11月09日   比特币项目在SourceForge.net注册
  • 2009年
    • 1月03日   创世区块于18:15:05 GMT被挖出
    • 1月09日   比特币v0.1发布
    • 1月12日   第一笔比特币交易,由Satoshi到Hal Finney记录在170号区块中

下面来看看比特币的运行流程,再来分析一下它解决了之前数字货币解决不了的问题,最后总结下比特币的价值。

比特币运行流程简述

比特币用户在电脑上运行比特币客户端软件,这样的电脑称为一个节点(node)。大量节点电脑互相连接,形成一张像蜘蛛网一样的P2P(点对点)网络。

当张三想要通过A账号转账1比特币给李四的B账号时,

  1. 张三向周围节点广播转账交易要求:A账号转账1比特币给B账号,并用A账号的私钥签名。(A账号的私钥可简单理解为A账号的密码,只要知道A账号的私钥就能使用A账号上的比特币)
  2. 张三周围的节点通过A账号的公钥检查交易签名的真伪,并且检查张三的A账号是否有足够余额。
  3. 检查通过后,节点往自己的账本上写:A账号向B账号转账1比特币,并修改余额:A账号余额=3比特币-1比特币=2比特币,B账号余额=2比特币+1比特币=3比特币。
  4. 节点把这个交易广播给周围的节点,一传十十传百,直到所有节点都收到这笔交易。

不存在所谓“1比特币”这样的东西。比特币没有固定面额,比特币只不过是交易输出,在现在的规定里,它可以精确到小数点后8位。

这些交易都会被存在区块中,新被矿工“挖”出的区块通过哈希指针指向它之前的区块,由此构建出的链表称为区块链。 哈希指针不止能存储数据位置信息还记录位置数据的哈希值,因此可以验证数据有没有被篡改过。区块链头部的哈希指针被称作创世区块(genesis block),它是被大家所公认的所以不能被恶意修改,因此当我们锁定了区块链的头部,即使对手修改了所有哈希指针使其与修改过的数据一致,那么也无法修改头部数据,从而可以检测到篡改行为。

实际应用过程中为了提供效率会引入如下图所示的梅克尔树(Merkle tree)的数据结构。包含数据的区块构成了叶子节点,将其两两分组,为每一组建立一个有两个哈希指针的数据结构,每个指针对应一个区块。再轮流为每个区块组哈希指针建立一个新的哈希指针数据结构,知道得到单一区块,即根节点。

当记住根节点的两个哈希指针,我们可以通过哈希指针回溯到列表的任何位置,这让我们保证数据确实没有被篡改过。如果整棵树上有 $n$ 个节点,验证某个数据区块隶属于梅克尔树需要的时间约为 $log(n)$ 。即使梅克尔树包含大量的区块,我们仍可以以相对较短的时间证明隶属关系。

比特币解决的技术问题

分布式共识

建立一个分布式电子现金系统的关键技术就在于达成分布式共识。在比特币网络中,有各种各样的用户在向网络广播交易,要如何才能对哪些交易进行广播和交易的次序达成共识,以此形成一个唯一的全球交易总账呢。在比特币体系中,我们将每个区块进行共识处理。所有在网络中的节点都有包含一系列区块的总账,每个区块包含了已经被所有节点达成共识的交易清单,除此之外,每个节点还有一堆没打包进入区块的交易(即已经通知节点交易已经发生但还没写入区块的交易)。网络节点对于这些交易还没有达成共识,实际的点对点网络是不完美的,所以有些节点听到了交易有些却没听到。对于这些未达成共识的交易,每个节点都可以提议把自己的未被认可的交易放到区块链后面的下一个区块中,然后那些节点会执行一些共识协议,每个节点把自己提议的作为区块的输入。如果有些正当有效的交易没被放入区块,它们可以等待下一次机会。

上面的做法已经跟比特币系统很相似了,但还有几个技术问题:第一,达成共识一般是个难题,因为有些节点会四季或根本就是恶意节点;第二,点对点网络并不都是两两相连的,互联网链接的不良会造成网络问题,要执行一个所有节点都参与的共识协议好像并不现实;第三,由于交易信息分布在整个互联网上,信息传递会有严重延迟。事实上许多关于分布式共识的文献都对能否达成共识持悲观态度。一个经典案例就是拜占庭将军问题(Byzantine Generals Problem),参见这里

Byzantine Generals Problem

比特币是如何搭配经典模型里那些不可能性结论呢

  • 比特币引入了奖励理念。因为比特币是一种货币,所以人们自然而然会为了金钱奖励而变得诚实起来。所以比特币并没有真正解决分布式公式问题,它只是在特定货币系统下解决了这个问题而已。
  • 比特币体系包含随机性这个概念。它不再纠结于规定共识的起点与终点。中本聪给系统增加了发消息的成本,即工作量证明(proof of work)。比特币是用哈希函数解谜来证明工作量的,任何一个提议并创建区块的节点想要制造下一区块,必须要求解出哈希谜题1,这就是常说的比特币挖矿。因此哪个节点解出谜题才有创建区块记账的权力。实际系统中达成共识大约需要一个小时左右(区块产生的间隔约为10分钟,交易得到6个区块确认可以认为交易已经得到共识),即使一个小时以后,节点们也无法确定哪一个交易块应该进入总账本。但随着时间的流逝,我们队某一个区块的认识与最终总体共识相吻合的概率越来越大,因此比特币逾越了传统理论关于分布式公式不可能达成这一鸿沟。

双花问题

在数字化货币系统中,由于数据的可复制性,使得系统可能存在同一笔数字资产因不当操作被重复使用的情况,这也称之为双花问题。为了解决双花问题,我们日常的数字资产使用依赖于第三方信任机构进行。这类机构对数据进行中心化管理,并通过实时修改账户余额的方法来防止双重支付的出现。而比特币作为去中心化的系统,解决双花问题的流程如下

  • 首先,要检查这笔钱是不是没有被花费过。方法是查看你的这笔交易的来源是否在UTXO(未花费交易列表,UTXO解释可以参看这里这里)中。不需要追溯到挖矿挖出的coinbase交易。
  • 然后要看你提交的交易里有没有包含有效鉴权。如果这笔钱之前是通过P2PKH交易付给你的,那就是看交易里有没有这笔钱所在地址的对应私钥的签名。P2SH、P2MS类型的交易的鉴权规则类似。
  • 如果攻击者用同一笔UTXO构造了两笔分别付给A和B的交易。那么bitcoin-core客户端的规则(截止2016.2)是只转发先侦听到的那个。但至于哪笔交易会被包含进未来区块,则取决于矿工。
  • 矿工的挖矿程序一般是定制开发的,矿工可以自主任意选择这两笔交易里的一笔。比如有的矿工会选择先看到的交易,有的矿工会选择交易手续费更高的那个。
  • 当这两笔相矛盾的交易中的一笔被写入区块链,并且深度达到6后(6个确认后),可以认为这笔交易获得了最终的确认。等待6个确认的情况下,比特币是几乎绝对不可能被双花的。一个确认都不等待,则有相当的可能被双花攻击。通常,3个确认已经相当安全。攻击者想要在落后6块的情况下从另一个分支赶超当前主分支是非常困难的,除非攻击者拥有非常多的算力,超过其他所有诚实矿工的算力之和。如果攻击者有如此多算力,与其花这么大力气搞这种攻击,还不如做良民挖矿来的收益大。另一方面如果攻击者有有超过50%的算力,他本身就是最大的受益者,如果搞出双花攻击就会导致共识打破,币的价值也不复存在,这就从动机上杜绝了攻击的形成。

比特币的价值

  • 去中心化 – 没有中央发行机构,转账是由个人到个人,不经过像银行/支付宝这样的第三方公司
  • 匿名性 – 比特币转账不需要身份信息,保障了个人身份信息安全
  • 透明性和不可篡改性 – 比特币的账本是一个公共账本,公开透明,每个人都可以查看这个地址有多少币,这个地址向另一个地址转了多少币。每个人都可以参与记账,记录了所有的交易记录,如果要篡改数据,需要发起51%攻击,这基本上是不可能成功的
  • 稀缺性 – 比特币总量为两千一百万枚,是通缩型货币,不会因为法币那样因为超发而缩水
  • 全球流通性 – 只要有因特网就可以发送和接收比特币

Reference

  1. 哈希谜题有三个重要特性:1.难于计算。2.可参数化成本。没产生2016个区块之后,所有的节点都会自动重新计算目标区域相对整个输出范围的比例大小,使得后续区块产生的时间间隔约为10分钟。3.易于证实。这样任何其他节点很容易检查区块的内容,计算出它的哈希值,证实它的输出在目标区域内。即使摆脱了中心化管理,我们不需要中央权威季候来证明矿工正确地完成了工作。