溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

區(qū)塊鏈快速入門(七)——比特幣

發(fā)布時(shí)間:2020-04-09 16:10:17 來源:網(wǎng)絡(luò) 閱讀:1496 作者:天山老妖S 欄目:軟件技術(shù)

區(qū)塊鏈快速入門(七)——比特幣

一、比特幣簡介

比特幣(BitCoin,BTC)是基于區(qū)塊鏈技術(shù)的一種數(shù)字貨幣實(shí)現(xiàn),比特幣網(wǎng)絡(luò)是歷史上首個(gè)經(jīng)過大規(guī)模長時(shí)間檢驗(yàn)的數(shù)字貨幣系統(tǒng)。
自2009 年正式上線以來,比特幣價(jià)格經(jīng)歷了數(shù)次的震蕩,目前每枚比特幣市場價(jià)格超過6000 美金,并曾經(jīng)一度接近20000美金。
比特幣網(wǎng)絡(luò)在功能上具有如下特點(diǎn):
A、去中心化
沒有任何獨(dú)立個(gè)體可以對(duì)網(wǎng)絡(luò)中交易進(jìn)行破壞,任何交易請(qǐng)求都需要大多數(shù)參與者的共識(shí)。
B、匿名性
比特幣網(wǎng)絡(luò)中賬戶地址是匿名的,無法從交易信息關(guān)聯(lián)到具體的個(gè)體,但也很難進(jìn)行審計(jì)
C、通脹預(yù)防
比特幣的發(fā)行需要通過挖礦計(jì)算來進(jìn)行,發(fā)行量每四年減半,總量上限為2100萬枚,無法被超發(fā)。

二、比特幣實(shí)現(xiàn)原理

1、比特幣實(shí)現(xiàn)原理簡介

比特幣網(wǎng)絡(luò)是一個(gè)分布式的點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò),網(wǎng)絡(luò)中的礦工通過挖礦來競爭對(duì)交易記錄的記賬權(quán),擁有記賬權(quán)的礦工負(fù)責(zé)產(chǎn)生區(qū)塊,記錄交易記錄的過程,維護(hù)網(wǎng)絡(luò)的正常運(yùn)行。
區(qū)塊鏈網(wǎng)絡(luò)提供一個(gè)公共可見的記賬本,記賬本并非記錄每個(gè)賬戶的余額,而是用來記錄發(fā)生過的交易的歷史信息,可以避免重放***,即某個(gè)合法交易被多次重新發(fā)送造成***。

2、比特幣的交易過程

比特幣網(wǎng)絡(luò)中每次發(fā)生交易,用戶需要將交易記錄寫到比特幣網(wǎng)絡(luò)賬本中,等網(wǎng)絡(luò)確認(rèn)后即可認(rèn)為交易完成。
除了挖礦獲得獎(jiǎng)勵(lì)的coinbase交易只有輸出,正常情況下每個(gè)交易需要包括若干輸入和輸出,未經(jīng)使用(引用)的交易輸出(Unspent Transaction Outputs,UTXO)可以被新的交易引用作為其合法的輸入。被使用過的交易的輸出(Spent Transaction Outputs,STXO),則無法被引用作為合法輸入。
因此,比特幣網(wǎng)絡(luò)中一筆合法的交易,必須是引用某些已存在交易的UTXO(必須是屬于付款方才能合法引用)作為新交易的輸入,并生成新的UTXO(將屬于收款方)。
在交易過程中,付款方如何證明自己所引用的UTXO合法?比特幣中通過“簽名腳本”來實(shí)現(xiàn),并且指定“輸出腳本”來限制將來能使用新UTXO者只能為指定收款方。對(duì)每筆交易,付款方需要進(jìn)行簽名確認(rèn)。并且,對(duì)每一筆交易來說,總輸入不能小于總輸出。總輸入相比總輸出多余的部分稱為交易費(fèi)用(Transaction Fee),為生成包含該交易區(qū)塊的礦工所獲得。目前規(guī)定每筆交易的交易費(fèi)用不能小于0.0001BTC,交易費(fèi)用越高,越多礦工愿意包含該交易,也就越早被放到網(wǎng)絡(luò)中。交易費(fèi)用在獎(jiǎng)勵(lì)礦工的同時(shí),也避免了網(wǎng)絡(luò)受到大量***。
交易中金額的最小單位是“聰”,即一億分之一(10^-8)比特幣。
剛放進(jìn)網(wǎng)絡(luò)中的交易(深度為0)并非是實(shí)時(shí)得到確認(rèn)的。進(jìn)入網(wǎng)絡(luò)中的交易存在被推翻的可能性,一般要再生成幾個(gè)新的區(qū)塊后(深度大于0)才認(rèn)為該交易被確認(rèn)。

3、賬戶(地址)

比特幣采用了非對(duì)稱的加密算法,用戶自己保留私鑰,對(duì)自己發(fā)出的交易進(jìn)行簽名確認(rèn),并公開公鑰。
比特幣的賬戶地址其實(shí)就是用戶公鑰經(jīng)過一系列Hash(HASH160或先進(jìn)行SHA256,然后進(jìn)行 RIPEMD160)及編碼運(yùn)算后生成的160位(20字節(jié))的字符串。
一般地,常常對(duì)賬戶地址串進(jìn)行Base58Check編碼,并添加前導(dǎo)字節(jié)(表明支持哪種腳本)和4字節(jié)校驗(yàn)字節(jié),以提高可讀性和準(zhǔn)確性。
賬戶并非直接是公鑰內(nèi)容,而是Hash后的值,避免公鑰過早公開后導(dǎo)致被破解出私鑰。

4、交易

交易是完成比特幣功能的核心概念,一條交易可能包括如下信息:
A、付款人地址:合法的地址,公鑰經(jīng)過SHA256和RIPEMD160兩次Hash得到160位Hash串。
B、付款人對(duì)交易的簽字確認(rèn):確保交易內(nèi)容不被篡改。
C、付款人資金的來源交易ID:從哪個(gè)交易的輸出作為本次交易的輸入。
D、交易的金額:多少錢,跟輸入的差額為交易的服務(wù)費(fèi)。
E、收款人地址:合法的地址。
F、時(shí)間戳:交易何時(shí)能生效。
網(wǎng)絡(luò)中節(jié)點(diǎn)收到交易信息后,將進(jìn)行如下檢查:
A、交易是否已經(jīng)處理過。
B、交易是否合法。包括地址是否合法、發(fā)起交易者是否是輸入地址的合法擁有者、是否是UTXO。
C、交易的輸入之和是否大于輸出之和。
檢查都通過,則將交易標(biāo)記為合法的未確認(rèn)交易,并在網(wǎng)絡(luò)內(nèi)進(jìn)行廣播。
用戶可以從blockchain.info網(wǎng)站查看實(shí)時(shí)的交易信息,一個(gè)示例交易的內(nèi)容如下:
區(qū)塊鏈快速入門(七)——比特幣

5、交易腳本

腳本(Script)是保障交易完成(主要用于檢驗(yàn)交易是否合法)的核心機(jī)制,當(dāng)所依附的交易發(fā)生時(shí)被觸發(fā)。通過腳本機(jī)制而非寫死交易過程,使比特幣網(wǎng)絡(luò)實(shí)現(xiàn)了一定的可擴(kuò)展性。比特幣腳本語言是一種非圖靈完備的語言。
一般每個(gè)交易都會(huì)包括兩個(gè)腳本:負(fù)責(zé)輸入的解鎖腳本(scriptSig)和負(fù)責(zé)輸出的鎖定腳本(scriptPubKey)。
輸出腳本一般由付款方對(duì)交易設(shè)置鎖定,用來對(duì)能動(dòng)用交易的輸出(例如,要花費(fèi)該交易的輸出)的對(duì)象(收款方)進(jìn)行權(quán)限控制,例如限制必須是某個(gè)公鑰的擁有者才能花費(fèi)這筆交易。
認(rèn)領(lǐng)腳本則用來證明自己可以滿足交易輸出腳本的鎖定條件,即對(duì)某個(gè)交易的輸出(比特幣)的擁有權(quán)。
輸出腳本目前支持兩種類型:
P2PKH:Pay-To-Public-Key-Hash,允許用戶將比特幣發(fā)送到一個(gè)或多個(gè)典型的比特幣地址上(證明擁有該公鑰),前導(dǎo)字節(jié)一般為0x00。
P2SH:Pay-To-Script-Hash,支付者創(chuàng)建一個(gè)輸出腳本,里邊包含另一個(gè)腳本(認(rèn)領(lǐng)腳本)的哈希,一般用于需要多人簽名的場景,前導(dǎo)字節(jié)一般為0x05。
以P2PKH為例,輸出腳本的格式為:
scriptPubKey: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
OP_DUP是復(fù)制棧頂元素;
OP_HASH160是計(jì)算hash值;
OP_EQUALVERIFY 判斷棧頂兩元素是否相等;
OP_CHECKSIG判斷簽名是否合法。
上述指令實(shí)際上保證了只有pubKey的擁有者才能合法引用這個(gè)輸出。
另外一個(gè)交易如果要花費(fèi)這個(gè)輸出,在引用這個(gè)輸出的時(shí)候,需要提供認(rèn)領(lǐng)腳本格式為
scriptSig: <sig> <pubKey>
其中,是拿pubKey 對(duì)應(yīng)的私鑰對(duì)交易(全部交易的輸出、輸入和腳本)Hash值進(jìn)行簽名,pubKey的Hash值需要等于pubKeyHash。進(jìn)行交易驗(yàn)證時(shí),會(huì)按照先scriptSig后scriptPubKey的順序進(jìn)行依次入棧處理,即完整指令為:

<sig> <pubKey> OP_DUP OP_HASH160 <pubKeyHash>
OP_EQUALVERIFY OP_CHECKSIG

引入腳本機(jī)制帶來了靈活性,但也引入了更多的安全風(fēng)險(xiǎn)。比特幣腳本支持的指令集十分簡單,基于棧的處理方式,并且非圖靈完備,此外還添加了額外的一些限制(大小限制等)。

6、區(qū)塊

比特幣區(qū)塊鏈的一個(gè)區(qū)塊不能超過1MB,將主要包括如下內(nèi)容:
A、區(qū)塊大?。?字節(jié)
B、區(qū)塊頭:80字節(jié)
C、交易個(gè)數(shù)計(jì)數(shù)器:1~9字節(jié)
D、所有交易的具體內(nèi)容,可變長,匹配Merkle樹葉子節(jié)點(diǎn)順序。
其中,區(qū)塊頭信息包括:
A、版本號(hào):4字節(jié)
B、上一個(gè)區(qū)塊頭的Hash值:鏈接到上一個(gè)合法的塊上,對(duì)其區(qū)塊頭進(jìn)行兩次SHA256操作,32字節(jié)
C、本區(qū)塊所包含的所有交易的Merkle樹根的哈希值:兩次SHA256操作,32字節(jié)
D、時(shí)間戳:4字節(jié)
E、難度指標(biāo):4字節(jié)
F、Nonce:4字節(jié),POW 問題的答案。
可見,要對(duì)區(qū)塊鏈的完整性進(jìn)行檢查,只需要檢驗(yàn)各個(gè)區(qū)塊頭部信息即可,無需獲取到具體的交易內(nèi)容,是簡單交易驗(yàn)證(Simple Payment Verification,SPV)的基本原理。另外,通過頭部的鏈接,提供時(shí)序關(guān)系的同時(shí)加大了對(duì)區(qū)塊中數(shù)據(jù)進(jìn)行篡改的難度。
一個(gè)示例區(qū)塊如下:
區(qū)塊鏈快速入門(七)——比特幣

7、如何避免作惡

基于經(jīng)濟(jì)博弈原理。在一個(gè)開放的網(wǎng)絡(luò)中,法通過技術(shù)手段保證每個(gè)人都是合作的。但可以通過經(jīng)濟(jì)博弈來讓合作者得到利益,讓非合作者遭受損失和風(fēng)險(xiǎn)。
比特幣網(wǎng)絡(luò)中所有試圖參與者(礦工)都首先要付出挖礦的代價(jià),進(jìn)行算力消耗,越想拿到新區(qū)塊的決定權(quán),抵押的算力越多。一旦失敗,算力都會(huì)被沒收掉,成為沉沒成本。當(dāng)網(wǎng)絡(luò)中存在眾多參與者時(shí),個(gè)體試圖拿到新區(qū)塊決定權(quán)要付出的算力成本是巨大的,進(jìn)行一次作惡付出的代價(jià)已經(jīng)超過可能帶來的好處。

8、負(fù)反饋調(diào)節(jié)

比特幣網(wǎng)絡(luò)在設(shè)計(jì)上,很好的體現(xiàn)了負(fù)反饋的控制論基本原理。
比特幣網(wǎng)絡(luò)中礦工越多,系統(tǒng)就越穩(wěn)定,比特幣價(jià)值就越高,但挖到礦的概率會(huì)降低。反之,網(wǎng)絡(luò)中礦工減少,會(huì)讓系統(tǒng)更容易導(dǎo)致被***,比特幣價(jià)值越低,但挖到礦的概率會(huì)提高。因此,比特幣的價(jià)格理論上應(yīng)該穩(wěn)定在一個(gè)合適的值(網(wǎng)絡(luò)穩(wěn)定性也會(huì)穩(wěn)定在相應(yīng)的值),價(jià)格乘以挖到礦的概率,恰好達(dá)到礦工的收益預(yù)期。
從長遠(yuǎn)角度看,硬件成本是下降的,但每個(gè)區(qū)塊的比特幣獎(jiǎng)勵(lì)每隔4年減半,最終將在2140年達(dá)到2100萬枚,之后將完全依靠交易的服務(wù)費(fèi)來鼓勵(lì)礦工對(duì)網(wǎng)絡(luò)的維護(hù)。
比特幣最小單位是“聰”,即10^(-8) 比特幣,總“聰”數(shù)為2.1E15。對(duì)于64位處理器來說,高精度浮點(diǎn)計(jì)數(shù)的限制導(dǎo)致單個(gè)數(shù)值不能超過2^53約 等于9E15。

9、共識(shí)機(jī)制

傳統(tǒng)共識(shí)問題往往是考慮在一個(gè)相對(duì)封閉的分布式系統(tǒng)中,允許同時(shí)存在正常節(jié)點(diǎn)、故障節(jié)點(diǎn),如何快速達(dá)成一致。
對(duì)于比特幣網(wǎng)絡(luò)來說,它是完全開放的,可能面向各種***情況,同時(shí)基于Internet的網(wǎng)絡(luò)質(zhì)量只能保證“盡力而為”,導(dǎo)致問題更加復(fù)雜,傳統(tǒng)的一致性算法在這種場景下難以實(shí)用。
因此,比特幣網(wǎng)絡(luò)不得不對(duì)共識(shí)的目標(biāo)和過程都進(jìn)行了一系列限制,提出了基于POW的共識(shí)機(jī)制。
首先是不實(shí)現(xiàn)面向最終確認(rèn)的共識(shí),而是基于概率、隨時(shí)間逐步增強(qiáng)確認(rèn)的共識(shí)。現(xiàn)有達(dá)成的結(jié)果在理論上都可能被推翻,只是***者要付出的代價(jià)隨時(shí)間而指數(shù)級(jí)上升,被推翻的可能性隨之指數(shù)級(jí)的下降。
此外,考慮到Internet的尺度,達(dá)成共識(shí)的時(shí)間相對(duì)比較長。按照區(qū)塊(一組交易)來進(jìn)行階段性的確認(rèn)(快照),提高網(wǎng)絡(luò)整體的可用性。
最后,限制網(wǎng)絡(luò)中共識(shí)的噪音。通過進(jìn)行大量的Hash計(jì)算和少數(shù)的合法結(jié)果來限制合法提案的個(gè)數(shù),進(jìn)一步提高網(wǎng)絡(luò)中共識(shí)的穩(wěn)定性。

三、挖礦

1、挖礦基本原理

挖礦是參與維護(hù)比特幣網(wǎng)絡(luò)的節(jié)點(diǎn),通過協(xié)助生成新區(qū)塊來獲取一定量新增的比特幣的過程。當(dāng)用戶向比特幣網(wǎng)絡(luò)中發(fā)布交易后,需要有人將交易進(jìn)行確認(rèn),形成新的區(qū)塊,串聯(lián)到區(qū)塊鏈中。在一個(gè)互相不信任的分布式系統(tǒng)中,比特幣網(wǎng)絡(luò)采用挖礦的方式來解決交易的確認(rèn)。
目前,每10分鐘左右生成一個(gè)不超過1MB大小的區(qū)塊(記錄10分鐘內(nèi)發(fā)生的驗(yàn)證過的交易內(nèi)容),串聯(lián)到最長的鏈尾部,每個(gè)區(qū)塊的成功提交者可以得到系統(tǒng)12.5個(gè)比特幣的獎(jiǎng)勵(lì)(獎(jiǎng)勵(lì)作為區(qū)塊內(nèi)的第一個(gè)交易,一定區(qū)塊數(shù)后才能使用),以及用戶附加到交易上的支付服務(wù)費(fèi)用。即便沒有任何用戶交易,礦工也可以自行產(chǎn)生合法的區(qū)塊并獲得獎(jiǎng)勵(lì)。
每個(gè)區(qū)塊的獎(jiǎng)勵(lì)最初是50個(gè)比特幣,每隔 21萬個(gè)區(qū)塊自動(dòng)減半,即4年時(shí)間,最終比特幣總量穩(wěn)定在2100萬個(gè)。因此,比特幣是一種通縮的貨幣。

2、挖礦過程

挖礦的具體過程為:參與者綜合上一個(gè)區(qū)塊的Hash值,上一個(gè)區(qū)塊生成之后的新的驗(yàn)證過的交易內(nèi)容,再加上自己猜測的一個(gè)隨機(jī)數(shù)X,一起打包到一個(gè)候選新區(qū)塊,讓新區(qū)塊的Hash值小于比特幣網(wǎng)絡(luò)中給定的一個(gè)數(shù)(難度值)。
系統(tǒng)每隔兩周(即經(jīng)過2016個(gè)區(qū)塊)會(huì)根據(jù)上一周期的挖礦時(shí)間來調(diào)整挖礦難度(通過調(diào)整限制數(shù)的大小),來調(diào)節(jié)生成區(qū)塊的時(shí)間穩(wěn)定在 10 分鐘左右。為了避免震蕩,每次調(diào)整的最大幅度為4倍。歷史上最快的出塊時(shí)間小于10s,最慢的出塊時(shí)間超過1個(gè)小時(shí)。
為了挖到礦,參與處理區(qū)塊的用戶端往往需要付出大量的時(shí)間和計(jì)算力。算力一般以每秒進(jìn)行多少次Hash計(jì)算為單位,記為h/s。目前,比特幣網(wǎng)絡(luò)算力峰值已經(jīng)達(dá)到了每秒數(shù)百億億次。
匯豐銀行分析師Anton Tonev和Davy Jose曾表示,比特幣區(qū)塊鏈(通過挖礦)提供了一個(gè)局部的、迄今為止最優(yōu)的解決方案:如何在分散的系統(tǒng)中驗(yàn)證信任。區(qū)塊鏈本質(zhì)上解決了傳統(tǒng)依賴于第三方的問題,因?yàn)閰f(xié)議不只滿足了中心化機(jī)構(gòu)追蹤交易的需求,還使得陌生人之間產(chǎn)生信任。區(qū)塊鏈的技術(shù)和安全的過程使得陌生人之間在沒有被信任的第三方時(shí)產(chǎn)生信任。

3、挖礦的評(píng)價(jià)

2010年以前,挖礦還是一個(gè)非常熱門的盈利行業(yè)。但是隨著相關(guān)技術(shù)和設(shè)備的發(fā)展,現(xiàn)在個(gè)人進(jìn)行挖礦的收益已經(jīng)降得很低。從概率上說,由于當(dāng)前參與挖礦的計(jì)算力實(shí)在過于龐大(已經(jīng)超出大部分的超算中心),一般的算力已經(jīng)不可能挖到比特幣。
從普通的CPU(2009年)、到后來的GPU(2010年)和 FPGA(2011年末)、到后來的ASIC礦機(jī)(2013 年年初,目前單片算力已達(dá)每秒數(shù)百億次Hash 計(jì)算)、再到現(xiàn)在眾多礦機(jī)聯(lián)合組成礦池(知名礦池包括F2Pool、BitFury、BTCC等)。數(shù)年間,比特幣礦機(jī)的技術(shù)走完了過去幾十年的集成電路技術(shù)進(jìn)化歷程,并且還頗有創(chuàng)新之處。全網(wǎng)的算力已超過每秒10^18 次Hash計(jì)算。
基本上個(gè)體達(dá)到1/3的計(jì)算力,比特幣網(wǎng)絡(luò)就存在被破壞的風(fēng)險(xiǎn);達(dá)到1/2的算力,從概率上就掌控整個(gè)網(wǎng)絡(luò)。但是要實(shí)現(xiàn)這么大的算力,將需要付出巨大的經(jīng)濟(jì)成本。

四、共識(shí)機(jī)制

1、POW

工作量證明通過計(jì)算來猜測一個(gè)數(shù)值(nonce),使得拼湊上交易數(shù)據(jù)后內(nèi)容的Hash值滿足規(guī)定的上限(來源于hashcash)。由于Hash難題在目前計(jì)算模型下需要大量的計(jì)算,可以保證在一段時(shí)間內(nèi),系統(tǒng)中只能出現(xiàn)少數(shù)合法提案。如果能夠提出合法提案,也證明提案者確實(shí)已經(jīng)付出了一定的工作量。
合法提案會(huì)在網(wǎng)絡(luò)中進(jìn)行廣播,收到的用戶進(jìn)行驗(yàn)證后,會(huì)基于用戶認(rèn)為的最長鏈基礎(chǔ)上繼續(xù)難題的計(jì)算。因此,系統(tǒng)中可能出現(xiàn)鏈的分叉(Fork),但最終會(huì)有一條鏈成為最長的鏈。
Hash問題具有不可逆的特點(diǎn),因此,目前除了暴力計(jì)算外,還沒有有效的算法進(jìn)行解決。如果獲得符合要求的nonce,則說明在概率上是付出了對(duì)應(yīng)的算力。誰的算力多,誰最先解決問題的概率就越大。當(dāng)掌握超過全網(wǎng)一半算力時(shí),從概率上就能控制網(wǎng)絡(luò)中鏈的走向。
參與POW計(jì)算比賽的人,將付出不小的經(jīng)濟(jì)成本(硬件、電力、維護(hù)等)。當(dāng)沒有最終成為首個(gè)算出合法nonce值的幸運(yùn)兒時(shí),成本都將被沉沒掉。如果有人嘗試惡意破壞,需要付出大量的經(jīng)濟(jì)成本。

2、POS

權(quán)益證明(Proof of Stake,PoS)最早在2013年被提出,最早在Peercoin系統(tǒng)中被實(shí)現(xiàn),擁有股份越多的人越容易獲取記賬權(quán)(同時(shí)越傾向于維護(hù)網(wǎng)絡(luò)的正常工作)。
典型的過程是通過保證金(代幣、資產(chǎn)、名聲等具備價(jià)值屬性的物品即可)來對(duì)賭一個(gè)合法的塊成為新的區(qū)塊,收益為抵押資本的利息和交易服務(wù)費(fèi)。提供證明的保證金(例如通過轉(zhuǎn)賬貨幣記錄)越多,則獲得記賬權(quán)的概率就越大。合法記賬者可以獲得收益。POS試圖解決在 POW中大量資源被浪費(fèi)的缺點(diǎn),受到了廣泛關(guān)注。惡意參與者將存在保證金被罰沒的風(fēng)險(xiǎn),即損失經(jīng)濟(jì)利益。
通常,對(duì)于POS需要掌握超過全網(wǎng)1/3的資源才有可能左右最終的結(jié)果
POS也有一些改進(jìn)的算法,包括授權(quán)股權(quán)證明機(jī)制(DPOS),即所有股東投票選出一個(gè)董事會(huì),董事會(huì)中成員才有權(quán)進(jìn)行代理記賬。DPOS算法在實(shí)踐中得到了不錯(cuò)的驗(yàn)證,但并沒有理論上的證明。
2017年 8月,來自愛丁堡大學(xué)和康涅狄格大學(xué)的 Aggelos Kiayias等學(xué)者在論文《Ouroboros: A Provably Secure Proof-of-Stake Blockchain Protocol》中提出了Ouroboros區(qū)塊鏈共識(shí)協(xié)議,可以達(dá)到誠實(shí)行為的近似納什均衡,認(rèn)為是首個(gè)可證實(shí)安全的POS協(xié)議。

五、閃電網(wǎng)絡(luò)

1、閃電網(wǎng)絡(luò)簡介

比特幣的交易網(wǎng)絡(luò)最為人詬病的一點(diǎn)便是交易性能:全網(wǎng)每秒7筆左右的交易速度,遠(yuǎn)低于傳統(tǒng)的金融交易系統(tǒng);同時(shí),等待6個(gè)塊的可信確認(rèn)將導(dǎo)致約1個(gè)小時(shí)的最終確認(rèn)時(shí)間。為了提升性能,比特幣社區(qū)提出了閃電網(wǎng)絡(luò)等創(chuàng)新的設(shè)計(jì)。
閃電網(wǎng)絡(luò)的主要思路十分簡單——將大量交易放到比特幣區(qū)塊鏈之外進(jìn)行,只把關(guān)鍵環(huán)節(jié)放到鏈上進(jìn)行確認(rèn)。最早于2015 年2月在論文《The Bitcoin Lightning Network:Scalable Off-Chain Instant Payments》中提出。閃電網(wǎng)絡(luò)主要通過引入智能合約的思想來完善鏈下的交易渠道。核心的概念主要有兩個(gè):RSMC(Recoverable Sequence Maturity Contract)和 HTLC(Hashed Timelock Contract)。RSMC解決了鏈下交易的確認(rèn)問題,HTLC解決了支付通道的問題。

2、RSMC

RSMC(Recoverable Sequence Maturity Contract),即可撤銷的順序成熟度合同。首先假定交易雙方之間存在一個(gè)微支付通道(資金池)。交易雙方先預(yù)存一部分資金到微支付通道里,初始情況下雙方的分配方案等于預(yù)存的金額。每次發(fā)生交易,需要對(duì)交易后產(chǎn)生資金分配結(jié)果共同進(jìn)行確認(rèn),同時(shí)簽字把舊版本的分配方案作廢掉。任何一方需要提現(xiàn)時(shí),可以將手里雙方簽署過的交易結(jié)果寫到區(qū)塊鏈網(wǎng)絡(luò)中,從而被確認(rèn)。只有在提現(xiàn)時(shí)候才需要通過區(qū)塊鏈。
任何一個(gè)版本的方案都需要經(jīng)過雙方的簽名認(rèn)證才合法。任何一方在任何時(shí)候都可以提出提現(xiàn),提現(xiàn)時(shí)需要提供一個(gè)雙方都簽名過的資金分配方案(意味著肯定是某次交易后的結(jié)果,被雙方確認(rèn)過,但未必是最新的結(jié)果)。在一定時(shí)間內(nèi),如果另外一方拿出證明表明這個(gè)方案已經(jīng)被作廢(非最新的交易結(jié)果),則資金罰沒給質(zhì)疑方;否則按照提出方的結(jié)果進(jìn)行分配。罰沒機(jī)制可以確保了沒人會(huì)故意拿一個(gè)舊的交易結(jié)果來提現(xiàn)。
另外,即使雙方都確認(rèn)了某次提現(xiàn),首先提出提現(xiàn)一方的資金到賬時(shí)間要晚于對(duì)方,鼓勵(lì)大家盡量都在鏈外完成交易。通過RSMC,可以實(shí)現(xiàn)大量中間交易發(fā)生在鏈外。

3、HTLC

微支付通道是通過Hashed Timelock Contract來實(shí)現(xiàn)的,中文意思是哈希的帶時(shí)鐘的合約,即限時(shí)轉(zhuǎn)賬。通過智能合約,雙方約定轉(zhuǎn)賬方先凍結(jié)一筆錢,并提供一個(gè)哈希值,如果在一定時(shí)間內(nèi)有人能提出一個(gè)字符串,使得哈希計(jì)算后的值跟已知提供的哈希值匹配,則錢轉(zhuǎn)給接收方。

4、閃電網(wǎng)絡(luò)的實(shí)現(xiàn)

RSMC 保障了兩個(gè)人之間的直接交易可以在鏈下完成,HTLC保障任意兩個(gè)人之間的轉(zhuǎn)賬都可以通過一條支付通道來完成。閃電網(wǎng)絡(luò)整合了RSMC和HTLC兩種機(jī)制,就可以實(shí)現(xiàn)任意兩個(gè)人之間的交易都在鏈下完成。
在整個(gè)交易中,智能合約起到中介的重要角色,而區(qū)塊鏈網(wǎng)絡(luò)則確保最終的交易結(jié)果被確認(rèn)。

六、側(cè)鏈

1、側(cè)鏈簡介

側(cè)鏈(Sidechain)協(xié)議允許資產(chǎn)在比特幣區(qū)塊鏈和其它區(qū)塊鏈之間互轉(zhuǎn)。側(cè)鏈也來自比特幣社區(qū),最早是在2013年12月提出,2014 年4月立項(xiàng),由Blockstream公司(由比特幣核心開發(fā)者 Adam Back、Matt Corallo等共同發(fā)起成立)主導(dǎo)研發(fā)。側(cè)鏈協(xié)議于 2014年10月在白皮書《Enabling Blockchain Innovations with Pegged Sidechains》中公開。
側(cè)鏈誕生前,眾多山寨幣的出現(xiàn)正在碎片化整個(gè)數(shù)字貨幣市場,再加上以太坊等項(xiàng)目的競爭,一些比特幣開發(fā)者希望能借助側(cè)鏈的形式擴(kuò)展比特幣的底層協(xié)議。
以比特幣區(qū)塊鏈作為主鏈(Parent chain),其它區(qū)塊鏈作為側(cè)鏈,二者通過雙向掛鉤(Two-way peg),可實(shí)現(xiàn)比特幣從主鏈轉(zhuǎn)移到側(cè)鏈進(jìn)行流通。
區(qū)塊鏈快速入門(七)——比特幣
側(cè)鏈可以是一個(gè)獨(dú)立的區(qū)塊鏈,有自己按需定制的賬本、共識(shí)機(jī)制、交易類型、腳本和合約的支持等。側(cè)鏈不能發(fā)行比特幣,但可以通過支持與比特幣區(qū)塊鏈掛鉤來引入和流通一定數(shù)量的比特幣。當(dāng)比特幣在側(cè)鏈流通時(shí),主鏈上對(duì)應(yīng)的比特幣會(huì)被鎖定,直到比特幣從側(cè)鏈回到主鏈。側(cè)鏈機(jī)制可將一些定制化或高頻的交易放到比特幣主鏈之外進(jìn)行,實(shí)現(xiàn)比特幣區(qū)塊鏈的擴(kuò)展。側(cè)鏈的核心原理在于能夠凍結(jié)一條鏈上的資產(chǎn),然后在另一條鏈上產(chǎn)生,可以通過多種方式來實(shí)現(xiàn)。

2、SPV證明

在比特幣系統(tǒng)中驗(yàn)證交易時(shí),涉及到交易合法性檢查、雙重花費(fèi)檢查、腳
本檢查等。由于驗(yàn)證過程需要完整的UTXO記錄,通常要由運(yùn)行著完整功能節(jié)點(diǎn)的礦工來完成。
而很多時(shí)候,用戶只關(guān)心與自己相關(guān)的交易,比如當(dāng)用戶收到其他人號(hào)稱發(fā)來的比特幣時(shí),只希望能夠知道交易是否合法、是否已在區(qū)塊鏈中存在了足夠的時(shí)間(即獲得足夠的確認(rèn)),而不需要自己成為完整節(jié)點(diǎn)做出完整驗(yàn)證。
中本聰設(shè)計(jì)的簡單支付驗(yàn)證(Simplified Payment Verification,SPV)可以實(shí)現(xiàn)這一點(diǎn)。SPV能夠以較小的代價(jià)判斷某個(gè)支付交易是否已經(jīng)被驗(yàn)證過(存在于區(qū)塊鏈中),以及得到了多少算力保護(hù)(定位包含該交易的區(qū)塊在區(qū)塊鏈中的位置)。SPV 客戶端只需要下載所有區(qū)塊的區(qū)塊頭(Block Header),并進(jìn)行簡單的定位和計(jì)算工作就可以給出驗(yàn)證結(jié)論。
側(cè)鏈協(xié)議中,用SPV來證明一個(gè)交易確實(shí)已經(jīng)在區(qū)塊鏈中發(fā)生過,稱為SPV證明(SPV Proof)。一個(gè)SPV證明包括兩部分內(nèi)容:一組區(qū)塊頭的列表,表示工作量證明;一個(gè)特定輸出(output)確實(shí)存在于某個(gè)區(qū)塊中的密碼學(xué)證明。

3、雙向掛鉤

側(cè)鏈協(xié)議的設(shè)計(jì)難點(diǎn)在于如何讓資產(chǎn)在主鏈和側(cè)鏈之間安全流轉(zhuǎn),即接受資產(chǎn)的鏈必須確保發(fā)送資產(chǎn)的鏈上的幣被可靠鎖定。
區(qū)塊鏈快速入門(七)——比特幣
側(cè)鏈協(xié)議采用雙向掛鉤機(jī)制實(shí)現(xiàn)比特幣向側(cè)鏈轉(zhuǎn)移和返回。主鏈和側(cè)鏈需要對(duì)對(duì)方的特定交易做SPV驗(yàn)證。完整過程如下:
A、當(dāng)用戶要向側(cè)鏈轉(zhuǎn)移比特幣時(shí),首先在主鏈創(chuàng)建交易,待轉(zhuǎn)移的比特幣被發(fā)往一個(gè)特殊的輸出,并在主鏈上被鎖定。
B、等待一段確認(rèn)期,使得上述交易獲得足夠的工作量確認(rèn)。
C、用戶在側(cè)鏈創(chuàng)建交易提取比特幣,需要在這筆交易的輸入指明上述主鏈被鎖定的輸出,并提供足夠的SPV證明。
D、等待一段競爭期,防止雙重花費(fèi)***。
E、比特幣在側(cè)鏈上自由流通。
F、當(dāng)用戶想讓比特幣返回主鏈時(shí),采取類似的反向操作。首先在側(cè)鏈創(chuàng)建交易,待返回的比特幣被發(fā)往一個(gè)特殊的輸出。先等待一段確認(rèn)期后,在主鏈用足夠的對(duì)側(cè)鏈輸出的SPV證明來解鎖最早被鎖定的輸出。競爭期過后,主鏈比特幣恢復(fù)流通。

七、熱點(diǎn)問題

1、設(shè)計(jì)中的權(quán)衡

比特幣的設(shè)計(jì)目標(biāo)在于支持一套安全、開放、分布式的數(shù)字貨幣系統(tǒng),因此,比特幣協(xié)議的設(shè)計(jì)中很多地方都體現(xiàn)了權(quán)衡(trade-off)的思想。
A、區(qū)塊容量:更大的區(qū)塊容量可以帶來更高的交易吞吐率,但會(huì)增加挖礦成本,帶來中心化的風(fēng)險(xiǎn),同時(shí)增大存儲(chǔ)的代價(jià)。兼顧多方面的考慮,當(dāng)前的區(qū)塊容量上限設(shè)定為1MB。
B、出塊間隔時(shí)間:更短的出塊間隔可以縮短交易確認(rèn)的時(shí)間,但也可能導(dǎo)致分叉增多,降低網(wǎng)絡(luò)可用性。
C、腳本支持程度:更強(qiáng)大的腳本指令集可以帶來更多靈活性,但也會(huì)引入更多安全風(fēng)險(xiǎn)。

2、分叉

比特幣協(xié)議不會(huì)一成不變。當(dāng)需要修復(fù)漏洞、擴(kuò)展功能或調(diào)整結(jié)構(gòu)時(shí),比特幣需要在全網(wǎng)的配合下進(jìn)行升級(jí)。升級(jí)通常涉及更改交易的數(shù)據(jù)結(jié)構(gòu)或區(qū)塊的數(shù)據(jù)結(jié)構(gòu)。
由于分布在全球的節(jié)點(diǎn)不可能同時(shí)完成升級(jí)來遵循新的協(xié)議,因此比特幣區(qū)塊鏈在升級(jí)時(shí)可能發(fā)生分叉(Fork)。對(duì)于一次升級(jí),如果把網(wǎng)絡(luò)中升級(jí)了的節(jié)點(diǎn)稱為新節(jié)點(diǎn),未升級(jí)的節(jié)點(diǎn)稱為舊節(jié)點(diǎn),根據(jù)新舊節(jié)點(diǎn)相互兼容性上的區(qū)別,可分為軟分叉(Soft Fork)和硬分叉(Hard Fork)。
如果舊節(jié)點(diǎn)仍然能夠驗(yàn)證接受新節(jié)點(diǎn)產(chǎn)生的交易和區(qū)塊,則稱為軟分叉。舊節(jié)點(diǎn)可能不理解新節(jié)點(diǎn)產(chǎn)生的一部分?jǐn)?shù)據(jù),但不會(huì)拒絕。網(wǎng)絡(luò)既向后和向前兼容,因此這類升級(jí)可以平穩(wěn)進(jìn)行。
如果舊節(jié)點(diǎn)不接受新節(jié)點(diǎn)產(chǎn)生的交易和區(qū)塊,則稱為硬分叉。網(wǎng)絡(luò)只向后兼容,不向前兼容。這類升級(jí)往往引起一段時(shí)間內(nèi)新舊節(jié)點(diǎn)所認(rèn)可的區(qū)塊不同,分出兩條鏈,直到舊節(jié)點(diǎn)升級(jí)完成。
盡管通過硬分叉升級(jí)區(qū)塊鏈協(xié)議的難度大于軟分叉,但軟分叉能做的事情畢竟有限,一些大膽的改動(dòng)只能通過硬分叉完成。

3、交易延展性

交易延展性(Transaction Malleablility)是比特幣的一個(gè)設(shè)計(jì)缺陷,是指當(dāng)交易發(fā)發(fā)起者對(duì)交易簽名(sign)后,交易ID仍然可能被改變。
發(fā)起者對(duì)交易的簽名(scriptSig)位于交易的輸入(vin)當(dāng)中,屬于交易內(nèi)容的一部分。交易ID(txid)是整個(gè)交易內(nèi)容的 Hash值,因此,造成***者(尤其是簽名方)可以通過改變scriptSig來改變txid,而交易仍舊保持合法。例如,反轉(zhuǎn)ECDSA簽名過程中的S值,簽名仍然合法,交易仍然能夠被傳播。
延展性***能改變交易ID,但交易的輸入和輸出不會(huì)被改變,所以***者不會(huì)直接盜取比特幣。因此,延展性***在比特幣網(wǎng)絡(luò)一直存在,仍未被根治。
然而,延展性***仍然會(huì)帶來一些問題。比如,在原始交易未被確認(rèn)之前廣播ID改變了的交易可能誤導(dǎo)相關(guān)方對(duì)交易狀態(tài)的判斷,甚至發(fā)動(dòng)拒絕服務(wù)***;多重簽名場景下一個(gè)簽名者有能力改變交易ID,給其他簽名者的資產(chǎn)帶來潛在風(fēng)險(xiǎn)。同時(shí),延展性問題也會(huì)阻礙閃電網(wǎng)絡(luò)等比特幣擴(kuò)展方案的實(shí)施。

4、擴(kuò)容爭議

比特幣當(dāng)前將區(qū)塊容量限制在1MB以下。隨著用戶和交易量的增加,區(qū)塊容量限制已逐漸不能滿足比特幣的交易需求,使得交易日益擁堵、交易手續(xù)費(fèi)不斷上漲。
關(guān)于比特幣擴(kuò)容的持續(xù)爭論從2015年便已開始,期間有一系列方案被擺上臺(tái)面,包括各種鏈上擴(kuò)容提議、用側(cè)鏈或閃電網(wǎng)絡(luò)擴(kuò)展比特幣等。考慮到比特幣復(fù)雜的社區(qū)環(huán)境,任何擴(kuò)容方案想要達(dá)成廣泛共識(shí)都比較困難,不同的方案之間也很難調(diào)和。
當(dāng)前,擴(kuò)容之爭主要集中在兩派:代表核心開發(fā)者的Bitcoin Core團(tuán)隊(duì)主推的隔離見證方案和Bitcoin Unlimited團(tuán)隊(duì)推出的方案。
隔離見證(Segregated Witness,簡稱SegWit)是指將交易中的簽名部分從交易的輸入中隔離出來,放到交易末尾的被稱為見證(Witness)的字段當(dāng)中。
對(duì)交易ID 的計(jì)算將不再包含簽名部分,是延展性問題的一種解法,給引入閃電網(wǎng)絡(luò)等第二層協(xié)議增強(qiáng)了安全性。
同時(shí),隔離見證會(huì)將區(qū)塊容量上限理論上提高到4MB。
Bitcoin Unlimited方案(簡稱 BU)是指擴(kuò)展比特幣客戶端,使礦工可以自由配置想要生成和驗(yàn)證的區(qū)塊的容量。
根據(jù)方案的設(shè)想,區(qū)塊容量的上限會(huì)根據(jù)眾多節(jié)點(diǎn)和礦工的配置進(jìn)行自然收斂。

5、比特幣的監(jiān)管和追蹤

比特幣的匿名特性,使得其上交易的監(jiān)管變得十分困難。不少非法分子利用其匿名性,通過比特幣轉(zhuǎn)移資金。例如WannaCry 網(wǎng)絡(luò)病毒向受害者勒索比特幣,短短三天時(shí)間里傳播并影響到全球150多個(gè)國家。
但通過比特幣就可以實(shí)現(xiàn)完全匿名化并不現(xiàn)實(shí)。雖然交易賬戶自身是匿名的Hash地址,但一些研究成果(如《An analysis of anonymity in the bitcoin system》)表明,通過分析大量公開可得的交易記錄,有很大概率可以追蹤到比特幣的實(shí)際轉(zhuǎn)移路線,甚至可以追蹤到真實(shí)用戶。

八、比特幣相關(guān)工具

1、客戶端

比特幣客戶端用于和比特幣網(wǎng)絡(luò)進(jìn)行交互,同時(shí)可以參與到網(wǎng)絡(luò)的維護(hù)。
客戶端分為三種:完整客戶端、輕量級(jí)客戶端和在線客戶端。
完整客戶端:存儲(chǔ)所有的交易歷史記錄,功能完備。
輕量級(jí)客戶端:不保存交易副本,交易需要向別人查詢。
在線客戶端:通過網(wǎng)頁模式來瀏覽第三方服務(wù)器提供的服務(wù)。
比特幣客戶端下載地址:https://bitcoin.org/en/download
基于比特幣客戶端,可以很容易實(shí)現(xiàn)用戶錢包功能。

2、錢包

比特幣錢包存儲(chǔ)和保護(hù)用戶的私鑰,并提供查詢比特幣余額、收發(fā)比特幣等功能。根據(jù)私鑰存儲(chǔ)方式不同,錢包主要分為以下幾種:
離線錢包:離線存儲(chǔ)私鑰,也稱為“冷錢包”。安全性相對(duì)最強(qiáng),但無法直接發(fā)送交易,便利性差。
本地錢包:用本地設(shè)備存儲(chǔ)私鑰。可直接向比特幣網(wǎng)絡(luò)發(fā)送交易,易用性強(qiáng),但本地設(shè)備存在被***風(fēng)險(xiǎn)。
在線錢包:用錢包服務(wù)器存儲(chǔ)經(jīng)用戶口令加密過的私鑰。易用性強(qiáng),但錢包服務(wù)器同樣可能被***。
多重簽名錢包:由多方共同管理一個(gè)錢包地址,比如2of 3模式下,集合三位管理者中的兩位的私鑰便可以發(fā)送交易。
比特幣錢包下載地址:https://bitcoin.org/en/choose-your-wallet

3、礦機(jī)

比特幣礦機(jī)是專門為“挖礦”設(shè)計(jì)的硬件設(shè)備,目前主要包括基于GPU和ASIC芯片的專用礦機(jī)。礦機(jī)往往采用特殊的設(shè)計(jì)來加速挖礦過程中的計(jì)算處理。
礦機(jī)最重要的屬性是可提供的算力(通常以每秒可進(jìn)行 Hash計(jì)算的次數(shù)來表示)和所需要的功耗。當(dāng)算力足夠大,可以在概率意義上挖到足夠多的新的區(qū)塊,來彌補(bǔ)電力費(fèi)用時(shí),礦機(jī)是可以盈利的;當(dāng)單位電力產(chǎn)生的算力不足以支付電力費(fèi)用時(shí),礦機(jī)無法盈利,只能被淘汰。
目前,比特幣網(wǎng)絡(luò)中的全網(wǎng)算力仍然在快速增長中,礦工需要綜合考慮算力變化、比特幣價(jià)格、功耗帶來的電費(fèi)等許多問題,需要算好經(jīng)濟(jì)賬。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI