區塊鏈快速入門(七)——比特幣
一、比特幣簡介
比特幣(BitCoin,BTC)是基於區塊鏈技術的一種數字貨幣實現,比特幣網絡是歷史上首個經過大規模長時間檢驗的數字貨幣系統。
自2009 年正式上線以來,比特幣價格經歷了數次的震蕩,目前每枚比特幣市場價格超過6000 美金,並曾經一度接近20000美金。
比特幣網絡在功能上具有如下特點:
A、去中心化
沒有任何獨立個體可以對網絡中交易進行破壞,任何交易請求都需要大多數參與者的共識。
B、匿名性
比特幣網絡中賬戶地址是匿名的,無法從交易信息關聯到具體的個體,但也很難進行審計
C、通脹預防
比特幣的發行需要通過挖礦計算來進行,發行量每四年減半,總量上限為2100萬枚,無法被超發。
二、比特幣實現原理
1、比特幣實現原理簡介
比特幣網絡是一個分布式的點對點網絡,網絡中的礦工通過挖礦來競爭對交易記錄的記賬權,擁有記賬權的礦工負責產生區塊,記錄交易記錄的過程,維護網絡的正常運行。
區塊鏈網絡提供一個公共可見的記賬本,記賬本並非記錄每個賬戶的余額,而是用來記錄發生過的交易的歷史信息,可以避免重放***,即某個合法交易被多次重新發送造成***。
2、比特幣的交易過程
比特幣網絡中每次發生交易,用戶需要將交易記錄寫到比特幣網絡賬本中,等網絡確認後即可認為交易完成。
除了挖礦獲得獎勵的coinbase交易只有輸出,正常情況下每個交易需要包括若幹輸入和輸出,未經使用(引用)的交易輸出(Unspent Transaction Outputs,UTXO)可以被新的交易引用作為其合法的輸入。被使用過的交易的輸出(Spent Transaction Outputs,STXO),則無法被引用作為合法輸入。
在交易過程中,付款方如何證明自己所引用的UTXO合法?比特幣中通過“簽名腳本”來實現,並且指定“輸出腳本”來限制將來能使用新UTXO者只能為指定收款方。對每筆交易,付款方需要進行簽名確認。並且,對每一筆交易來說,總輸入不能小於總輸出。總輸入相比總輸出多余的部分稱為交易費用(Transaction Fee),為生成包含該交易區塊的礦工所獲得。目前規定每筆交易的交易費用不能小於0.0001BTC,交易費用越高,越多礦工願意包含該交易,也就越早被放到網絡中。交易費用在獎勵礦工的同時,也避免了網絡受到大量***。
剛放進網絡中的交易(深度為0)並非是實時得到確認的。進入網絡中的交易存在被推翻的可能性,一般要再生成幾個新的區塊後(深度大於0)才認為該交易被確認。
3、賬戶(地址)
比特幣采用了非對稱的加密算法,用戶自己保留私鑰,對自己發出的交易進行簽名確認,並公開公鑰。
比特幣的賬戶地址其實就是用戶公鑰經過一系列Hash(HASH160或先進行SHA256,然後進行 RIPEMD160)及編碼運算後生成的160位(20字節)的字符串。
一般地,常常對賬戶地址串進行Base58Check編碼,並添加前導字節(表明支持哪種腳本)和4字節校驗字節,以提高可讀性和準確性。
賬戶並非直接是公鑰內容,而是Hash後的值,避免公鑰過早公開後導致被破解出私鑰。
4、交易
交易是完成比特幣功能的核心概念,一條交易可能包括如下信息:
A、付款人地址:合法的地址,公鑰經過SHA256和RIPEMD160兩次Hash得到160位Hash串。
B、付款人對交易的簽字確認:確保交易內容不被篡改。
C、付款人資金的來源交易ID:從哪個交易的輸出作為本次交易的輸入。
D、交易的金額:多少錢,跟輸入的差額為交易的服務費。
E、收款人地址:合法的地址。
F、時間戳:交易何時能生效。
網絡中節點收到交易信息後,將進行如下檢查:
A、交易是否已經處理過。
B、交易是否合法。包括地址是否合法、發起交易者是否是輸入地址的合法擁有者、是否是UTXO。
C、交易的輸入之和是否大於輸出之和。
檢查都通過,則將交易標記為合法的未確認交易,並在網絡內進行廣播。
用戶可以從blockchain.info網站查看實時的交易信息,一個示例交易的內容如下:
5、交易腳本
腳本(Script)是保障交易完成(主要用於檢驗交易是否合法)的核心機制,當所依附的交易發生時被觸發。通過腳本機制而非寫死交易過程,使比特幣網絡實現了一定的可擴展性。比特幣腳本語言是一種非圖靈完備的語言。
一般每個交易都會包括兩個腳本:負責輸入的解鎖腳本(scriptSig)和負責輸出的鎖定腳本(scriptPubKey)。
輸出腳本一般由付款方對交易設置鎖定,用來對能動用交易的輸出(例如,要花費該交易的輸出)的對象(收款方)進行權限控制,例如限制必須是某個公鑰的擁有者才能花費這筆交易。
認領腳本則用來證明自己可以滿足交易輸出腳本的鎖定條件,即對某個交易的輸出(比特幣)的擁有權。
輸出腳本目前支持兩種類型:
P2PKH:Pay-To-Public-Key-Hash,允許用戶將比特幣發送到一個或多個典型的比特幣地址上(證明擁有該公鑰),前導字節一般為0x00。
P2SH:Pay-To-Script-Hash,支付者創建一個輸出腳本,裏邊包含另一個腳本(認領腳本)的哈希,一般用於需要多人簽名的場景,前導字節一般為0x05。
以P2PKH為例,輸出腳本的格式為:scriptPubKey: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
OP_DUP是復制棧頂元素;
OP_HASH160是計算hash值;
OP_EQUALVERIFY 判斷棧頂兩元素是否相等;
OP_CHECKSIG判斷簽名是否合法。
上述指令實際上保證了只有pubKey的擁有者才能合法引用這個輸出。
另外一個交易如果要花費這個輸出,在引用這個輸出的時候,需要提供認領腳本格式為scriptSig: <sig> <pubKey>
其中,是拿pubKey 對應的私鑰對交易(全部交易的輸出、輸入和腳本)Hash值進行簽名,pubKey的Hash值需要等於pubKeyHash。進行交易驗證時,會按照先scriptSig後scriptPubKey的順序進行依次入棧處理,即完整指令為:
<sig> <pubKey> OP_DUP OP_HASH160 <pubKeyHash>
OP_EQUALVERIFY OP_CHECKSIG
引入腳本機制帶來了靈活性,但也引入了更多的安全風險。比特幣腳本支持的指令集十分簡單,基於棧的處理方式,並且非圖靈完備,此外還添加了額外的一些限制(大小限制等)。
6、區塊
比特幣區塊鏈的一個區塊不能超過1MB,將主要包括如下內容:
A、區塊大小:4字節
B、區塊頭:80字節
C、交易個數計數器:1~9字節
D、所有交易的具體內容,可變長,匹配Merkle樹葉子節點順序。
其中,區塊頭信息包括:
A、版本號:4字節
B、上一個區塊頭的Hash值:鏈接到上一個合法的塊上,對其區塊頭進行兩次SHA256操作,32字節
C、本區塊所包含的所有交易的Merkle樹根的哈希值:兩次SHA256操作,32字節
D、時間戳:4字節
E、難度指標:4字節
F、Nonce:4字節,POW 問題的答案。
可見,要對區塊鏈的完整性進行檢查,只需要檢驗各個區塊頭部信息即可,無需獲取到具體的交易內容,是簡單交易驗證(Simple Payment Verification,SPV)的基本原理。另外,通過頭部的鏈接,提供時序關系的同時加大了對區塊中數據進行篡改的難度。
一個示例區塊如下:
7、如何避免作惡
基於經濟博弈原理。在一個開放的網絡中,法通過技術手段保證每個人都是合作的。但可以通過經濟博弈來讓合作者得到利益,讓非合作者遭受損失和風險。
比特幣網絡中所有試圖參與者(礦工)都首先要付出挖礦的代價,進行算力消耗,越想拿到新區塊的決定權,抵押的算力越多。一旦失敗,算力都會被沒收掉,成為沈沒成本。當網絡中存在眾多參與者時,個體試圖拿到新區塊決定權要付出的算力成本是巨大的,進行一次作惡付出的代價已經超過可能帶來的好處。
8、負反饋調節
比特幣網絡在設計上,很好的體現了負反饋的控制論基本原理。
比特幣網絡中礦工越多,系統就越穩定,比特幣價值就越高,但挖到礦的概率會降低。反之,網絡中礦工減少,會讓系統更容易導致被***,比特幣價值越低,但挖到礦的概率會提高。因此,比特幣的價格理論上應該穩定在一個合適的值(網絡穩定性也會穩定在相應的值),價格乘以挖到礦的概率,恰好達到礦工的收益預期。
從長遠角度看,硬件成本是下降的,但每個區塊的比特幣獎勵每隔4年減半,最終將在2140年達到2100萬枚,之後將完全依靠交易的服務費來鼓勵礦工對網絡的維護。
比特幣最小單位是“聰”,即10^(-8) 比特幣,總“聰”數為2.1E15。對於64位處理器來說,高精度浮點計數的限制導致單個數值不能超過2^53約 等於9E15。
9、共識機制
傳統共識問題往往是考慮在一個相對封閉的分布式系統中,允許同時存在正常節點、故障節點,如何快速達成一致。
對於比特幣網絡來說,它是完全開放的,可能面向各種***情況,同時基於Internet的網絡質量只能保證“盡力而為”,導致問題更加復雜,傳統的一致性算法在這種場景下難以實用。
因此,比特幣網絡不得不對共識的目標和過程都進行了一系列限制,提出了基於POW的共識機制。
首先是不實現面向最終確認的共識,而是基於概率、隨時間逐步增強確認的共識。現有達成的結果在理論上都可能被推翻,只是***者要付出的代價隨時間而指數級上升,被推翻的可能性隨之指數級的下降。
此外,考慮到Internet的尺度,達成共識的時間相對比較長。按照區塊(一組交易)來進行階段性的確認(快照),提高網絡整體的可用性。
最後,限制網絡中共識的噪音。通過進行大量的Hash計算和少數的合法結果來限制合法提案的個數,進一步提高網絡中共識的穩定性。
三、挖礦
1、挖礦基本原理
挖礦是參與維護比特幣網絡的節點,通過協助生成新區塊來獲取一定量新增的比特幣的過程。當用戶向比特幣網絡中發布交易後,需要有人將交易進行確認,形成新的區塊,串聯到區塊鏈中。在一個互相不信任的分布式系統中,比特幣網絡采用挖礦的方式來解決交易的確認。
目前,每10分鐘左右生成一個不超過1MB大小的區塊(記錄10分鐘內發生的驗證過的交易內容),串聯到最長的鏈尾部,每個區塊的成功提交者可以得到系統12.5個比特幣的獎勵(獎勵作為區塊內的第一個交易,一定區塊數後才能使用),以及用戶附加到交易上的支付服務費用。即便沒有任何用戶交易,礦工也可以自行產生合法的區塊並獲得獎勵。
每個區塊的獎勵最初是50個比特幣,每隔 21萬個區塊自動減半,即4年時間,最終比特幣總量穩定在2100萬個。因此,比特幣是一種通縮的貨幣。
2、挖礦過程
挖礦的具體過程為:參與者綜合上一個區塊的Hash值,上一個區塊生成之後的新的驗證過的交易內容,再加上自己猜測的一個隨機數X,一起打包到一個候選新區塊,讓新區塊的Hash值小於比特幣網絡中給定的一個數(難度值)。
系統每隔兩周(即經過2016個區塊)會根據上一周期的挖礦時間來調整挖礦難度(通過調整限制數的大小),來調節生成區塊的時間穩定在 10 分鐘左右。為了避免震蕩,每次調整的最大幅度為4倍。歷史上最快的出塊時間小於10s,最慢的出塊時間超過1個小時。
為了挖到礦,參與處理區塊的用戶端往往需要付出大量的時間和計算力。算力一般以每秒進行多少次Hash計算為單位,記為h/s。目前,比特幣網絡算力峰值已經達到了每秒數百億億次。
匯豐銀行分析師Anton Tonev和Davy Jose曾表示,比特幣區塊鏈(通過挖礦)提供了一個局部的、迄今為止最優的解決方案:如何在分散的系統中驗證信任。區塊鏈本質上解決了傳統依賴於第三方的問題,因為協議不只滿足了中心化機構追蹤交易的需求,還使得陌生人之間產生信任。區塊鏈的技術和安全的過程使得陌生人之間在沒有被信任的第三方時產生信任。
3、挖礦的評價
2010年以前,挖礦還是一個非常熱門的盈利行業。但是隨著相關技術和設備的發展,現在個人進行挖礦的收益已經降得很低。從概率上說,由於當前參與挖礦的計算力實在過於龐大(已經超出大部分的超算中心),一般的算力已經不可能挖到比特幣。
從普通的CPU(2009年)、到後來的GPU(2010年)和 FPGA(2011年末)、到後來的ASIC礦機(2013 年年初,目前單片算力已達每秒數百億次Hash 計算)、再到現在眾多礦機聯合組成礦池(知名礦池包括F2Pool、BitFury、BTCC等)。數年間,比特幣礦機的技術走完了過去幾十年的集成電路技術進化歷程,並且還頗有創新之處。全網的算力已超過每秒10^18 次Hash計算。
基本上個體達到1/3的計算力,比特幣網絡就存在被破壞的風險;達到1/2的算力,從概率上就掌控整個網絡。但是要實現這麽大的算力,將需要付出巨大的經濟成本。
四、共識機制
1、POW
工作量證明通過計算來猜測一個數值(nonce),使得拼湊上交易數據後內容的Hash值滿足規定的上限(來源於hashcash)。由於Hash難題在目前計算模型下需要大量的計算,可以保證在一段時間內,系統中只能出現少數合法提案。如果能夠提出合法提案,也證明提案者確實已經付出了一定的工作量。
合法提案會在網絡中進行廣播,收到的用戶進行驗證後,會基於用戶認為的最長鏈基礎上繼續難題的計算。因此,系統中可能出現鏈的分叉(Fork),但最終會有一條鏈成為最長的鏈。
Hash問題具有不可逆的特點,因此,目前除了暴力計算外,還沒有有效的算法進行解決。如果獲得符合要求的nonce,則說明在概率上是付出了對應的算力。誰的算力多,誰最先解決問題的概率就越大。當掌握超過全網一半算力時,從概率上就能控制網絡中鏈的走向。
參與POW計算比賽的人,將付出不小的經濟成本(硬件、電力、維護等)。當沒有最終成為首個算出合法nonce值的幸運兒時,成本都將被沈沒掉。如果有人嘗試惡意破壞,需要付出大量的經濟成本。
2、POS
權益證明(Proof of Stake,PoS)最早在2013年被提出,最早在Peercoin系統中被實現,擁有股份越多的人越容易獲取記賬權(同時越傾向於維護網絡的正常工作)。
典型的過程是通過保證金(代幣、資產、名聲等具備價值屬性的物品即可)來對賭一個合法的塊成為新的區塊,收益為抵押資本的利息和交易服務費。提供證明的保證金(例如通過轉賬貨幣記錄)越多,則獲得記賬權的概率就越大。合法記賬者可以獲得收益。POS試圖解決在 POW中大量資源被浪費的缺點,受到了廣泛關註。惡意參與者將存在保證金被罰沒的風險,即損失經濟利益。
通常,對於POS需要掌握超過全網1/3的資源才有可能左右最終的結果
POS也有一些改進的算法,包括授權股權證明機制(DPOS),即所有股東投票選出一個董事會,董事會中成員才有權進行代理記賬。DPOS算法在實踐中得到了不錯的驗證,但並沒有理論上的證明。
2017年 8月,來自愛丁堡大學和康涅狄格大學的 Aggelos Kiayias等學者在論文《Ouroboros: A Provably Secure Proof-of-Stake Blockchain Protocol》中提出了Ouroboros區塊鏈共識協議,可以達到誠實行為的近似納什均衡,認為是首個可證實安全的POS協議。
五、閃電網絡
1、閃電網絡簡介
比特幣的交易網絡最為人詬病的一點便是交易性能:全網每秒7筆左右的交易速度,遠低於傳統的金融交易系統;同時,等待6個塊的可信確認將導致約1個小時的最終確認時間。為了提升性能,比特幣社區提出了閃電網絡等創新的設計。
閃電網絡的主要思路十分簡單——將大量交易放到比特幣區塊鏈之外進行,只把關鍵環節放到鏈上進行確認。最早於2015 年2月在論文《The Bitcoin Lightning Network:Scalable Off-Chain Instant Payments》中提出。閃電網絡主要通過引入智能合約的思想來完善鏈下的交易渠道。核心的概念主要有兩個:RSMC(Recoverable Sequence Maturity Contract)和 HTLC(Hashed Timelock Contract)。RSMC解決了鏈下交易的確認問題,HTLC解決了支付通道的問題。
2、RSMC
RSMC(Recoverable Sequence Maturity Contract),即可撤銷的順序成熟度合同。首先假定交易雙方之間存在一個微支付通道(資金池)。交易雙方先預存一部分資金到微支付通道裏,初始情況下雙方的分配方案等於預存的金額。每次發生交易,需要對交易後產生資金分配結果共同進行確認,同時簽字把舊版本的分配方案作廢掉。任何一方需要提現時,可以將手裏雙方簽署過的交易結果寫到區塊鏈網絡中,從而被確認。只有在提現時候才需要通過區塊鏈。
任何一個版本的方案都需要經過雙方的簽名認證才合法。任何一方在任何時候都可以提出提現,提現時需要提供一個雙方都簽名過的資金分配方案(意味著肯定是某次交易後的結果,被雙方確認過,但未必是最新的結果)。在一定時間內,如果另外一方拿出證明表明這個方案已經被作廢(非最新的交易結果),則資金罰沒給質疑方;否則按照提出方的結果進行分配。罰沒機制可以確保了沒人會故意拿一個舊的交易結果來提現。
另外,即使雙方都確認了某次提現,首先提出提現一方的資金到賬時間要晚於對方,鼓勵大家盡量都在鏈外完成交易。通過RSMC,可以實現大量中間交易發生在鏈外。
3、HTLC
微支付通道是通過Hashed Timelock Contract來實現的,中文意思是哈希的帶時鐘的合約,即限時轉賬。通過智能合約,雙方約定轉賬方先凍結一筆錢,並提供一個哈希值,如果在一定時間內有人能提出一個字符串,使得哈希計算後的值跟已知提供的哈希值匹配,則錢轉給接收方。
4、閃電網絡的實現
RSMC 保障了兩個人之間的直接交易可以在鏈下完成,HTLC保障任意兩個人之間的轉賬都可以通過一條支付通道來完成。閃電網絡整合了RSMC和HTLC兩種機制,就可以實現任意兩個人之間的交易都在鏈下完成。
在整個交易中,智能合約起到中介的重要角色,而區塊鏈網絡則確保最終的交易結果被確認。
六、側鏈
1、側鏈簡介
側鏈(Sidechain)協議允許資產在比特幣區塊鏈和其它區塊鏈之間互轉。側鏈也來自比特幣社區,最早是在2013年12月提出,2014 年4月立項,由Blockstream公司(由比特幣核心開發者 Adam Back、Matt Corallo等共同發起成立)主導研發。側鏈協議於 2014年10月在白皮書《Enabling Blockchain Innovations with Pegged Sidechains》中公開。
側鏈誕生前,眾多山寨幣的出現正在碎片化整個數字貨幣市場,再加上以太坊等項目的競爭,一些比特幣開發者希望能借助側鏈的形式擴展比特幣的底層協議。
以比特幣區塊鏈作為主鏈(Parent chain),其它區塊鏈作為側鏈,二者通過雙向掛鉤(Two-way peg),可實現比特幣從主鏈轉移到側鏈進行流通。
側鏈可以是一個獨立的區塊鏈,有自己按需定制的賬本、共識機制、交易類型、腳本和合約的支持等。側鏈不能發行比特幣,但可以通過支持與比特幣區塊鏈掛鉤來引入和流通一定數量的比特幣。當比特幣在側鏈流通時,主鏈上對應的比特幣會被鎖定,直到比特幣從側鏈回到主鏈。側鏈機制可將一些定制化或高頻的交易放到比特幣主鏈之外進行,實現比特幣區塊鏈的擴展。側鏈的核心原理在於能夠凍結一條鏈上的資產,然後在另一條鏈上產生,可以通過多種方式來實現。
2、SPV證明
在比特幣系統中驗證交易時,涉及到交易合法性檢查、雙重花費檢查、腳
本檢查等。由於驗證過程需要完整的UTXO記錄,通常要由運行著完整功能節點的礦工來完成。
而很多時候,用戶只關心與自己相關的交易,比如當用戶收到其他人號稱發來的比特幣時,只希望能夠知道交易是否合法、是否已在區塊鏈中存在了足夠的時間(即獲得足夠的確認),而不需要自己成為完整節點做出完整驗證。
中本聰設計的簡單支付驗證(Simplified Payment Verification,SPV)可以實現這一點。SPV能夠以較小的代價判斷某個支付交易是否已經被驗證過(存在於區塊鏈中),以及得到了多少算力保護(定位包含該交易的區塊在區塊鏈中的位置)。SPV 客戶端只需要下載所有區塊的區塊頭(Block Header),並進行簡單的定位和計算工作就可以給出驗證結論。
側鏈協議中,用SPV來證明一個交易確實已經在區塊鏈中發生過,稱為SPV證明(SPV Proof)。一個SPV證明包括兩部分內容:一組區塊頭的列表,表示工作量證明;一個特定輸出(output)確實存在於某個區塊中的密碼學證明。
3、雙向掛鉤
側鏈協議的設計難點在於如何讓資產在主鏈和側鏈之間安全流轉,即接受資產的鏈必須確保發送資產的鏈上的幣被可靠鎖定。
側鏈協議采用雙向掛鉤機制實現比特幣向側鏈轉移和返回。主鏈和側鏈需要對對方的特定交易做SPV驗證。完整過程如下:
A、當用戶要向側鏈轉移比特幣時,首先在主鏈創建交易,待轉移的比特幣被發往一個特殊的輸出,並在主鏈上被鎖定。
B、等待一段確認期,使得上述交易獲得足夠的工作量確認。
C、用戶在側鏈創建交易提取比特幣,需要在這筆交易的輸入指明上述主鏈被鎖定的輸出,並提供足夠的SPV證明。
D、等待一段競爭期,防止雙重花費***。
E、比特幣在側鏈上自由流通。
F、當用戶想讓比特幣返回主鏈時,采取類似的反向操作。首先在側鏈創建交易,待返回的比特幣被發往一個特殊的輸出。先等待一段確認期後,在主鏈用足夠的對側鏈輸出的SPV證明來解鎖最早被鎖定的輸出。競爭期過後,主鏈比特幣恢復流通。
七、熱點問題
1、設計中的權衡
比特幣的設計目標在於支持一套安全、開放、分布式的數字貨幣系統,因此,比特幣協議的設計中很多地方都體現了權衡(trade-off)的思想。
A、區塊容量:更大的區塊容量可以帶來更高的交易吞吐率,但會增加挖礦成本,帶來中心化的風險,同時增大存儲的代價。兼顧多方面的考慮,當前的區塊容量上限設定為1MB。
B、出塊間隔時間:更短的出塊間隔可以縮短交易確認的時間,但也可能導致分叉增多,降低網絡可用性。
C、腳本支持程度:更強大的腳本指令集可以帶來更多靈活性,但也會引入更多安全風險。
2、分叉
比特幣協議不會一成不變。當需要修復漏洞、擴展功能或調整結構時,比特幣需要在全網的配合下進行升級。升級通常涉及更改交易的數據結構或區塊的數據結構。
由於分布在全球的節點不可能同時完成升級來遵循新的協議,因此比特幣區塊鏈在升級時可能發生分叉(Fork)。對於一次升級,如果把網絡中升級了的節點稱為新節點,未升級的節點稱為舊節點,根據新舊節點相互兼容性上的區別,可分為軟分叉(Soft Fork)和硬分叉(Hard Fork)。
如果舊節點仍然能夠驗證接受新節點產生的交易和區塊,則稱為軟分叉。舊節點可能不理解新節點產生的一部分數據,但不會拒絕。網絡既向後和向前兼容,因此這類升級可以平穩進行。
如果舊節點不接受新節點產生的交易和區塊,則稱為硬分叉。網絡只向後兼容,不向前兼容。這類升級往往引起一段時間內新舊節點所認可的區塊不同,分出兩條鏈,直到舊節點升級完成。
盡管通過硬分叉升級區塊鏈協議的難度大於軟分叉,但軟分叉能做的事情畢竟有限,一些大膽的改動只能通過硬分叉完成。
3、交易延展性
交易延展性(Transaction Malleablility)是比特幣的一個設計缺陷,是指當交易發發起者對交易簽名(sign)後,交易ID仍然可能被改變。
發起者對交易的簽名(scriptSig)位於交易的輸入(vin)當中,屬於交易內容的一部分。交易ID(txid)是整個交易內容的 Hash值,因此,造成***者(尤其是簽名方)可以通過改變scriptSig來改變txid,而交易仍舊保持合法。例如,反轉ECDSA簽名過程中的S值,簽名仍然合法,交易仍然能夠被傳播。
延展性***能改變交易ID,但交易的輸入和輸出不會被改變,所以***者不會直接盜取比特幣。因此,延展性***在比特幣網絡一直存在,仍未被根治。
然而,延展性***仍然會帶來一些問題。比如,在原始交易未被確認之前廣播ID改變了的交易可能誤導相關方對交易狀態的判斷,甚至發動拒絕服務***;多重簽名場景下一個簽名者有能力改變交易ID,給其他簽名者的資產帶來潛在風險。同時,延展性問題也會阻礙閃電網絡等比特幣擴展方案的實施。
4、擴容爭議
比特幣當前將區塊容量限制在1MB以下。隨著用戶和交易量的增加,區塊容量限制已逐漸不能滿足比特幣的交易需求,使得交易日益擁堵、交易手續費不斷上漲。
關於比特幣擴容的持續爭論從2015年便已開始,期間有一系列方案被擺上臺面,包括各種鏈上擴容提議、用側鏈或閃電網絡擴展比特幣等。考慮到比特幣復雜的社區環境,任何擴容方案想要達成廣泛共識都比較困難,不同的方案之間也很難調和。
當前,擴容之爭主要集中在兩派:代表核心開發者的Bitcoin Core團隊主推的隔離見證方案和Bitcoin Unlimited團隊推出的方案。
隔離見證(Segregated Witness,簡稱SegWit)是指將交易中的簽名部分從交易的輸入中隔離出來,放到交易末尾的被稱為見證(Witness)的字段當中。
對交易ID 的計算將不再包含簽名部分,是延展性問題的一種解法,給引入閃電網絡等第二層協議增強了安全性。
同時,隔離見證會將區塊容量上限理論上提高到4MB。
Bitcoin Unlimited方案(簡稱 BU)是指擴展比特幣客戶端,使礦工可以自由配置想要生成和驗證的區塊的容量。
根據方案的設想,區塊容量的上限會根據眾多節點和礦工的配置進行自然收斂。
5、比特幣的監管和追蹤
比特幣的匿名特性,使得其上交易的監管變得十分困難。不少非法分子利用其匿名性,通過比特幣轉移資金。例如WannaCry 網絡病毒向受害者勒索比特幣,短短三天時間裏傳播並影響到全球150多個國家。
但通過比特幣就可以實現完全匿名化並不現實。雖然交易賬戶自身是匿名的Hash地址,但一些研究成果(如《An analysis of anonymity in the bitcoin system》)表明,通過分析大量公開可得的交易記錄,有很大概率可以追蹤到比特幣的實際轉移路線,甚至可以追蹤到真實用戶。
八、比特幣相關工具
1、客戶端
比特幣客戶端用於和比特幣網絡進行交互,同時可以參與到網絡的維護。
客戶端分為三種:完整客戶端、輕量級客戶端和在線客戶端。
完整客戶端:存儲所有的交易歷史記錄,功能完備。
輕量級客戶端:不保存交易副本,交易需要向別人查詢。
在線客戶端:通過網頁模式來瀏覽第三方服務器提供的服務。
比特幣客戶端下載地址:https://bitcoin.org/en/download
基於比特幣客戶端,可以很容易實現用戶錢包功能。
2、錢包
比特幣錢包存儲和保護用戶的私鑰,並提供查詢比特幣余額、收發比特幣等功能。根據私鑰存儲方式不同,錢包主要分為以下幾種:
離線錢包:離線存儲私鑰,也稱為“冷錢包”。安全性相對最強,但無法直接發送交易,便利性差。
本地錢包:用本地設備存儲私鑰。可直接向比特幣網絡發送交易,易用性強,但本地設備存在被***風險。
在線錢包:用錢包服務器存儲經用戶口令加密過的私鑰。易用性強,但錢包服務器同樣可能被***。
多重簽名錢包:由多方共同管理一個錢包地址,比如2of 3模式下,集合三位管理者中的兩位的私鑰便可以發送交易。
比特幣錢包下載地址:https://bitcoin.org/en/choose-your-wallet
3、礦機
比特幣礦機是專門為“挖礦”設計的硬件設備,目前主要包括基於GPU和ASIC芯片的專用礦機。礦機往往采用特殊的設計來加速挖礦過程中的計算處理。
礦機最重要的屬性是可提供的算力(通常以每秒可進行 Hash計算的次數來表示)和所需要的功耗。當算力足夠大,可以在概率意義上挖到足夠多的新的區塊,來彌補電力費用時,礦機是可以盈利的;當單位電力產生的算力不足以支付電力費用時,礦機無法盈利,只能被淘汰。
目前,比特幣網絡中的全網算力仍然在快速增長中,礦工需要綜合考慮算力變化、比特幣價格、功耗帶來的電費等許多問題,需要算好經濟賬。
區塊鏈快速入門(七)——比特幣