比特幣項目簡介
比特幣是基于區(qū)塊鏈技術(shù)的一種數(shù)字貨幣實現(xiàn),比特幣網(wǎng)絡(luò)是歷史上首個經(jīng)過大規(guī)模惠勒、長時間檢查的數(shù)字貨幣系統(tǒng)
比特幣網(wǎng)絡(luò)在功能上具有如下特點:
- 去中心化: 意味著沒有任何獨立個體可以對網(wǎng)絡(luò)中的交易進行破壞,任何交易請求都需要大多數(shù)參與者的共識河狐。
- 匿名性: 比特幣網(wǎng)絡(luò)中賬戶地址是匿名的郎哭,無法從交易信息關(guān)聯(lián)到具體的個體狂鞋,但這也意味著很難進行審計
- 通脹預(yù)防: 比特幣的發(fā)行需要通過挖礦計算來進行著淆,發(fā)行量每四年減半劫狠,總量上限為2100萬枚拴疤,無法被超發(fā)赖瞒。
原理和設(shè)計
比特幣網(wǎng)絡(luò)是一個分布式的點對點網(wǎng)絡(luò),網(wǎng)絡(luò)中的礦工通過“挖礦”來完成對交易記錄的記賬過程珍坊,維護網(wǎng)絡(luò)的正常運行岩四。
區(qū)塊鏈網(wǎng)絡(luò)提供一個公共可見的記賬本,該記賬本并非記錄每個賬戶的余額劫笙,而是用來記錄發(fā)生過得交易的歷史信息。該設(shè)計可以避免重放攻擊,即某個合法交易被多次重新發(fā)送造成攻擊孕惜。
基本交易過程
基本交易過程: 每次發(fā)生交易,用戶需要將新交易記錄寫到比特幣區(qū)塊鏈網(wǎng)絡(luò)中晨炕,等網(wǎng)絡(luò)確認后即可認為交易完成衫画。每個交易包括一些輸入和一些輸出,未經(jīng)使用的交易的輸出(Unspent Transaction Outputs,UTXO)可以被新的交易引用作為合法的輸入瓮栗,被使用過的交易的輸出(Spent Transaction Outputs,STO)則無法被引用作為合法輸入削罩。一筆合法的交易,即引用某些已存在交易的UTXO作為交易的輸入费奸,并生成新的輸出的過程
在交易過程中弥激,轉(zhuǎn)賬方需要通過簽名腳本來證明自己是UTXO的合法使用者,并且指定輸出腳本來限制未來本交易的使用者(收款方)
注意: 剛放進網(wǎng)絡(luò)中的交易(深度為0)并非是實時得到確認的愿阐。進入網(wǎng)絡(luò)中的交易存在著被推翻的可能性微服,一般要再生成幾個新的區(qū)塊(深度大于0)才認為該交易被確認。
重要概念
賬戶/地址
比特幣采用了非對稱的加密算法缨历,用戶自己保留私鑰以蕴,對自己發(fā)出的交易進行簽名確認,并公開私鑰辛孵。
比特幣的賬戶地址其實就是用戶公鑰經(jīng)過一系列Hash及編碼運算后生成的160位(20字節(jié))的字符串丛肮。
交易
交易是完成比特幣功能的核心概念
交易腳本
腳本是保障交易完成(主要用于檢驗交易是否合法)的核心機制,當所依附的交易發(fā)生時被觸發(fā)魄缚。通過腳本機制而非寫死交易過程宝与,比特幣網(wǎng)絡(luò)實現(xiàn)了一定的可擴展性。比特幣腳本語言是一種非圖靈完備的語言鲜滩,類似Forth語言伴鳖。
一般每個交易都會包括:
- 輸出腳本: 一般由付款方對交易設(shè)置鎖定,用來對能動用這筆交易輸出(例如徙硅,要花費交易的輸出)的對象(收款方)進行權(quán)限控制榜聂,例如限制必須是某個公鑰的擁有者才能花費這筆交易。
- 認領(lǐng)腳本: 用來證明自己可以滿足交易輸出腳本的鎖定條件嗓蘑,即對某個交易的輸出(比特幣)的擁有權(quán)须肆。
區(qū)塊
比特幣區(qū)塊由區(qū)塊頭和區(qū)塊體組成匿乃,要對區(qū)塊鏈的完整性進行檢查,只需要檢查各個區(qū)塊頭信息即可豌汇,無需獲取具體的交易內(nèi)容幢炸,這也是簡單交易驗證的基本原理。
創(chuàng)新設(shè)計
比特幣在設(shè)計上的創(chuàng)新點主要體現(xiàn)在避免作惡拒贱、負反饋調(diào)節(jié)和共識機制三個方面宛徊。
避免作惡
避免作惡基于經(jīng)濟博弈原理。通過經(jīng)濟博弈來讓合作者得到利益逻澳,讓非合作者遭受損失和風險闸天。
負反饋調(diào)節(jié)
比特幣網(wǎng)絡(luò)中礦工越多,系統(tǒng)就越穩(wěn)定斜做,比特幣價值就越高苞氮,但挖到礦的概率會降低。反之瓤逼,網(wǎng)絡(luò)中礦工減少笼吟,會讓系統(tǒng)更容易被攻擊,比特幣價值降低霸旗,但挖到礦的概率會提高贷帮。
共識機制
傳統(tǒng)共識問題往往是考慮在一個相對封閉的分布式系統(tǒng)中,允許同時存在正常節(jié)點定硝、故障節(jié)點如何快速達成一致
比特幣提出了基于Proof of Work(Pow)的共識機制:基于概率皿桑、隨時間逐步增強確認的共識。現(xiàn)有達成的結(jié)果在理論上可能被推翻蔬啡,只是攻擊者要付出的代價隨時間而指數(shù)級上升诲侮,被推翻的可能性隨之指數(shù)級下降。
可用性的提升:考慮到Internet的尺度箱蟆,達成共識的時間相對比較長沟绪,因此按照區(qū)塊(一組交易)來進行階段性的確認(快照),從而提高網(wǎng)絡(luò)整體的可用性空猜。
減少提案的個數(shù):限制網(wǎng)絡(luò)中共識的噪聲绽慈,通過大量的Hash計算和少數(shù)的合法結(jié)果來限制合法提案的個數(shù),進一步提高網(wǎng)絡(luò)中共識的穩(wěn)定性辈毯。
挖礦
基本原理
挖礦是參與維護比特幣網(wǎng)絡(luò)的節(jié)點坝疼,通過協(xié)助生成新區(qū)塊來獲取一定量新增比特幣的過程。
挖礦過程
具體過程: 參與者綜合上一個區(qū)塊的Hash值谆沃,上一個區(qū)塊生成之后的新的驗證過得交易內(nèi)容钝凶,再加上自己猜測的一個隨機數(shù)X,一起打包到一個候選新區(qū)塊唁影,讓新區(qū)塊的Hash值小于比特幣網(wǎng)絡(luò)中給定的一個數(shù)耕陷。
系統(tǒng)每隔兩周會根據(jù)上一周期的挖礦時間來調(diào)整挖礦難度(通過調(diào)整限制數(shù)的大械嗝),調(diào)節(jié)生成區(qū)塊的時間穩(wěn)定在10分鐘左右哟沫。為了避免震蕩饺蔑,每次調(diào)整的最大幅度為4倍。
如何看待挖礦
礦工個體達到全網(wǎng)1/3的算力嗜诀,比特幣網(wǎng)絡(luò)就存在被破壞的風險了猾警;達到1/2的算力,從概率上就掌控了整個網(wǎng)絡(luò)了裹虫。但是要實現(xiàn)這么大的算力肿嘲,將需要付出巨大的經(jīng)濟成本。除了盡量避免將算力放到同一個組織手里筑公,沒太好的辦法,這是目前Pow機制自身造成的尊浪。
共識機制
比特幣區(qū)塊鏈采用 PoW 的機制來實現(xiàn)共識匣屡,對PoW試圖改進衍生了PoS和DPoS, 原理仍然為通過經(jīng)濟懲罰來限制惡意參與。
工作量證明
工作量證明(Pow)通過計算來猜測一個數(shù)值(nonce)拇涤,使得拼湊上交易數(shù)據(jù)后內(nèi)容的Hash值滿足規(guī)定的上線捣作。由于Hash難題在目前計算模型下需要大量的計算,這就保證在一段時間內(nèi)系統(tǒng)中只能出現(xiàn)少數(shù)合法提案鹅士。反過來券躁,能夠提出合提案也證明提案者確實付出了一定的工作量。
權(quán)益證明
權(quán)益證明:類似于現(xiàn)實生活中的股東機制掉盅,擁有股份越多的人越容易獲取記賬權(quán)(同時更傾向于維護網(wǎng)絡(luò)的正常工作)
典型過程:通過保證金(代幣也拜、資產(chǎn)、名聲等具備價值屬性的物品即可)來對賭一個合法的塊成為新的區(qū)塊趾痘,收益為抵押資本的利息和交易服務(wù)費慢哈。提供證明的保證金(例如通過轉(zhuǎn)賬貨幣記錄)越多,則獲得記賬權(quán)的概率就越大永票。合法記賬者可以獲得收益卵贱。
PoS試圖解決在PoW中大量資源被浪費的缺點,受到了廣泛的關(guān)注侣集。惡意參與者將存在保證金被罰沒的風險键俱,即損失經(jīng)濟利益。
一般情況下世分,對于PoS來說编振,需要掌握超過全網(wǎng)1/3的資源,才有可能左右最終的結(jié)果罚攀。
閃電網(wǎng)絡(luò)
比特幣的一大缺點為交易性能:全網(wǎng)每秒7筆左右的交易速度党觅,遠低于傳統(tǒng)金融交易系統(tǒng)雌澄;同時,等待6個區(qū)塊的可信確認將導致約一個小時的最終確認時間杯瞻。為了提升性能镐牺,提出了閃電網(wǎng)絡(luò)等創(chuàng)新設(shè)計
閃電網(wǎng)絡(luò): 將大量交易放到比特幣區(qū)塊鏈之外進行,只把關(guān)鍵環(huán)節(jié)放到 鏈上進行確認魁莉。
閃電網(wǎng)絡(luò)主要通過引入智能合約的思想來完善鏈下的交易渠道睬涧。核心的思想主要有兩個:
- RSMC: 解決鏈下交易的確認問題
- HTLC: 解決支付通道的問題
RSMC
RSMC 即 “可撤銷的順序成熟度合同”。主要原理類似于資金池機制旗唁。
基本過程: 首先假定雙方之間存在一個“微支付通道”(資金池)畦浓。交易雙方先預(yù)存一部分資金到“微支付通道”里,初始情況下雙方的分配方案等于預(yù)存的金額检疫。每次發(fā)生交易讶请,需要對交易后產(chǎn)生資金的分配結(jié)果共同進行確認,同時簽字把舊版本的分配方案作廢掉屎媳。任何一方需要提現(xiàn)時夺溢,可以將他手里雙方簽署過得交易結(jié)果寫到區(qū)塊鏈網(wǎng)絡(luò)中,從而被確認烛谊。
優(yōu)點: RSMC整個過程只有提現(xiàn)時才需要通過區(qū)塊鏈风响,可以實現(xiàn)大量中間交易發(fā)生在鏈外。
HTLC
微支付通道是通過HTLC來實現(xiàn)的丹禀,中文意思是“哈希的帶時鐘的合約”状勤。這其實就是限時轉(zhuǎn)賬
基本過程:通過智能合約,雙方約定轉(zhuǎn)賬方先凍結(jié)一筆錢双泪,并提供一個哈希值持搜,如果在一定時間內(nèi)有人能提出以個字符串,使得它的哈希后的值與已知值匹配(實際上意味著轉(zhuǎn)賬方授權(quán)了接收方來提現(xiàn))攒读,則這筆錢轉(zhuǎn)給接收方
閃電網(wǎng)絡(luò)的概念
RSMC 保障了兩個人之間的直接交易可以在鏈下完成朵诫,HTLC保障了任意兩個人之間轉(zhuǎn)賬都可以通過一條“支付”通道來完成。閃電網(wǎng)絡(luò)整合者兩種機制薄扁,就可以實現(xiàn)任意兩個人之間的交易都在鏈下完成剪返。
在整個交易中,智能合約起到了中介的重要角色邓梅,而區(qū)塊鏈網(wǎng)絡(luò)則確保最終的交易結(jié)果被確認脱盲。
側(cè)鏈
側(cè)鏈協(xié)議:允許資產(chǎn)在比特幣區(qū)塊鏈和其他區(qū)塊鏈之間互轉(zhuǎn)。簡單來說日缨,以比特幣區(qū)塊鏈作為主鏈钱反,其他區(qū)塊鏈作為側(cè)鏈,二者通過雙向掛鉤,實現(xiàn)比特幣從主鏈轉(zhuǎn)移到側(cè)鏈進行流通面哥。(實現(xiàn)了比特幣區(qū)塊鏈的擴展)
SPV 證明
在比特幣系統(tǒng)中驗證交易時哎壳,涉及交易合法性檢查、雙重花費檢查尚卫、腳本檢查等归榕。由于驗證過程需要完整的UTXO記錄,通常要由運行著完整功能幾點的礦工來完成吱涉。而很多時候用戶只關(guān)心與自己相關(guān)的那些交易刹泄,只希望能夠知道交易是否合法、是否已在區(qū)塊鏈中存在了足夠的時間(即獲得足夠的去人)怎爵,而不需要自己成為完整節(jié)點做出完整性驗證特石。
簡單支付驗證(Simplified Payment Verfication, SPV): 能夠以較小的代價判斷某個支付交易是否已經(jīng)被驗證過(存在于區(qū)塊鏈中),以及得到了多少算力保護鳖链。SPV 客戶端只需要下載所有區(qū)塊的去塊頭姆蘸,進行簡單的定位和計算工作,就可以驗證結(jié)論芙委。
側(cè)鏈協(xié)議中乞旦,用SPV來證明一個動作卻是已經(jīng)在區(qū)塊鏈中發(fā)生過,稱為SPV證明题山。SPV證明包括兩部分內(nèi)容:
- 一組區(qū)塊頭的列表,表示工作量證明
- 一個特定輸出確實存在于某個區(qū)塊中的密碼學證明
雙向掛鉤
側(cè)鏈協(xié)議的設(shè)計難點在于如何讓資產(chǎn)在主鏈和側(cè)鏈之間安全流轉(zhuǎn)故痊。
具體來說顶瞳,協(xié)議采用雙向掛鉤機制實現(xiàn)比特幣向側(cè)鏈的轉(zhuǎn)移和返回。主鏈和側(cè)鏈需要對對方的特定交易做SPV驗證愕秫。過程如下:
熱點問題
設(shè)計中的權(quán)衡
比特幣的設(shè)計目標在于支持一套安全慨菱、開放、分布式的數(shù)字貨幣系統(tǒng)戴甩。圍繞著一目標符喝,比特幣協(xié)議的設(shè)計中很多地方都體現(xiàn)了權(quán)衡的思想:
- 區(qū)塊容量: 大容量可帶來更高的交易吞吐率,但會增加挖礦成本甜孤,帶來中心化的風險协饲,同時增大存儲的代價。權(quán)衡設(shè)計當前的區(qū)塊容量上限設(shè)定為1MB缴川。
- 出塊間隔時間: 更短的出塊間隔時間可以縮短交易確認時間茉稠,但也可能導致分叉增多,降低網(wǎng)絡(luò)可用性把夸。
- 腳本支持程度: 更強大的腳本指令集可以帶來更多的靈活性而线,但也會引入更多的安全風險
分叉
當需要修復漏洞、擴展功能或調(diào)整結(jié)構(gòu)時,比特幣需要在全網(wǎng)的配合下進行升級膀篮。升級通常涉及更改交易的數(shù)據(jù)結(jié)構(gòu)或區(qū)塊的數(shù)據(jù)結(jié)構(gòu)嘹狞。
分布在全球的節(jié)點不可能同時完成升級來遵循新的協(xié)議,因此升級時可能出現(xiàn)分叉誓竿。把網(wǎng)絡(luò)中升級的幾點稱為新幾點磅网,未升級的節(jié)點稱為舊節(jié)點,根據(jù)新舊節(jié)點相互兼容性上的區(qū)別烤黍,可分為軟分叉和硬分叉:
- 軟分叉: 如果舊節(jié)點仍然能夠驗證接受新節(jié)點產(chǎn)生的交易和區(qū)塊知市,則稱為軟分叉。
- 硬分叉: 如果舊節(jié)點不能接受新節(jié)點產(chǎn)生的交易和區(qū)塊速蕊,則稱為硬分叉嫂丙。
硬分叉升級區(qū)塊鏈協(xié)議的難度大于軟分叉,但軟分叉能做的事情有限规哲,大的改動只能通過硬分叉來完成跟啤。
交易延展性
交易延展性:是比特幣的一個設(shè)計缺陷,是指當交易發(fā)起者對交易簽名之后唉锌,交易ID仍然可能被改變隅肥。
延展性攻擊會帶來一些問題:
- 在原始交易未被確認之前廣播ID改變的交易可能誤導相關(guān)方對交易狀態(tài)的判斷,甚至發(fā)動拒絕服務(wù)攻擊
- 多重簽名場景下:一個簽名者有能力改變交易ID袄简,會給其他簽名者的資產(chǎn)帶來潛在風險
- 阻礙閃電網(wǎng)絡(luò)等比特幣擴展方案的實施
擴容之爭
比特幣區(qū)塊容量現(xiàn)在在1MB以下腥放,交易量已不能滿足交易需求。比特幣的一系列的方案提出:鏈上擴容提議绿语、用側(cè)鏈或閃電網(wǎng)絡(luò)擴展比特幣等
擴容之爭主要有兩派提出的方案:
- 核心開發(fā)者的 Bitcoin Core 團隊主推的隔離見證方案(SegWit): 將交易中的簽名部分從交易的輸入中隔離出來秃症,放到交易末尾的被稱為見證的字段當中。同時吕粹,將區(qū)塊容量上限理論上提高到4MB
- Bitcoin Unlimited 團隊推出的方案(BU): 擴展比特幣客戶端种柑,使礦工可以自由配置他們想要生成和驗證的區(qū)塊容量
比特幣的監(jiān)管和追蹤
比特幣的匿名特性,使得其交易的監(jiān)管變得十分困難匹耕。
不過通過分析大量公開可得的交易記錄聚请,有很大概率可以追蹤到比特幣的實際轉(zhuǎn)移路線,甚至可以追蹤到真實用戶
相關(guān)工具
客戶端
比特幣客戶端用于和比特幣網(wǎng)絡(luò)進行交互稳其,同時也可以參與網(wǎng)絡(luò)的維護驶赏。
客戶端分為三種:
- 完整客戶端: 存儲所有的交易歷史記錄,功能完備
- 輕量級客戶端: 不保存交易副本欢际,交易需要向別人查詢
- 在線客戶端: 通過網(wǎng)頁模式來瀏覽第三方服務(wù)器提供的服務(wù)
錢包
比特幣錢包可以存儲和保護用戶的私鑰,并提供查詢比特幣余額母市、收發(fā)比特幣等功能。
根據(jù)私鑰存儲方式不同损趋,錢包分為以下幾種:
- 離線錢包: 離線存儲私鑰患久,也稱為“冷錢包”椅寺,安全性相對較強,但無法直接發(fā)送交易蒋失,便利性差
- 本地錢包: 用本地設(shè)備存儲私鑰返帕,可直接向比特幣網(wǎng)絡(luò)發(fā)送交易,易用性強篙挽,但本地設(shè)備存在被攻擊風險
- 在線錢包:用錢包服務(wù)器存儲經(jīng)用戶口令加密過得私鑰荆萤,易用性強,但錢包服務(wù)器同樣可能被攻擊
- 多重簽名錢包:由多方共同管理一個錢包地址铣卡,比如2 of 3 模式下链韭,集合三位管理者中兩位的私鑰便可以發(fā)送交易
礦機
比特幣礦機是專門為“挖礦”設(shè)計的硬件設(shè)備,目前主要包括基于GPU和ASIC芯片的專用礦機煮落。