您当前的位置:首页 > 计算机 > 云技术 > 区块链

比特币(Bitcoin)技术原理初探

时间:03-22来源:作者:点击数:

阅读目录(Content)

回到顶部(go to top)

一、比特币是什么

比特币既是构成数字货币生态系统基础概念和技术的总称,又是比特币网络中参与者存储和传输的货币单位。

在互联网上,比特币用户主要通过比特币协议进行通信,当然也可以使用其他传输网络。比特币协议栈作为开源软件,可以在各种类型的计算设备上运行,包括笔记本电脑和智能手机,从而使得比特币更加普及。

用户通过网络进行比特币转账可以做到和传统货币一样的事,包括买卖商品,汇款给别人或机构,或者提供借贷。比特币可以在专业的交易所进行购买、出售或兑换其他货币。从某种意义上讲,比特币是互联网上完美的货币形态,因为它快速、安全且无国界。

与传统货币不同,比特币完全是虚拟的,没有物理硬币,甚至本身都不是简单数字化(比如银行卡里的存款余额算是简单数字化),比特币隐含在汇款方到收款方的转账交易中。在比特币网络中,用户用自己的密钥来证明他们对比特币的所有权,用户使用密钥对交易进行签名以解锁比特币,并通过将其转账给新的所有者来消费比特币。密钥通常保存在每个用户计算机或智能手机上的数字钱包里,拥有可以签署交易的密钥是消费比特币的唯一先决条件,用户通过密钥把控制权完全掌握在自己手里。

比特币是分布式的点对点系统,因此,并没有“中心”服务器或控制节点。比特币是通过被称为“挖矿”的流程创造出来的,“挖矿”流程涉及在打包处理比特币交易过程中矿工竞争式寻找一个数学问题的解(寻找符合条件的hash值)。比特币网络中的任何参与者(即有能运行完整比特币协议栈的设备的人)都可以作为矿工,利用其计算机的处理能力来验证和记录(打包)交易。平均每隔10分钟,就有矿工打包验证了过去10分钟内的交易(打包成一个区块),并获得本区块全新的比特币挖矿奖励。从根本上讲,正是比特币挖矿的流程代替了中央银行的货币发行和结算功能,通过分布式架构取代了中央银行的地位。

比特币协议包括内置的算法,用于协调整个网络的挖矿能力。挖矿的难度会根据有多少矿工(以及多强的计算能力)参与挖矿而进行动态调整,以保证平均每10分钟就有矿工可以成功挖矿。比特币协议还规定每4年新发行比特币的数量减半,并将所有发行的比特币总数限制在2100万以内。因此可流通的比特币数量是一个非常容易预测的曲线,到2140年将接近2100万。由于比特币递减的发行率,长期来看,比特币货币是通货紧缩的,此外比特币不能通过“增发”超过预定发行率的新钱而导致通货膨胀。

换句话说,比特币也是融合比特币协议、点对点网络和分布式计算的创新代名词,比特币货币只是这个创新的第一个应用。比特币集数十年密码学和分布式系统研究之大成,并将四个独特和强大的关键创新点组合在一起。比特币这四个创新包括:

  • 一个去中心化的点对点网络(比特币协议)
  • 一本公开的交易总账(区块链)
  • 一套可独立校验交易和发行货币的规则(共识规则)
  • 一种通过全球去中心化对有效的区块链达成共识的机制(工作量证明算法)

我们可以将比特币视为货币互联网,这是一个传播价值的网络,通过分布式计算来确保数字资产的所有权。比特币还有很多不那么显而易见的内容。

回到顶部(go to top)

二、比特币背后的经济学/社会学思想

全球自由货币

作为一种货币系统,比特币的影响巨大。其中一个优势是人们通过它可以进行全球汇款,就像发邮件一样简单。这对要向祖国亲人寄钱的移民工人特别有利。相比之下,提供跨境汇款的公司都要收取高额费用。在法定货币和比特币(BTC)之间兑换也存在着处理费用,但是远比传统的汇费要低很多。

匿名、安全、稳定的金融支付体系

另一个好处是网上购物和网上捐赠。当前的信用卡支付体系未来可能会发生彻底的改变。信用卡支付需要提供付款人的大量信息,包括账单地址和信用卡背面的3位数字验证码。从本质上讲,这相当于把比特币账号的加密私钥送给了商家。这个安全漏洞所引起的大量欺诈行为已经通过高刷卡费、商家要处理的退款等形式表现出来了。信用卡公司每年需要投入大量资金来处理欺诈指控。这些成本转嫁给商家,然后再通过更高的商品和服务收费转嫁给消费者。

比特币的另一个重大影响体现在金钱方面,特别是其系统能力体现出它是金钱而不仅仅是货币。货币具有以下属性:

  • 交易的媒介(在贸易中作为中介)。
  • 记账单位(可计算,可量化)
  • 持久性(可以存在很长时间)
  • 可分割性(所以要有更小的单位)
  • 便携性(便于携带运输)
  • 互换性(可以相互交换,1个价值单位可以替换另一个等价的单位)
  • 长期保值的能力

与金钱不同,货币会受到通货膨胀的影响。20世纪初的膨胀定义很简单,就是指某物增加的行为,对货币而言就是印更多的钞票。今天的词典普遍把膨胀定义为物价上涨。然而,物价上涨是货币贬值的表现,是当市面上出现了比以前更多的货币时发生的现象。

有趣但不意外的是,词义的转变反映了这个时代纸币与黄金、白银渐行渐远,物价越来越高。举例来说,我们的祖先所看到的是粮食价格一辈子几乎都保持不变。然而,现在的人已经习惯于把物价上涨看成是天经地义的。就像在终年下雨的地方,没人会把雨和云联系在一起。但怎么能怪他们呢?因为他们从未看见过蓝天。同样,今天大多数人都没有意识到食物价格的上涨是由通货膨胀所引起的,有时物价上涨还会出现滞后的现象。例如,20世纪60年代的通货膨胀直到十年后的70年代才显现出来。

要维持长期的购买力(即免受通货膨胀的影响),必须限制货币供应量。由于有限的储量以及开采的困难,几千年来黄金和白银一直被选为货币。可以将开采贵金属付出的努力与比特币系统的工作量证明相类比。再将这类真正的付出与简单地加印钞票相对比。纸币最早只是作为方便贵金属交易的替代品(衍生品)而出现的。

纸币容易复制,一直备受通货膨胀困扰,早期的金匠以及后来的银行家利用银行业的部分准备金制度,借出的纸币(即印制更多的纸币)超出实际持有的黄金储备。这导致了频繁的银行挤兑危机,这类事件充斥史书。

在计算机和网络出现以前,交易的媒介仅限于贵金属和纸币。其后,电子通信引入了黄金和白银无法直接参与的新交易方式。直到现在,只有中央控制的且可以电子传输的货币存在,它让控制者能自由决定基础货币的供应规模。当尼克松总统在外汇市场上废除美元与黄金的可兑换性时,就清楚地表明了这一点。越南战争和林顿·约翰逊的“伟大社会”就是靠电子印刷机稀释美元来资助的。物价上涨要过一段时间才会显现出来,紧接着,黄金的美元价格就显著地高于美元与黄金脱钩前大家普遍接受的35美元每盎司的固定价格。美元因此变成了一种自由浮动的、不断膨胀的货币。现在其他国家的货币也都如此。

政府从流通货币的价值中获取资金来支撑财政赤字。穷人受通货膨胀的影响最大,中产阶级在一定程度上亦是如此,而富人则利用发债和各种金融衍生工具收购公司以及创收型的商业地产。他们知道债务会随着货币一起贬值,人为提供了额外的收益。赢得“贫困之战”的第一个办法是摆脱通货膨胀,恢复货币长期保持价值的形式。但是别指望政府会提出甚或接受这种方案。

目前,报纸和杂志上许多关于比特币的文章都将“通货紧缩”作为其主要缺点。通货紧缩意味着以比特币(BTC)计价的物价将会下降。事实上,这正是比特币所带来的主要好处。

报道称人们宁愿“囤积”比特币而不愿意在经济活动中消费。首先,设想将来比特币成为法定货币。人们还是要生活,仍然还要吃饭和居住,因此也必须支付这两项费用。这些文章中的评论是对金钱概念的错误理解。只储蓄不支出,亦即“囤积”—这里是储蓄的贬义词,并非消费不发生了,而只是把消费推迟到了未来的某个时间点。可以看看一些所谓的“比特币百万富翁”最近的表现,他们在某个时候富有到用比特币购买奢侈品。

在以金钱为基础的经济体系中,储蓄者不会与制造商、建筑商、工厂还有那些推迟消费的人竞争资源。资源指的是任何形式的能源、商品、时间和劳动,特别是专业化的劳动。试想一下,如果某个人决定待在家里省钱,而不是挂上拖车到处旅行。因为没有出去旅行,所以本应花在旅游中的汽油费用就可以由制造商用于运输建造新工厂的原材料。印刷美元并没有创造更多的石油、电力,也没有让每天多出几个小时。

这些简单的例子说明了通过限制比特币的供应量而获得保持其价值的概念。

”恶“不可能完全消除,但是可以无限提高作”恶“的成本

比特币的最大一个创新是通过分布式记账代替了中央权威机构的中心记账。但凡事有其一利就有其一弊,分布式的记账方式也增加了攻击者作恶的攻击面,因为理论上任何一个节点都可以对整个区块链发起攻击。

比特币解决这个问题的思想在于:提高攻击的成本。

世界上最贵的成本是什么?答案是时间,在计算机领域,时间可以等同于算力,所以比特币的思想是用提高算力成本的方式来提高节点攻击区块链的成本。

经济/社会问题的抽象本质是产权的确权和身份验证问题

比特币的目的是建立一个可信的、分布式的权威,比特币协议的本质是进行产权/所有权的确权和验证。

中本聪的发明也是分布式计算当中一个古老问题的实用和新颖的解决方案,这就是“拜占庭将军”问题。简而言之,这个问题包括在不可靠和可能受损的网络上,通过交换信息来达成共识的行动方案或系统状态。中本聪使用了工作量证明的概念,在没有可信中央权威机构的情况下能达成共识,代表了分布式计算的突破,并具有除了数字货币之外的普适性,它可以用在分布式网络上达成共识。

基于比特币及其衍生协议,在经济社会,乃至IT等各个领域的问题都可以得到良好的解决,例如:

  • 基于比特币协议进行SSH/RDP协议的登录验证
  • 基于比特币协议进行房屋产权的确权和流转证明
  • 基于比特币协议进行商品买卖后的权属流转
  • 选举
  • 彩票
  • 资产登记
  • 数字公证

数字货币被接受的三个基本问题

实用的数字货币出现与密码学的发展密切相关。当使用数字货币来进行商品和服务交易时,人们自然有一些根本性疑虑。任何人接受数字货币时都有三个基本问题:

  1. 我怎么确定这笔钱是真实的,而不是伪造的?
  2. 我怎么确定这笔数字货币只能花费一次(也称为“双重支付”或者“双花”问题)?
  3. 我怎么确定没有人能够声称这笔钱属于他们而不是我的?

在当前社会和金融系统中,纸币发行机构通过使用日益复杂的纸张和印刷技术不断与假钱问题做斗争。同时,实体货币很容易解决双重支付问题,因为相同的纸币不能同时出现在两个地方。当然,传统货币也经常以数字方式存储和传输。在这些情况下,假钱和双重支付问题是通过中央权威机构(如央行)清算所有电子交易来处理的,中央权威机构拥有全局的流通货币信息。对于第三个问题,通常中心权威机构通过加强信息安全保障来防止攻击者非法获取不属于他自己的货币。

对于不能利用秘制墨水或全息条码的数字货币,密码学是保障用户所有权合法性的基础。具体而言,加密数字签名使用户能够对数字资产或交易进行签名来证明对该资产的所有权。采用适当的架构,数字签名也可以用于解决双重支付问题。

回到顶部(go to top)

三、比特币的产生背景

比特币是世界上第一个通过密码学,而非中央银行发行的电子加密货币。因为其发行总量固定,无中央银行干预,让许多”民主人士“认为这是极为先进的民主思想技术革命。

比特币的发明,从本质上是为了解决经济、社会的如下几个核心问题:

  • 由中心化的强力机构垄断了货币的发行和流通,导致货币的发行缺乏有效民主监管
  • 过度中心化的金融体系,存在显著地网络安全和数据安全风险,收益和风险呈现不平衡的杠铃形态
  • 中心集中式的IT基础设施,存在明显的脆弱性/鲁棒性风险

为了解决以上的矛盾,比特币的创始人提出了”去中心化,分布式共治“的核心思想。

然而去中心化的系统同时带来了一些新问题:

  • 交易信任问题。没有政府背书和资产担保,货币信任、交易真实性成了问题。
  • 数据对称问题。每个人都有权了解这个世界在发生什么,信息一旦变化,所有数据库需要同步更新,平等对称。
  • 共识达成问题。没有集中决策,为了信息对称,如何达成共识,变成了难题。

比特币对应的解决办法是

  • 区块链公开记账
  • 非对称加密
  • P2P网络
  • 共识机制

中本聪用以上四种方法,构架出了区块链技术结构,让比特币的发行流通构想得以实现。

回到顶部(go to top)

四、比特币的工作原理

技术方案应由需求而产生,围绕上一章末尾介绍的比特币解决方案,本章讨论比特币的整个概念的内涵和外延,以及各个组成部分,以期让读者对比特币的全貌获得一个整体性地认识。

数据对称问题的解决方案

比特币区块链(一种公开账本)

比特币网络的所有成员共享一本公开账本,即区块链。这就像一本巨大的会计账簿,每一页上列有一系列的交易。大约每十分钟增加一页新账本页,其中包含着由世界各地的付款人发起的最新比特币交易。这本巨大的账本对互联网上运行比特币软件的人一直保持开放。注意,在智能手机或个人电脑上运行的可以在比特币网络上进行支付的软件称为比特币钱包。

区块链(blockchain)是比特币使用的一种特殊的数据库,是比特币存在的基础。任何人都可以架设服务器,加入区块链网络,成为一个节点。

区块链由一个个区块(block)组成,区块很像数据库的记录,每次写入数据,就是创建一个区块。每个区块包含两个部分:区块头和区块体。

  1. 区块头(Head):记录当前区块的元信息
    1. 生成时间
    2. 上一个区块的 Hash
    3. 区块体的Hash
  2. 区块体(Body):实际交易数据,比特币交易请求包含以下内容:
    1. 付款人的比特币地址,其中包含了支付的资金来源
    2. 收款人的比特币地址
    3. 需要转让的比特币数量

由于区块链包含了所有与付款人的比特币地址相关联的出入账历史,管理着比特币网络的矿工可以证实付款人有足够的钱支付。所有人在任何时间都可以查看任意指定比特币地址链接的比特币的数量。

例如查询如下比特币地址的区块链交易记录。

其中比较重要的概念是“Hash”,所谓 Hash 是对任意内容,计算出一个长度相同的特征值。而且保证,只要原始内容不同,对应的 Hash 一定是不同的,比特币区块用的SHA256加密算法。

每个区块的 Hash 都是不一样的,通过 Hash 标识区块。如果区块的内容变了,它的 Hash 一定会改变。

P2P网络

P2P网络保证每个人的信息同步,任何人都可以成为一个节点。每个节点都包含了整个区块链,并且节点之间时刻不停的同步信息。

当你发生了一笔交易,你所在的节点就会把这笔交易告诉另一个节点,直到传遍整个网络。“矿工”搜集各种新发生的交易,将他们写入区块链。一旦写入成功,此“矿工”所在节点的区块链就成了最新版本,其他节点会来复制新增的区块,保证全网同步。

交易信任问题的解决方案

非对称加密

非对称加密从技术上解决了可信性问题,这也是这一类数字凭证被称为”加密货币”的原因。

比特币采用了一种非对称加密系统(也称为公钥加密系统),该加密算法需要一对密钥,其中每个密钥由一长串数字或字符组成。

  • 一个密钥是公开的,用于解密操作
  • 一个是私钥,负责加密操作,反之亦然

算法很容易创建私钥并导出相应的公钥。然而,却无法从相应的公钥通过计算反推私钥,因此公钥,顾名思义,是可以公开的。收款人可以用公钥取到交易信息,以使比特币转账得以继续进行。

下图从概念上解释了比特币的双密钥系统,它为比特币运作提供了部分基础。

验证一笔交易是否有效,需要两步:

  1. FROM(谁发送的,包括两部分):
    1. Previous tx:这笔钱的来源账单的id, 验证资金来源
    2. scriptSig:这笔交易的签名,比特币的发送者用私钥对比特币交易进行数字签名,用于证明这笔交易是由真实发起方发起的。
  2. TO(谁接受,包括两部分):
    1. Value:要发多少
    2. scriptPubKey:支付方的公钥,也就是比特币地址。系统使用该公钥校验数字签名的有效性,从而确认发送者确实是私钥持有者。

系统允许私钥持有者使用公开账本里与其比特币地址相关的比特币,随后公开账本(即区块链)用包含这次交易的新账本页(即区块)进行更新。将新交易加入区块链然后公告比特币网络,把这些比特币作为收入记入收款方的地址账户,同时也作为支出记入付款方的地址账户。

私钥由一长串数字和字符组成,通过由密码保护的比特币钱包(即用户计算机、移动设备或其他Web应用上的软件)进行存储和管理。

对于比特币,钱不是支付给个人的,而是支付给某一个地址,没有人知道,那些私钥和地址背后的主人是谁——匿名性。

共识达成问题的解决方案

共识机制

如果比特币是中心化运作的体系,我们可以高枕无忧了,因为会有一个单一实体专门负责处理所有节点发出的交易请求。然而比特币是一个分布式体系,由一群自愿参与的计算节点来共同负责,这些矿工分布在世界各地。记账和支付授权可以由不同实体进行操作,了解系统如何以这种方式来维护每个人的利益,协调所有节点达成共识就显得非常重要。

比特币所采用的“挖矿”这种行为的本质是寻求达到某一共识,再把信息写入区块的劳动。这种共识决策其实不只比特币所使用的一种方法。

目前主流共识机制目前有:

  1. POW(Proof of Work):工作量证明协议。比特币所用共识机制。它要求发起者进行一定量的运算,也就意味着需要消耗计算机一定的时间。
    1. 优点

      1. 算法简单,容易实现
      2. 节点间无需交换额外的信息即可达成共识
      3. 破坏系统需要投入极大的成本
    2. 缺点
      1. 浪费能源
      2. 区块的确认时间难以缩短
      3. 新的区块链必须找到一种不同的散列算法,否则就会面临比特币的算力攻击
      4. 容易产生分叉,需要等待多个确认
      5. 永远没有最终性,需要检查点机制来弥补最终性
  2. POS (Proof of Stake):权益证明:最早在Peercoin系统中被实现,类似现实生活中的股东机制,拥有股份越多的人越容易获取记账权。在POW中,如果用户花费2000美元购买硬件设备,当然会获得两倍算力来挖矿;同样,在POS机制中投入两倍的代币作为押金,就有两倍大的机会获得产生新区块的权利。
    1. 优点:
      1. 在一定程度上缩短了共识达成的时间
      2. 不再需要大量消耗能源挖矿
    2. 缺点
      1. 还是需要挖矿,本质上没有解决商业应用的痛点
  3. DPOS(Delegated Proof of Stake):Dan Larimer发明的这种新共识算法,被称为股份授权证明机制(DPoS),应用于比特股和Steemit社区。每个股东按其持股比例选定代表,每个股东将选票授予一名代表。获票数最多的前100位代表加1位随机代表,按既定时间表轮流产生区块,每名代表分配到一个时间段来生产区块,所有的代表将收到等同于一个平均水平的区块所含交易费的10%作为报酬。该模式可以每30秒产生一个新区块,每次单人有序生产区块在正常的网络条件下区块链分叉的可能性极其小,即使发生也可以在几分钟内得到解决。
    1. 优点
      1. 高校
    2. 缺点
      1. 整个共识机制还是依赖于代币,很多商业应用是不需要代币存在的。
1、网络矿工把交易写入区块链——“挖矿”

“挖矿”指的是把网络上待确认交易的写入新区块,并确认该区块的合法性,通过算力证明(POW)获得比特币奖励的过程。

“矿工”是用GPU等硬件设备进行数据计算的一群人,正是这群人,把交易者的数据一笔一笔记入帐中。“挖矿”的机器叫“矿机”;成规模“挖矿”的场地叫“矿厂”。回顾挖矿历史,比特币挖矿总共经历了以下五个时代:CPU(20MHash/s)→GPU(400MHash/s)→FPGA(25GHash/s)→ASIC(3.5THash/s)→大规模集群挖矿(3.5THash/s*X)。

矿工是负责比特币网络运作的计算节点,它负责验证交易的有效性,并用包含最新交易的新区块定期更新区块链。比特币软件由每台计算机上的矿工运行,包含了由一组规则和约定构成的比特币协议。

总的来说,比特币网络要求区块链(公开账本)持续更新,添加新的区块(账本页)。大约每十分钟新增一个区块,其中包含了一组最新的交易。虽然所有矿工都在产生下一个区块,但只有其中一个矿工会被选中,由它产生的特定版本区块将会被添加到区块链中。

事实上,每个矿工在创建自有版本的下一个区块时都是为了自身的利益,这样可以从中收取该区块交易中的交易费。虽然比特币交易中像付款人、收款人、金额这样的核心参数不能更改,但大部分交易都包含了由付款人支付的交易费,如果某矿工产生的区块被选中加入了区块链,那么该区块中的交易费就都可以记录到该矿工的账户。因此,该矿工要更新其中的每笔交易,并将这些交易的交易费记入自己的比特币地址。

除了交易费,有幸将区块加入区块链的矿工还会额外赚到一笔新“铸造”的比特币存款。矿工创建一笔额外的交易,将新铸造的比特币加入自己的比特币账户。这笔钱叫区块奖励。2014年,比特币协议允许每个新区块给矿工分配25枚新比特币。这是在收取交易费的基础上额外赠送的。比特币刚开始推出时,每个区块分配50枚比特币(BTC)的奖励,奖励数量大约每四年减半。

因为生成区块并选入区块链能赚到新比特币,所以矿工竞相努力挖矿。稍后将对这个选择过程的运作细节做出解释,暂时可以先将其当成是执行昂贵的计算任务以解决一个数学问题。找到问题的答案很难,但是验证答案的正确性却很容易。第一个找到区块问题答案的矿工可以向全网的矿工公布该区块。

矿工在收到区块及其问题答案后就开始着手验证,证明为区块找到的答案是正确的。比特币协议设置问题难度的方式是让找到答案所需的时间平均保持在10分钟左右。

如果解答问题产生新区块的矿工给自己的账户记入了超过当前允许的25枚新比特币,其他的矿工就会拒绝接纳该矿工所提供的区块,并继续为自己的区块寻找答案。每个区块都略有不同,所以每个矿工要找的答案均不相同。

接下来的过程看起来不太自然,当一个矿工解决了计算任务并通过验证,其他矿工马上接受失败,并同意将该矿工的区块作为区块链的下一个区块,然后再开始着手下一个区块。下一个区块将上一个区块产生后的最新交易添加到自己的区块,然后再寻找新区块的问题答案,然后加入到永无止境的区块链。

比特币的运作方式解释了为什么第一个找到问题答案的矿工只能发给自己符合协议的比特币奖励。这么做可以保证矿工生成的区块可以被其他矿工所接受,并收到相关的报酬(即交易费)。同样,其他矿工也不能通过拒绝接受有效区块而获利。比特币支付系统只有在运行正常时才能保持其价值。如果矿工都只接受自己生成的区块而拒绝其他的,那就无法达成共识,整个体系的价值将因此而被摧毁,对所有矿工都没有好处。这种情况下,矿工有再多的比特币也没有价值。因此,如果大家都尊重比特币软件的协议,那么所有矿工都将受益。因此,比特币的表现与之前所描述的公地悲剧完全不同。

前面提到过,解答区块数学问题需要完成昂贵的计算任务,现在对其细节进行深入的剖析。如果矿工想让自己的区块入选,就必须解答一个与区块相关的问题。该过程称为工作量证明,这意味着矿工必须为此付出努力。

2、矿工的工作量证明

每个矿工在任何时刻都以解答难题的方式积极从事生成下一个即将加入区块链的区块的工作,这就是工作量证明。第一个完成工作量证明的矿工获得的奖励包括新铸的比特币(本书写作时为25枚)以及产出区块交易费的总和。交易费通常是由付款人在发起交易时附加的一笔小钱。所有的比特币将在大约2140年铸造完毕,此后矿工将仅以交易费作为奖励。

因此,可以认为工作量证明是比特币矿工之间的竞赛,竞相发现将要生成区块的具有某种特征的SHA-256哈希值。输出的哈希值是一个非常大的十六进制字符串。矿工的目标就是通过生成符合特征(这个特征指:生成一个小于难度阈值的哈希值)的哈希值来解答问题(找到能生成对应哈希值的输入值)。第一个算出具有这种特征哈希值的矿工,其区块经其他矿工验证后即可加入区块链。

哈希阈值的取值范围是【0000000000000000000000000000000000000000000000000000000000000000,ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff】。

如果将整个哈希阈值的取值范围看做一个概率区间,可以看到,

  • 左边0的数量越多,代表命中的概率越低,命中的难度越大
  • 左边0的数量越少,代表命中的概率越高,命中的难度越低

以比特币公链上的Block 762423为例,

比特币区块内用于阈值测试的数字称为“临时数”(nonce)。矿工不断增加临时数的值,直到区块的哈希值小于阈值。

前面提到过,每个矿工的区块有不同的信息,因此相同的“临时数”会产生不同的哈希值。过程如下图所示。

每台矿工计算机上运行的比特币软件控制着比特币协议不断调整问题的难度,确保大约每10分钟才会有一个矿工解答完问题。目的是让区块链定期加入新的区块,新区块中包含着之前10分钟发出的最新交易。

例如,假设区块链第762423号区块上有以下的SHA-256哈希值(代表难度的哈希阈值):

在上图的例子中,只有前19位数字为0的哈希值低于比特币协议设定的阈值。因此,谁先得到这个字符串谁就胜出了,区块必须不断改变“临时数”直到一个满足所需前几位为0的十六进制数产生。这就像买彩票,彩票买得最多(即生成SHA-256输出值最多)的矿工有最大机会找到含有正确位数0的数字。比特币系统的这一要求导致了一场硬件竞赛,所有人都想创造出每秒能计算出更多哈希值的硬件。

首先发现区块链上第762423号区块哈希值的幸运矿工将临时数增加到3,803,415,639,意味着该矿工需要产生超过38亿个哈希值才能找到含有正确位数0的答案。

如前所述,比特币协议的目标是大约每10分钟创建一个交易区块。如果难度级别确定,更多的矿工加入或更精确地说随着每秒计算出更多的哈希值,10分钟以内发现所需摘要(哈希值)的机会就会增加。一定区块过后,比特币协议评估区块产生的速度:

  • 如果平均小于10分钟,就调高难度级别(即增加前几位0的个数,降低任何单个矿工获得特征摘要的概率)
  • 如果长于10分钟,那就降低难度级别(即减少前几位0的个数,以提高算出的概率)

一旦矿工发现能产生正确哈希值的临时数,就将该区块广播出去,而其他的矿工则在验证后接纳它,并开始着手下一个区块。因此,比特币的运作方式就像每10分钟开一次奖的彩票游戏。谁会成为那个找到正确临时数的幸运矿工呢?

下图说明了工作量证明背后的概念。请注意,区块中含有的信息比图中更多,为简单起见做了一些简化。

3、矿工共识与孤块

如前所述,比特币的正常运行很大程度上依赖于共识。当两个矿工几乎同一时间完成区块时,共识开始发挥作用。

当这种情况发生时,两个矿工都向比特币网络广播已解答的区块。两个区块会被其他所有矿工接收和保留,但是矿工们会在先收到的那个区块的基础上计算下一个区块。假定50%的矿工先收到矿工A的区块,50%的矿工先收到矿工B的区块。在下图中以第29302号区块为例说明这种情况。

这种情况类似于体育比赛进入到了加时阶段。两个区块中哪一个会成为真正区块链的一部分取决于下一个区块解答得有多快,以及解出下一个区块的矿工先收到矿工A的区块还是矿工B的区块。此节点上存在着两个版本的区块链,一半矿工的区块链含有A的29302号区块,另一半矿工的区块链含有B的29302号区块。

哪个版本能幸存取决于矿工能在哪个版本上解出下一个区块,即上图中的29303号。当29303号区块得到解答,该版本的区块链成为二者中最长的链,因此成为正式链。所有矿工丢弃另一版本的区块链,使其成为所谓的孤块。该过程如下图所示。

认定率先达到6个新区块的一条链为有效链(比特币交易的六次确认),即达成共识需要1小时左右。

4、 关于分叉攻击和延迟确认机制背后的原理讨论

我们在此考虑攻击者试图比诚实链更快地生成替代链的情况。

首先要说明的是,即使攻击者做到了,系统也不会接受随意篡改,例如凭空搞出一笔比特币或获得从来不属于攻击者的比特币。节点不会接受无效交易作为支付的输入,诚实节点也绝不会接纳包含这类交易的区块。攻击者只能尝试修改自己的交易,夺回刚刚花掉的那笔钱。

诚实链和攻击链之争可以表达为二项式随机行走。

  • 诚实链延长一个区块作为成功事件,加一分
  • 攻击链延长一个区块作为失败事件,减一分

攻击者从给定的落后点追上的概率类似赌徒破产。假定一个赌徒输了钱,他有永远花不完的钱,并且一直赌下去,试图达到盈亏平衡。我们可以计算出他达到盈亏平衡点的概率,也就是攻击者追上诚实链的概率,如下所示:

  • p=诚实节点找到下一个区块的概率
  • q=攻击者找到下一个区块的概率
  • qz=攻击者落后z个区块时追上诚实链的概率

假设p>q,随着攻击者需要追上的区块数量的增加,追上的概率呈指数下降。由于攻击者的成功概率低,如果他没有在早期幸运地追上,随着他进一步落后,赶上的机会就微乎其微了。

接下来考虑新交易的接收者需要等待多久才能充分确定发送者不能篡改交易。

假设发送者是一个攻击者,他想让接收者相信支付过程已完成,然后过一段时间后再将这笔钱转回给自己。这种情况发生时,接收者会收到警报,但发送者希望为时已晚。

接收者生成一对新密钥,并在临近签名时才将公钥发给发送者。这就防止了发送者提前准备伪造的区块链,直到伪造链幸运地超出诚实链足够长再执行交易。交易一旦发出,伪造者开始在一条包含伪造交易的并行链上秘密工作。

接收者等到交易添加到区块里,并且其后又链接了z个区块。他并不知道攻击者的确切进度,但是假设每个诚实区块要花费一段平均预期时间,那么攻击者的潜在进度是具有以下期望值的泊松分布:

为了得到攻击者仍能追赶上的概率,我们用他每次取得进展的泊松密度乘以他从那一点追上的概率:

对该无限求和公式变换如下:

转换为C代码如下:

运行部分结果,我们可以看出概率随着z增长的指数下降趋势。

求解P小于0.1%:

比特币工作原理的整体性内涵

一些基础概念,

  • 比特币是开源软件
  • 比特币软件制定了矿工和钱包客户端必须遵从的操作指令
  • 比特币软件定义和运行了一套通信协议
  • 区块链的分布式文件共享容许开放记账

比特币是开源软件

开源软件是源代码可供任何人查看的计算机软件。此外,它在一种特殊许可证的控制下,允许任何人修改和使用。有了源代码,程序员可以重建程序(运行在计算机上的二进制文件)并且随意修改。因此涌现出许多比特币的模仿者,这些虚拟货币之间只有一些表面上的区别,大多数都没有包含重大的创新,只有极少数例外,例如Namecoin。这些山寨币大部分仅修改了区块创建的速度、流通钱币的总量以及采用的加密哈希算法。

开放软件的源代码让专家可以分析和验证软件的完整性,即确定软件做了它声称要做的事。Linux就是开源软件的一个突出例子,它抢走了微软的Windows在服务器行业的市场份额。由于其开源性,发现问题和修复速度要比专有软件快得多,因为多个程序员都在不断地检查和改进代码。Linux已经表明大众利益和自身利益可以同时满足,至少在管理开源软件方面是这样。这种开放性保证了在专有软件中无法达到的高水平完整性,专有软件所在的公司只能靠声誉来保证它做好该做的事。

比特币软件制定了矿工和钱包客户端必须遵从的操作指令

比特币在互联网上运行时还使用了一套矿工和钱包客户端必须遵从的预定协议。钱包客户端是智能手机上的App或者个人电脑上的程序,它可以通过钱包客户端发起支付交易,然后由矿工在交易被纳入区块链之前验证。如果矿工不遵守协议,其工作将被其他矿工拒绝,也就不能为比特币网络的运行做出贡献。

一个针对比特币的代表性争论是中本聪为比特币设定的2100万的发行上限。一旦达到上限,怎么才能阻止有人提高上限呢?事实上无法阻止,但需要大多数矿工的合作才能实现这个修改。即便在大多数矿工同意解除限制的情况下,如果某些矿工不同意,也将会导致区块链的分叉。赞成取消限制的矿工将会使用一个版本的区块链,不赞成的矿工将会使用另外一个版本。实际上,这就会产生两种虚拟货币,即“原始比特币”和“量化宽松比特币”。长期来看,其中一个版本将会更久和更好地保持价值,并因此成为首选版本,而另外一个版本的价值将会下降。哪个版本将会把价值保持得更久,并留住比特币用户的兴趣?

至少到目前为止,比特币开发社区对软件变更仍持非常保守的态度,实施重大变更的首选方法是创造新的虚拟币,有些对货币的数量不做任何限制。

区块链的分布式文件共享容许开放记账

支撑比特币的最后一个特征是,不仅软件是开源的,而且记账的方式也是公开的。由于彻底改变了记账方式,一些人已经将区块链命名为“三式记账法”。任何人都可以检查区块链并且验证记账是否符合当前比特币协议的要求和规范。区块链的分布式文件共享意味着任何运行比特币软件的人都连接了比特币网络,并可以访问区块链。

回到顶部(go to top)

五、比特币基础协议存在的瓶颈

比特币(bitcoin)诞生于2008年的一篇论文《A Peer-to-Peer Electronic Cash System》并规定了一些基础协议:

  • 比特币总量为2100万枚
  • 平均10分钟诞生一个区块,也即比特币网络每10分钟最多只能处理2000多笔交易,换算一下,即处理速度为3~7笔/秒。作为对比,支付宝一秒处理12万笔交易。
  • 被写入区块的交易按照手续费高低排优先级
  • 区块的大小只有 1MB,一笔交易大概是500字节左右,因此一个区块最多只能包含2000多笔交易
  • 挖到新区块的矿工将获得奖励,一开始(2008年)是50个比特币,然后每4年减半,2018年是12.5个比特币。那么到了2140年,矿工将得不到任何奖励,比特币的数量也将停止增加。这时,矿工的收益就完全依靠交易手续费了。
  • 一笔交易确认需要等待6个区块

可能因为货币量不足导致流通性短缺通缩

比特币的重大意义不仅限于支付系统的简捷性,比特币的供应量是由该软件及其底层协议确定的,最终只可能会有2100万枚比特币,最后一枚比特币预计在2140年产生。

这种限量的货币供应引发了许多争议,其中更多的是由于缺乏对协议和经济学知识的理解而产生的,而并非软件本身的问题。2100万枚比特币看起来根本不够70亿人口使用,但是这种货币高度可分割。目前该软件所允许的最小面值不像通常货币是0.01元,而是0.00000001BTC(10-8BTC),这个面值叫1聪,是以比特币之父中本聪的名字命名的。所以1枚比特币里就有1亿聪,而2100万BTC的最大供应量就是2100万亿聪。

收益获得权并不真的平等

细心的读者可能已经发现,这套民主思想的技术,似乎并没有那么公平。

如果你有足够资本建立矿场,将会持有大量的比特币(尤其前期难度不高)。资本逐渐慢慢聚拢到算力集中的少数矿场的手里,形成马太效应,去中心化效应减弱。比如:现在的比特大陆(一度接近51%的算力),郭宏才也是这样挖矿起家,现在挖矿已经不是小散户玩的起的游戏了。

支撑交易的性能和容量较低

比特币的区块大小为1M,如果比特币交易越来越多,很多交易就不会在发生后的第一个区块被打包和确认,可能要等好几个区块,甚至更久。比特币交易的拥堵导致了转账速度变慢,手续费也越来越高。

中本聪曾提出了在比特币容量不够用的时候应该怎样进行扩容。白皮书发布之后,他自己在社区留言的第一个问题,就指出了比特币未来的扩容隐患。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门