區塊鏈學習之比特幣(六)

比特幣項目簡介

比特幣是基於區塊鏈技術的一種數字貨幣實現,比特幣網絡是歷史上首個通過大規模、長時間檢查的數字貨幣系統算法

比特幣網絡在功能上具備以下特色:安全

  • 去中心化: 意味着沒有任何獨立個體能夠對網絡中的交易進行破壞,任何交易請求都須要大多數參與者的共識。
  • 匿名性: 比特幣網絡中帳戶地址是匿名的,沒法從交易信息關聯到具體的個體,但這也意味着很難進行審計
  • 通脹預防: 比特幣的發行須要經過挖礦計算來進行,發行量每四年減半,總量上限爲2100萬枚,沒法被超發。

原理和設計

比特幣網絡是一個分佈式的點對點網絡,網絡中的礦工經過「挖礦」來完成對交易記錄的記帳過程,維護網絡的正常運行。服務器

區塊鏈網絡提供一個公共可見的記帳本,該記帳本並不是記錄每一個帳戶的餘額,而是用來記錄發生過得交易的歷史信息。該設計能夠避免重放攻擊,即某個合法交易被屢次從新發送形成攻擊。網絡

基本交易過程

基本交易過程: 每次發生交易,用戶須要將新交易記錄寫到比特幣區塊鏈網絡中,等網絡確認後便可認爲交易完成。每一個交易包括一些輸入和一些輸出,未經使用的交易的輸出(Unspent Transaction Outputs,UTXO)能夠被新的交易引用做爲合法的輸入,被使用過的交易的輸出(Spent Transaction Outputs,STO)則沒法被引用做爲合法輸入。一筆合法的交易,即引用某些已存在交易的UTXO做爲交易的輸入,並生成新的輸出的過程數據結構

在交易過程當中,轉帳方須要經過簽名腳原本證實本身是UTXO的合法使用者,而且指定輸出腳原本限制將來本交易的使用者(收款方)分佈式

clipboard.png

注意: 剛放進網絡中的交易(深度爲0)並不是是實時獲得確認的。進入網絡中的交易存在着被推翻的可能性,通常要再生成幾個新的區塊(深度大於0)才認爲該交易被確認。工具

重要概念

帳戶/地址
比特幣採用了非對稱的加密算法,用戶本身保留私鑰,對本身發出的交易進行簽名確認,並公開私鑰。
比特幣的帳戶地址其實就是用戶公鑰通過一系列Hash及編碼運算後生成的160位(20字節)的字符串。性能

交易
交易是完成比特幣功能的核心概念區塊鏈

交易腳本
腳本是保障交易完成(主要用於檢驗交易是否合法)的核心機制,當所依附的交易發生時被觸發。經過腳本機制而非寫死交易過程,比特幣網絡實現了必定的可擴展性。比特幣腳本語言是一種非圖靈完備的語言,相似Forth語言。編碼

通常每一個交易都會包括:

  • 輸出腳本: 通常由付款方對交易設置鎖定,用來對能動用這筆交易輸出(例如,要花費交易的輸出)的對象(收款方)進行權限控制,例如限制必須是某個公鑰的擁有者才能花費這筆交易。
  • 認領腳本: 用來證實本身能夠知足交易輸出腳本的鎖定條件,即對某個交易的輸出(比特幣)的擁有權。

區塊
比特幣區塊由區塊頭和區塊體組成,要對區塊鏈的完整性進行檢查,只須要檢查各個區塊頭信息便可,無需獲取具體的交易內容,這也是簡單交易驗證的基本原理。

創新設計

比特幣在設計上的創新點主要體如今避免做惡、負反饋調節和共識機制三個方面。

避免做惡
避免做惡基於經濟博弈原理。經過經濟博弈來讓合做者獲得利益,讓非合做者遭受損失和風險。

負反饋調節
比特幣網絡中礦工越多,系統就越穩定,比特幣價值就越高,但挖到礦的機率會下降。反之,網絡中礦工減小,會讓系統更容易被攻擊,比特幣價值下降,但挖到礦的機率會提升。

共識機制
傳統共識問題每每是考慮在一個相對封閉的分佈式系統中,容許同時存在正常節點、故障節點如何快速達成一致

比特幣提出了基於Proof of Work(Pow)的共識機制:基於機率、隨時間逐步加強確認的共識。現有達成的結果在理論上可能被推翻,只是攻擊者要付出的代價隨時間而指數級上升,被推翻的可能性隨之指數級降低。
可用性的提高:考慮到Internet的尺度,達成共識的時間相對比較長,所以按照區塊(一組交易)來進行階段性的確認(快照),從而提升網絡總體的可用性。
減小提案的個數:限制網絡中共識的噪聲,經過大量的Hash計算和少數的合法結果來限制合法提案的個數,進一步提升網絡中共識的穩定性。

挖礦

基本原理

挖礦是參與維護比特幣網絡的節點,經過協助生成新區塊來獲取必定量新增比特幣的過程。

挖礦過程

具體過程: 參與者綜合上一個區塊的Hash值,上一個區塊生成以後的新的驗證過得交易內容,再加上本身猜想的一個隨機數X,一塊兒打包到一個候選新區塊,讓新區塊的Hash值小於比特幣網絡中給定的一個數。

系統每隔兩週會根據上一週期的挖礦時間來調整挖礦難度(經過調整限制數的大小),調節生成區塊的時間穩定在10分鐘左右。爲了不震盪,每次調整的最大幅度爲4倍。

如何看待挖礦

礦工個體達到全網1/3的算力,比特幣網絡就存在被破壞的風險了;達到1/2的算力,從機率上就掌控了整個網絡了。可是要實現這麼大的算力,將須要付出巨大的經濟成本。除了儘可能避免將算力放到同一個組織手裏,沒太好的辦法,這是目前Pow機制自身形成的。

共識機制

比特幣區塊鏈採用 PoW 的機制來實現共識,對PoW試圖改進衍生了PoS和DPoS, 原理仍然爲經過經濟懲罰來限制惡意參與。

工做量證實

工做量證實(Pow)經過計算來猜想一個數值(nonce),使得拼湊上交易數據後內容的Hash值知足規定的上線。因爲Hash難題在目前計算模型下須要大量的計算,這就保證在一段時間內系統中只能出現少數合法提案。反過來,可以提出合提案也證實提案者確實付出了必定的工做量。

權益證實

權益證實:相似於現實生活中的股東機制,擁有股份越多的人越容易獲取記帳權(同時更傾向於維護網絡的正常工做)

典型過程:經過保證金(代幣、資產、名聲等具有價值屬性的物品便可)來對賭一個合法的塊成爲新的區塊,收益爲抵押資本的利息和交易服務費。提供證實的保證金(例如經過轉帳貨幣記錄)越多,則得到記帳權的機率就越大。合法記帳者能夠得到收益。

PoS試圖解決在PoW中大量資源被浪費的缺點,受到了普遍的關注。惡意參與者將存在保證金被罰沒的風險,即損失經濟利益。

通常狀況下,對於PoS來講,須要掌握超過全網1/3的資源,纔有可能左右最終的結果。

閃電網絡

比特幣的一大缺點爲交易性能:全網每秒7筆左右的交易速度,遠低於傳統金融交易系統;同時,等待6個區塊的可信確認將致使約一個小時的最終確認時間。爲了提高性能,提出了閃電網絡等創新設計

閃電網絡: 將大量交易放到比特幣區塊鏈以外進行,只把關鍵環節放到 鏈上進行確認。

閃電網絡主要經過引入智能合約的思想來完善鏈下的交易渠道。核心的思想主要有兩個:

  • RSMC: 解決鏈下交易的確認問題
  • HTLC: 解決支付通道的問題

RSMC

RSMC 即 「可撤銷的順序成熟度合同」。主要原理相似於資金池機制。

基本過程: 首先假定雙方之間存在一個「微支付通道」(資金池)。交易雙方先預存一部分資金到「微支付通道」裏,初始狀況下雙方的分配方案等於預存的金額。每次發生交易,須要對交易後產生資金的分配結果共同進行確認,同時簽字把舊版本的分配方案做廢掉。任何一方須要提現時,能夠將他手裏雙方簽署過得交易結果寫到區塊鏈網絡中,從而被確認。

優勢: RSMC整個過程只有提現時才須要經過區塊鏈,能夠實現大量中間交易發生在鏈外。

HTLC

微支付通道是經過HTLC來實現的,中文意思是「哈希的帶時鐘的合約」。這其實就是限時轉帳

基本過程:經過智能合約,雙方約定轉帳方先凍結一筆錢,並提供一個哈希值,若是在必定時間內有人能提出以個字符串,使得它的哈希後的值與已知值匹配(實際上意味着轉帳方受權了接收方來提現),則這筆錢轉給接收方

閃電網絡的概念

RSMC 保障了兩我的之間的直接交易能夠在鏈下完成,HTLC保障了任意兩我的之間轉帳均可以經過一條「支付」通道來完成。閃電網絡整合者兩種機制,就能夠實現任意兩我的之間的交易都在鏈下完成。
在整個交易中,智能合約起到了中介的重要角色,而區塊鏈網絡則確保最終的交易結果被確認。

側鏈

側鏈協議:容許資產在比特幣區塊鏈和其餘區塊鏈之間互轉。簡單來講,以比特幣區塊鏈做爲主鏈,其餘區塊鏈做爲側鏈,兩者經過雙向掛鉤,實現比特幣從主鏈轉移到側鏈進行流通。(實現了比特幣區塊鏈的擴展)

SPV 證實

在比特幣系統中驗證交易時,涉及交易合法性檢查、雙重花費檢查、腳本檢查等。因爲驗證過程須要完整的UTXO記錄,一般要由運行着完整功能幾點的礦工來完成。而不少時候用戶只關心與本身相關的那些交易,只但願可以知道交易是否合法、是否已在區塊鏈中存在了足夠的時間(即得到足夠的去人),而不須要本身成爲完整節點作出完整性驗證。

簡單支付驗證(Simplified Payment Verfication, SPV): 可以以較小的代價判斷某個支付交易是否已經被驗證過(存在於區塊鏈中),以及獲得了多少算力保護。SPV 客戶端只須要下載全部區塊的去塊頭,進行簡單的定位和計算工做,就能夠驗證結論。

側鏈協議中,用SPV來證實一個動做倒是已經在區塊鏈中發生過,稱爲SPV證實。SPV證實包括兩部份內容:

  • 一組區塊頭的列表,表示工做量證實
  • 一個特定輸出確實存在於某個區塊中的密碼學證實

雙向掛鉤

側鏈協議的設計難點在於如何讓資產在主鏈和側鏈之間安全流轉。

具體來講,協議採用雙向掛鉤機制實現比特幣向側鏈的轉移和返回。主鏈和側鏈須要對對方的特定交易作SPV驗證。過程以下:

clipboard.png

熱點問題

設計中的權衡

比特幣的設計目標在於支持一套安全、開放、分佈式的數字貨幣系統。圍繞着一目標,比特幣協議的設計中不少地方都體現了權衡的思想:

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

分叉

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

分佈在全球的節點不可能同時完成升級來遵循新的協議,所以升級時可能出現分叉。把網絡中升級的幾點稱爲新幾點,未升級的節點稱爲舊節點,根據新舊節點相互兼容性上的區別,可分爲軟分叉硬分叉

  • 軟分叉: 若是舊節點仍然可以驗證接受新節點產生的交易和區塊,則稱爲軟分叉。
  • 硬分叉: 若是舊節點不能接受新節點產生的交易和區塊,則稱爲硬分叉。

硬分叉升級區塊鏈協議的難度大於軟分叉,但軟分叉能作的事情有限,大的改動只能經過硬分叉來完成。

交易延展性

交易延展性:是比特幣的一個設計缺陷,是指當交易發起者對交易簽名以後,交易ID仍然可能被改變。

延展性攻擊會帶來一些問題:

  • 在原始交易未被確認以前廣播ID改變的交易可能誤導相關方對交易狀態的判斷,甚至發動拒絕服務攻擊
  • 多重簽名場景下:一個簽名者有能力改變交易ID,會給其餘簽名者的資產帶來潛在風險
  • 阻礙閃電網絡等比特幣擴展方案的實施

擴容之爭

比特幣區塊容量如今在1MB如下,交易量已不能知足交易需求。比特幣的一系列的方案提出:鏈上擴容提議、用側鏈或閃電網絡擴展比特幣等

擴容之爭主要有兩派提出的方案:

  • 核心開發者的 Bitcoin Core 團隊主推的隔離見證方案(SegWit): 將交易中的簽名部分從交易的輸入中隔離出來,放到交易末尾的被稱爲見證的字段當中。同時,將區塊容量上限理論上提升到4MB
  • Bitcoin Unlimited 團隊推出的方案(BU): 擴展比特幣客戶端,使礦工能夠自由配置他們想要生成和驗證的區塊容量

比特幣的監管和追蹤

比特幣的匿名特性,使得其交易的監管變得十分困難。
不過經過分析大量公開可得的交易記錄,有很大機率能夠追蹤到比特幣的實際轉移路線,甚至能夠追蹤到真實用戶

相關工具

客戶端

比特幣客戶端用於和比特幣網絡進行交互,同時也能夠參與網絡的維護。
客戶端分爲三種:

  • 完整客戶端: 存儲全部的交易歷史記錄,功能完備
  • 輕量級客戶端: 不保存交易副本,交易須要向別人查詢
  • 在線客戶端: 經過網頁模式來瀏覽第三方服務器提供的服務

錢包

比特幣錢包能夠存儲和保護用戶的私鑰,並提供查詢比特幣餘額、收發比特幣等功能。
根據私鑰存儲方式不一樣,錢包分爲如下幾種:

  • 離線錢包: 離線存儲私鑰,也稱爲「冷錢包」,安全性相對較強,但沒法直接發送交易,便利性差
  • 本地錢包: 用本地設備存儲私鑰,可直接向比特幣網絡發送交易,易用性強,但本地設備存在被攻擊風險
  • 在線錢包:用錢包服務器存儲經用戶口令加密過得私鑰,易用性強,但錢包服務器一樣可能被攻擊
  • 多重簽名錢包:由多方共同管理一個錢包地址,好比2 of 3 模式下,集合三位管理者中兩位的私鑰即可以發送交易

礦機

比特幣礦機是專門爲「挖礦」設計的硬件設備,目前主要包括基於GPU和ASIC芯片的專用礦機。

總結

clipboard.png

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息