Skip to content

Latest commit

 

History

History
99 lines (67 loc) · 6.99 KB

other.md

File metadata and controls

99 lines (67 loc) · 6.99 KB

熱點問題

設計中的權衡

比特幣的設計目標在於支持一套安全、開放、分佈式的數字貨幣系統。圍繞這一目標,比特幣協議的設計中很多地方都體現了權衡(trade-off)的思想。

  • 區塊容量:更大的區塊容量可以帶來更高的交易吞吐率,但會增加挖礦成本,帶來中心化的風險,同時增大存儲的代價。兼顧多方面的考慮,當前的區塊容量上限設定為 1MB。
  • 出塊間隔時間:更短的出塊間隔可以縮短交易確認的時間,但也可能導致分叉增多,降低網絡可用性。
  • 腳本支持程度:更強大的腳本指令集可以帶來更多靈活性,但也會引入更多安全風險。

分叉

比特幣協議不會一成不變。當需要修復漏洞、擴展功能或調整結構時,比特幣需要在全網的配合下進行升級。升級通常涉及更改交易的數據結構或區塊的數據結構。

由於分佈在全球的節點不可能同時完成升級來遵循新的協議,因此比特幣區塊鏈在升級時可能發生分叉(Fork)。對於一次升級,如果把網絡中升級了的節點稱為新節點,未升級的節點稱為舊節點,根據新舊節點相互兼容性上的區別,可分為軟分叉(Soft Fork)和硬分叉(Hard Fork)。

  • 如果舊節點仍然能夠驗證接受新節點產生的交易和區塊,則稱為軟分叉。舊節點可能不理解新節點產生的一部分數據,但不會拒絕。網絡既向後和向前兼容,因此這類升級可以平穩進行。
  • 如果舊節點不接受新節點產生的交易和區塊,則稱為硬分叉。網絡只向後兼容,不向前兼容。這類升級往往引起一段時間內新舊節點所認可的區塊不同,分出兩條鏈,直到舊節點升級完成。

儘管通過硬分叉升級區塊鏈協議的難度大於軟分叉,但軟分叉能做的事情畢竟有限,一些大膽的改動只能通過硬分叉完成。

交易延展性

交易延展性(Transaction Malleablility)是比特幣的一個設計缺陷。簡單來講,是指當交易發起者對交易簽名(sign)之後,交易 ID 仍然可能被改變。

下面是一個比特幣交易的例子。

{
  "txid": "f200c37aa171e9687452a2c78f2537f134c307087001745edacb58304053db20",
  "version": 1,
  "locktime": 0,
  "vin": [
    {
      "txid": "21f10dbfb0ff49e2853629517fa176dc00d943f203aae3511288a7dd89280ac2",
      "vout": 0,
      "scriptSig": {
        "asm": "304402204f7fb0b1e0d154db27dbdeeeb8db7b7d3b887a33e712870503438d8be2d66a0102204782a2714215dc0d581e1d435b41bc6eced2c213c9ba0f993e7fcf468bb5d311[ALL] 025840d511c4bc6690916270a54a6e9290fab687f512c18eb2df0428fa69a26299",
        "hex": "47304402204f7fb0b1e0d154db27dbdeeeb8db7b7d3b887a33e712870503438d8be2d66a0102204782a2714215dc0d581e1d435b41bc6eced2c213c9ba0f993e7fcf468bb5d3110121025840d511c4bc6690916270a54a6e9290fab687f512c18eb2df0428fa69a26299"
      },
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 0.00167995,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 7c4338dea7964947b3f0954f61ef40502fe8f791 OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a9147c4338dea7964947b3f0954f61ef40502fe8f79188ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "1CL3KTtkN8KgHAeWMMWfG9CPL3o5FSMU4P"
        ]
      }
    }
  ]
}

發起者對交易的簽名(scriptSig)位於交易的輸入(vin)當中,屬於交易內容的一部分。交易 ID(txid)是整個交易內容的 Hash 值。這就造成了一個問題:攻擊者(尤其是簽名方)可以通過改變 scriptSig 來改變 txid,而交易仍舊保持合法。例如,反轉 ECDSA 簽名過程中的 S 值,簽名仍然合法,交易仍然能夠被傳播。

這種延展性攻擊能改變交易 ID,但交易的輸入和輸出不會被改變,所以攻擊者不會直接盜取比特幣。這也是為什麼這一問題能在比特幣網絡中存在如此之久,而仍未被根治。

然而,延展性攻擊仍然會帶來一些問題。比如,在原始交易未被確認之前廣播 ID 改變了的交易可能誤導相關方對交易狀態的判斷,甚至發動拒絕服務攻擊;多重簽名場景下,一個簽名者有能力改變交易 ID,給其他簽名者的資產帶來潛在風險。同時,延展性問題也會阻礙閃電網絡等比特幣擴展方案的實施。

擴容之爭

比特幣當前將區塊容量限制在 1MB 以下。如圖所示,隨著用戶和交易量的增加,這一限制已逐漸不能滿足比特幣的交易需求,使得交易日益擁堵、交易手續費不斷上漲。

日益增加的區塊容量

關於比特幣擴容的持續爭論從 2015 年便已開始,期間有一系列方案被擺上檯面,包括各種鏈上擴容提議、用側鏈或閃電網絡擴展比特幣等。考慮到比特幣複雜的社區環境,其擴容方案早已不是一方能說了算;而任何一個方案想讓要達成廣泛共識都比較困難,不同的方案之間也很難調和。

當前,擴容之爭主要集中在兩派:代表核心開發者的 Bitcoin Core 團隊主推的隔離見證方案,和 Bitcoin Unlimited 團隊推出的方案。

隔離見證方案

隔離見證(Segregated Witness,簡稱 SegWit)是指將交易中的簽名部分從交易的輸入中隔離出來,放到交易末尾的被稱為見證(Witness)的字段當中。

對交易 ID 的計算將不再包含這一簽名部分,所以這也是延展性問題的一種解法,給引入閃電網絡等第二層協議增強了安全性。

同時,隔離見證會將區塊容量上限理論上提高到 4MB。對隔離見證的描述可詳見五個比特幣改進協議(Bitcoin Improvement Proposal):BIP 141 ~ BIP 145。

Bitcoin Unlimited 方案

Bitcoin Unlimited 方案(簡稱 BU)是指擴展比特幣客戶端,使礦工可以自由配置他們想要生成和驗證的區塊的容量。

根據方案的設想,區塊容量的上限會根據眾多節點和礦工的配置進行自然收斂。Bitcoin Unlimited Improvement Proposal(BUIP) 001 中表述了這一對比特幣客戶端的拓展提議,該方案已獲得一些大型礦池的支持和部署。

比特幣的監管和追蹤

比特幣的匿名特性,使得其上交易的監管變得十分困難。

不少非法分子利用這一點,通過比特幣轉移資金。例如 WannaCry 網絡病毒向受害者勒索比特幣,短短三天時間裡傳播並影響到全球 150 多個國家。儘管這些不恰當的行為與比特幣項目自身並無直接關係,但都或多或少給比特幣社區帶來了負面影響。

實際上,認為通過比特幣就可以實現完全匿名化並不現實。雖然交易賬戶自身是匿名的 Hash 地址,但一些研究成果(如《An analysis of anonymity in the bitcoin system》)表明,通過分析大量公開可得的交易記錄,有很大概率可以追蹤到比特幣的實際轉移路線,甚至可以追蹤到真實用戶。