節點投票挖礦
PoC的本質,用一個普通人也可以理解的話說,就是用硬碟挖礦。沒錯,PoW是用CPU(或者顯卡、ASIC礦機,他們的本質都是更強的計算晶元,與CPU本質上是一樣的)挖礦、PoS是憑借持幣比例挖礦,DPoS是根據投票決定超級節點,而PoC就是憑借硬碟挖礦。
我們可以這么理解:
-在PoW里是誰的晶元計算快、誰就容易挖到礦;
-在PoS里是誰持幣多,誰就容易挖到礦;
-在DPoS里是誰獲得的投票多,誰就能成為超級節點進行挖礦;
-在PoC里就是誰的硬碟容量大,誰就容易挖到礦。
是不是足夠簡單易懂了吧!
要理解PoC的具體原理,我們還是得從比特幣PoW入手(研究區塊鏈,PoW就是你永遠也繞不過去的技術概念)。
PoW的全稱是Proof of Work,即工作量證明。這兒所謂的工作量,就是礦工的CPU(或者顯卡、ASIC晶元,我們前面已經說過,這些硬體只是計算速度更快,本質和CPU並無區別)執行一種叫做哈希演算法的計算工作。簡而言之,誰能夠在單位時間內執行更多次的哈希計算,誰就有更大幾率產生一個符合要求的哈希結果、進而拿到寫入區塊鏈的權利。
可以這么說,比特幣PoW的本質就是算力競爭挖礦。每一個新區塊的產生,就是給礦工出一道「難題」,礦工通過算力競爭,比拼誰能夠先找到符合要求的「答案」。礦工通過購買牛逼的計算晶元,以及持續地消耗電能進行高頻率高強度的哈希計算,去獲得更強的算力佔比,進而獲得更大的找到 「答案」的概率。如果一個比特幣礦工擁有全網20%的算力,理論上他就可以挖出20%的新區塊、進而獲得20%的區塊獎勵(最早每個塊有50個比特幣獎勵,現在已經減少到12.5個,明年還會繼續減半)。
PoW挖礦規則簡單粗暴、算力可以自由進出,因此能建立足夠的安全性,來保證區塊鏈不被篡改的特性。這就是為什麼比特幣雖然技術看似簡單,但是能夠成為幣王之王,占據一半左右的市值。
此外,比特幣的分叉幣(例如BCH和BSV)、萊特幣LTC、以太坊ETH、門羅幣Monero、達世幣Dash也都是全部或部分採用了PoW機制挖礦的幣種,只不過這些幣種可能在一些技術參數上與比特幣有區別,但總體思想是類似的。
我們今天的主角PoC,和比特幣PoW有異曲同工之妙,但是又有一些實質性的區別。我們知道,比特幣PoW要求礦工持續地、反復地執行哈希計算,礦工需要高強度地運行他們的計算晶元,並消耗極為可觀的電力資源。
我們的PoC則是另行開辟了一條極為巧妙的道路:它要求礦工預先計算好數量巨大的哈希結果,並將這些數據存儲在硬碟里;挖礦的時候,礦工也是爭相破解「難題」,不同的是「難題」的答案要在硬碟數據中找,而不是實時地計算。自然而然,誰的硬碟容量更大,誰就有能預先存儲更多的「備選答案」,誰就有更高的概率找到能夠匹配「難題」的那個「正確答案」。
有人可能要問了,在PoC這個機制中,礦工有沒有可能通過晶元去計算答案作弊呢?不可能。PoC的演算法設計決定了它在找「答案」的時候,對存儲空間這一要素非常敏感,而對晶元的計算能力不那麼敏感。強大的算力對礦工挖礦成功率加成並不是很大,而擁有更多的存儲空間倒是能成倍地提高挖礦成功率。PoC的這種特性也被形象地稱為「空間換時間」。
② 區塊鏈的共識機制
所謂「共識機制」,是通過特殊節點的投票,在很短的時間內完成對交易的驗證和確認;對一筆交易,如果利益不相乾的若干個節點能夠達成共識,我們就可以認為全網對此也能夠達成共識。北京木奇移動技術有限公司,專業的區塊鏈外包開發公司,歡迎洽談合作。下面我們將一下區塊鏈的幾種共識機制,希望對大家了解區塊鏈基礎技術有幫助。
因為區塊鏈技術的發展, 大家對共識機制這個詞也不再陌生,隨著技術發展,各種創新的共識機制也在發展。
POW工作量證明
比特幣就是使用PoW工作量證明機制,到後來的以太坊都是PoW的共識機制。Pow相當於算出很難的數學難題,就是計算出新區塊的hash值,而且計算的難度會每一段時間就會調整。PoW雖然是大家比較認可的共識機制,計算會消耗大量的能源,還有可能會污染環境。
POS權益證明
通過持有Token的數量和時長來決定獲得記賬權的機率。相比POW,POS避免了挖礦造成大量的資源浪費,縮短了各個節點之間達成共識的時間,網路環境好的話可實現毫秒級,對節點性能要求低。
但POS的缺點同樣明顯,持有Token多的節點更有機會獲得記賬權,這將導致「馬太效應」,富者越富,破壞了區塊鏈的去中心化。
DPOS權益證明
DPOS委託權益證明與POS原理相同,其主要區別在於,DPOS的Token持有者可以投票選舉代理人作為超級節點,負責在網路上生產區塊並維護共識規則。如果這些節點未能履行職責,將投票選出新的節點。同樣的弊端也是傾向於中心化。
POA權威證明
POA節點之間無需進行通信即可達成共識,因此效率極高。並且它也能很好地對抗算力攻擊,安全性較高。但是POA需要一個集中的權威節點來驗證身份,這就意味著它會損害區塊鏈的去中心化,這也是在去中心化和提高效率之間的妥協。
③ 黃金節點怎麼賺錢
1、質押獲得收益:黃金節點可以將一定數量的黃金質押到鏈上,獲得相應的收益。這種收益可以是黃金本身的增值,也可以是鏈上的通證獎勵等。
2、挖礦獲得收益:黃金節襲明點核羨可以通過挖礦獲得收益。挖礦是指通過計算機算力來維護鏈上的交易和安全,從而獲得相應的獎勵。
3、參與社區治理:黃金節點可以參與鏈上社區的治理,例如投票選舉節點、提出治理提案改禪拍等。通過參與社區治理,可以獲得相應的獎勵。
4、投資黃金項目:黃金節點也可以將自己的資金投資到黃金項目中,例如黃金ETF等。通過投資黃金項目,可以獲得相應的收益。
④ 挖礦怎麼賺錢
挖礦怎麼賺錢?現在越來越多的朋友正在加入幣圈挖礦,作為一個比較靠譜的平台,怎麼在上挖礦賺錢呢?一起來看一下吧~
礦池的挖礦機制一般有3種模式。
挖礦即挖礦
一般針對的是BTC等POW機制下要挖礦機挖礦的幣,挖礦機在挖這類幣的過程中能夠將機器對接入礦池上,一份算力得到2份幣。這類機制針對一般的用戶來講起始點非常高,可用上挖礦機培李去比特幣挖礦的都是高端選手了。
投票即挖礦
這種APP發布了EOS節點的投票功能,假如你用了這種功能,塌和給某一個節點投票,就可以得到HPT獎賞。
鎖倉即挖礦
將你的EOS託管鎖定,APP會依據你鎖倉幣的數目和周期時間,給與HPT的收益,而且比例還不低。現階段鎖倉100個EOS,90天周期時間,每日分25個HPT。依照HPT現階段的市團中盯價,100個柚子90天賺大約120元,年化達8%以上。假如你的柚子數目多,而且打算長期持有,也是一筆不錯的收入。
⑤ 幣圈內的一些專業術語是什麼
1、Blockchain——區塊鏈
區塊鏈是分布式數據存儲、點對點傳輸、共識機制、加密貨幣演算法等計算機技術的新型應用模式。是一個共享的分布式賬本,其中交易通過附加塊永久記錄。
2、Block——區塊
在比特幣網路中,數據會以文件的形式被永久記錄,我們稱這些文件為區塊。一個區塊是一些或所有最新比特幣交易的記錄集,且未被其他先前的區塊記錄。
3、Node——節點
由區塊鏈網路的參與者操作的分類帳的副本。
4、去中心化
去中心化是一種現象或結構,必須在擁有眾多節點的系統中或在擁有眾多個體的群中才能出現或存在。節點與節點之間的影響,會通過網路而形成非線性因果關系。
5、共識機制
共識機制是通過特殊節點的投票,在很短的時間內完成對交易的驗證和確認;對一筆交易,如果利益不相乾的若干個節點能夠達成共識,我們就可以認為全網對此也能夠達成共識。
6、Pow——工作量證明
Proofof Work,是指獲得多少貨幣,取決於你挖礦貢獻的工作量,電腦性能越好,分給你的礦就會越多。
7、PoS——權益證明
Proofof Stake,根據你持有貨幣的量和時間進行利息分配的制度,在POS模式下,你的「挖礦」收益正比於你的幣齡,而與電腦的計算性能無關。
8、智能合約
智能合約是一種旨在以信息化方式傳播、驗證或執行合約的計算機協議。智能合約允許在沒有第三方的情況下進行可信交易,這些交易可追蹤且不可逆轉。
9、時間戳
時間戳是指字元串或編碼信息用於辨識記錄下來的時間日期。國際標准為ISO 8601。
10、圖靈完備
圖靈完成是指機器執行任何其他可編程計算機能夠執行計算的能力。
11、Dapp——去中心化應用
是一種開源的應用程序,自動運行,將其數據存儲在區塊鏈上,以加密貨幣令牌的形式激勵,並以顯示有價值證明的協議進行操作。
12、DAO——去中心化自治組織
可以認為是在沒有任何人為干預的情況下運行的公司,並將一切形式的控制交給一套不可破壞的業務規則。
13、PrivateKey——私鑰
私鑰是一串數據,它是允許你訪問特定錢包中的令牌。它們作為加密貨幣,除了地址的所有者之外,都被隱藏。
14、PublicKey——公鑰
是和私鑰成對出現的,公鑰可以算出幣的地址,因此可以作為擁有這個幣地址的憑證。
15、礦機
嘗試創建區塊並將其添加到區塊鏈上的計算設備或者軟體。在一個區塊鏈網路中,當一個新的有效區塊被創建時,系統一般會自動給予區塊創建者(礦機)一定數量的代幣,作為獎勵。
16、礦池
是一個全自動的挖礦平台,使得礦機們能夠貢獻各自的算力一起挖礦以創建區塊,獲得區塊獎勵,並根據算力貢獻比例分配利潤(即礦機接入礦池—提供算力—獲得收益)。
17、公有鏈
完全開放的區塊鏈,是指任何人都可讀取的、任何人都能發送交易且交易能獲得有效確認的、全世界的人都可以參與系統維護工作,任何人都可以通過交易或挖礦讀取和寫入數據。
18、私有鏈
寫入許可權僅面向某個組織或者特定少數對象的區塊鏈。讀取許可權可以對外開放,或者進行任意程度地限制。
19、聯盟鏈
共識機制由指定若干機構共同控制的區塊鏈。
20、側鏈
楔入式側鏈技術(pegged sidechains),它將實現比特幣和其他數字資產在多個區塊鏈間的轉移,這就意味著用戶們在使用他們已有資產的情況下,就可以訪問新的加密貨幣系統。
21、跨鏈技術
跨鏈技術可以理解為連接各區塊鏈的橋梁,其主要應用是實現各區塊鏈之間的Atom交易、資產轉換、區塊鏈內部信息互通,或解決Oracle的問題等。
22、硬分叉
區塊鏈發生永久性分歧,在新共識規則發布後,部分沒有升級的節點無法驗證已經升級的節點生產的區塊,通常硬分叉就會發生。
23、軟分叉
當新共識規則發布後,沒有升級的節點會因為不知道新共識規則下,而生產不合法的區塊,就會產生臨時性分叉。
24、Hash——哈希值
一般翻譯做」散列」,也有直接音譯為」哈希」的。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。
25、主鏈
主鏈一詞源於主網(,相對於測試網),即正式上線的、獨立的區塊鏈網路。
對幣圈「行話」還不了解的小夥伴,趕快來學習一下:
1、法幣是什麼?
法幣是法定貨幣,是由國家和政府發行的,只有政府信用來做擔保,如人民幣、美元等等。
2、token是什麼?
token,通常翻譯成通證。Token是區塊鏈中的重要概念之一,它更廣為人知的名字是「代幣」,但在專業的「鏈圈」人看來,它更准確的翻譯是「通證」,代表的是區塊鏈上的一種權益證明,而非貨幣。
Token的三個要素
一是數字權益證明,通證必須是以數字形式存在的權益憑證,代表一種權利、一種固有和內在的價值;
二是加密貨幣,通證的真實性、防篡改性、保護隱私等能力由加密貨幣學予以保障;
三是能夠在一個網路中流動,從而隨時隨地可以驗證。
3、建倉是什麼?
幣圈建倉也叫開倉,是指交易者新買入或新賣出一定數量的數字貨幣。
4、梭哈是什麼?
幣圈梭哈就是指把本金全部投入。
5、空投是什麼?
空投是目前一種十分流行的加密貨幣營銷方式。為了讓潛在投資者和熱衷加密貨幣的人獲得代幣相關信息,代幣團隊會經常性地進行空投。
6、鎖倉是什麼?
鎖倉一般是指投資者在買賣合約後,當市場出現與自己操作相反的走勢時,開立與原先持倉相反的新倉,又稱對鎖、鎖單,甚至美其名曰蝴蝶雙飛。
7、糖果是什麼?
幣圈糖果即各種數字貨幣剛發行處在ICO時免費發放給用戶的數字幣,是虛擬幣項目發行方對項目本身的一種造勢和宣傳。
8、破發是什麼?
破指的是跌破,發指的是數字貨幣的發行價格。幣圈破發是指某種數字貨幣跌破了發行的價格。
9、私募是什麼?
幣圈私募是一種投資加密貨幣項目的方式,也是加密貨幣項目創始人為平台運作募集資金的最好方式。
10、K線圖怎麼看?
K線圖(Candlestick Charts)又稱蠟燭圖、日本線、陰陽線、棒線、紅黑線等,常用說法是「K線」。它是以每個分析周期的開盤價、最高價、最低價和收盤價繪制而成。
11、對沖是什麼?
一般對沖是同時進行兩筆行情相關、方向相反、數量相當、盈虧相抵的交易。在期貨合約市場,買入相同數量方向不同的頭寸,當方向確定後,平倉掉反方向頭寸,保留正方向獲取盈利。
12、頭寸是什麼?
頭寸是一種市場約定,承諾買賣合約的最初部位,買進合約者是多頭,處於盼漲部位;賣出合約為空頭,處於盼跌部位。
13、利好是什麼?
利好:指幣種獲得主流媒體關注,或者某項技術應用有突破性進展,有利於刺激價格上漲的消息,都稱為利好。
14、利空是什麼?
利空:促使幣價下跌的消息,如比特幣技術問題,央行打壓等。
15、反彈是什麼?
幣價在下跌趨勢中因下跌過快而回升的價格調整現象。回升幅度小於下跌幅度。
16、杠桿是什麼?
杠桿交易,顧名思義,就是利用小額的資金來進行數倍於原始金額的投資,以期望獲取相對投資標的物波動的數倍收益率,抑或虧損。
⑥ 什麼是POV的共識
POV共識就是投票挖礦。
在POS共識的基礎上加了獨特設計,即可以將投票權轉給類似礦池的角色,讓礦池代替挖礦,在用戶獲取挖礦收益的同時礦池會收取相應手續費。相比傳統的DPOS共識,POV更加去中心化,DPOS權重被大節點把持相比,而POV共識權重處於尾部的礦池仍有機會出塊。與PoW共識相比則不需要浪費大量算力和資源去挖礦也能達到像PoW一樣比較分散的去中心化。
⑦ 詳解比特幣挖礦原理
可以將區塊鏈看作一本記錄所有交易的公開總帳簿(列表),比特幣網路中的每個參與者都把它看作一本所有權的權威記錄。
比特幣沒有中心機構,幾乎所有的完整節點都有一份公共總帳的備份,這份總帳可以被視為認證過的記錄。
至今為止,在主幹區塊鏈上,沒有發生一起成功的攻擊,一次都沒有。
通過創造出新區塊,比特幣以一個確定的但不斷減慢的速率被鑄造出來。大約每十分鍾產生一個新區塊,每一個新區塊都伴隨著一定數量從無到有的全新比特幣。每開采210,000個塊,大約耗時4年,貨幣發行速率降低50%。
在2016年的某個時刻,在第420,000個區塊被「挖掘」出來之後降低到12.5比特幣/區塊。在第13,230,000個區塊(大概在2137年被挖出)之前,新幣的發行速度會以指數形式進行64次「二等分」。到那時每區塊發行比特幣數量變為比特幣的最小貨幣單位——1聰。最終,在經過1,344萬個區塊之後,所有的共20,999,999.9769億聰比特幣將全部發行完畢。換句話說, 到2140年左右,會存在接近2,100萬比特幣。在那之後,新的區塊不再包含比特幣獎勵,礦工的收益全部來自交易費。
在收到交易後,每一個節點都會在全網廣播前對這些交易進行校驗,並以接收時的相應順序,為有效的新交易建立一個池(交易池)。
每一個節點在校驗每一筆交易時,都需要對照一個長長的標准列表:
交易的語法和數據結構必須正確。
輸入與輸出列表都不能為空。
交易的位元組大小是小於MAX_BLOCK_SIZE的。
每一個輸出值,以及總量,必須在規定值的范圍內 (小於2,100萬個幣,大於0)。
沒有哈希等於0,N等於-1的輸入(coinbase交易不應當被中繼)。
nLockTime是小於或等於INT_MAX的。
交易的位元組大小是大於或等於100的。
交易中的簽名數量應小於簽名操作數量上限。
解鎖腳本(Sig)只能夠將數字壓入棧中,並且鎖定腳本(Pubkey)必須要符合isStandard的格式 (該格式將會拒絕非標准交易)。
池中或位於主分支區塊中的一個匹配交易必須是存在的。
對於每一個輸入,如果引用的輸出存在於池中任何的交易,該交易將被拒絕。
對於每一個輸入,在主分支和交易池中尋找引用的輸出交易。如果輸出交易缺少任何一個輸入,該交易將成為一個孤立的交易。如果與其匹配的交易還沒有出現在池中,那麼將被加入到孤立交易池中。
對於每一個輸入,如果引用的輸出交易是一個coinbase輸出,該輸入必須至少獲得COINBASE_MATURITY (100)個確認。
對於每一個輸入,引用的輸出是必須存在的,並且沒有被花費。
使用引用的輸出交易獲得輸入值,並檢查每一個輸入值和總值是否在規定值的范圍內 (小於2100萬個幣,大於0)。
如果輸入值的總和小於輸出值的總和,交易將被中止。
如果交易費用太低以至於無法進入一個空的區塊,交易將被拒絕。
每一個輸入的解鎖腳本必須依據相應輸出的鎖定腳本來驗證。
以下挖礦節點取名為 A挖礦節點
挖礦節點時刻監聽著傳播到比特幣網路的新區塊。而這些新加入的區塊對挖礦節點有著特殊的意義。礦工間的競爭以新區塊的傳播而結束,如同宣布誰是最後的贏家。對於礦工們來說,獲得一個新區塊意味著某個參與者贏了,而他們則輸了這場競爭。然而,一輪競爭的結束也代表著下一輪競爭的開始。
驗證交易後,比特幣節點會將這些交易添加到自己的內存池中。內存池也稱作交易池,用來暫存尚未被加入到區塊的交易記錄。
A節點需要為內存池中的每筆交易分配一個優先順序,並選擇較高優先順序的交易記錄來構建候選區塊。
一個交易想要成為「較高優先順序」,需滿足的條件:優先值大於57,600,000,這個值的生成依賴於3個參數:一個比特幣(即1億聰),年齡為一天(144個區塊),交易的大小為250個位元組:
High Priority > 100,000,000 satoshis * 144 blocks / 250 bytes = 57,600,000
區塊中用來存儲交易的前50K位元組是保留給較高優先順序交易的。 節點在填充這50K位元組的時候,會優先考慮這些最高優先順序的交易,不管它們是否包含了礦工費。這種機制使得高優先順序交易即便是零礦工費,也可以優先被處理。
然後,A挖礦節點會選出那些包含最小礦工費的交易,並按照「每千位元組礦工費」進行排序,優先選擇礦工費高的交易來填充剩下的區塊。
如區塊中仍有剩餘空間,A挖礦節點可以選擇那些不含礦工費的交易。有些礦工會竭盡全力將那些不含礦工費的交易整合到區塊中,而其他礦工也許會選擇忽略這些交易。
在區塊被填滿後,內存池中的剩餘交易會成為下一個區塊的候選交易。因為這些交易還留在內存池中,所以隨著新的區塊被加到鏈上,這些交易輸入時所引用UTXO的深度(即交易「塊齡」)也會隨著變大。由於交易的優先值取決於它交易輸入的「塊齡」,所以這個交易的優先值也就隨之增長了。最後,一個零礦工費交易的優先值就有可能會滿足高優先順序的門檻,被免費地打包進區塊。
UTXO(Unspent Transaction Output) : 每筆交易都有若干交易輸入,也就是資金來源,也都有若干筆交易輸出,也就是資金去向。一般來說,每一筆交易都要花費(spend)一筆輸入,產生一筆輸出,而其所產生的輸出,就是「未花費過的交易輸出」,也就是 UTXO。
塊齡:UTXO的「塊齡」是自該UTXO被記錄到區塊鏈為止所經歷過的區塊數,即這個UTXO在區塊鏈中的深度。
區塊中的第一筆交易是筆特殊交易,稱為創幣交易或者coinbase交易。這個交易是由挖礦節點構造並用來獎勵礦工們所做的貢獻的。假設此時一個區塊的獎勵是25比特幣,A挖礦的節點會創建「向A的地址支付25.1個比特幣(包含礦工費0.1個比特幣)」這樣一個交易,把生成交易的獎勵發送到自己的錢包。A挖出區塊獲得的獎勵金額是coinbase獎勵(25個全新的比特幣)和區塊中全部交易礦工費的總和。
A節點已經構建了一個候選區塊,那麼就輪到A的礦機對這個新區塊進行「挖掘」,求解工作量證明演算法以使這個區塊有效。比特幣挖礦過程使用的是SHA256哈希函數。
用最簡單的術語來說, 挖礦節點不斷重復進行嘗試,直到它找到的隨機調整數使得產生的哈希值低於某個特定的目標。 哈希函數的結果無法提前得知,也沒有能得到一個特定哈希值的模式。舉個例子,你一個人在屋裡打檯球,白球從A點到達B點,但是一個人推門進來看到白球在B點,卻無論如何是不知道如何從A到B的。哈希函數的這個特性意味著:得到哈希值的唯一方法是不斷的嘗試,每次隨機修改輸入,直到出現適當的哈希值。
需要以下參數
• block的版本 version
• 上一個block的hash值: prev_hash
• 需要寫入的交易記錄的hash樹的值: merkle_root
• 更新時間: ntime
• 當前難度: nbits
挖礦的過程就是找到x使得
SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + x )) < TARGET
上式的x的范圍是0~2^32, TARGET可以根據當前難度求出的。
簡單打個比方,想像人們不斷扔一對色子以得到小於一個特定點數的游戲。第一局,目標是12。只要你不扔出兩個6,你就會贏。然後下一局目標為11。玩家只能扔10或更小的點數才能贏,不過也很簡單。假如幾局之後目標降低為了5。現在有一半機率以上扔出來的色子加起來點數會超過5,因此無效。隨著目標越來越小,要想贏的話,扔色子的次數會指數級的上升。最終當目標為2時(最小可能點數),只有一個人平均扔36次或2%扔的次數中,他才能贏。
如前所述,目標決定了難度,進而影響求解工作量證明演算法所需要的時間。那麼問題來了:為什麼這個難度值是可調整的?由誰來調整?如何調整?
比特幣的區塊平均每10分鍾生成一個。這就是比特幣的心跳,是貨幣發行速率和交易達成速度的基礎。不僅是在短期內,而是在幾十年內它都必須要保持恆定。在此期間,計算機性能將飛速提升。此外,參與挖礦的人和計算機也會不斷變化。為了能讓新區塊的保持10分鍾一個的產生速率,挖礦的難度必須根據這些變化進行調整。事實上,難度是一個動態的參數,會定期調整以達到每10分鍾一個新區塊的目標。簡單地說,難度被設定在,無論挖礦能力如何,新區塊產生速率都保持在10分鍾一個。
那麼,在一個完全去中心化的網路中,這樣的調整是如何做到的呢?難度的調整是在每個完整節點中獨立自動發生的。每2,016個區塊(2周產生的區塊)中的所有節點都會調整難度。難度的調整公式是由最新2,016個區塊的花費時長與20,160分鍾(兩周,即這些區塊以10分鍾一個速率所期望花費的時長)比較得出的。難度是根據實際時長與期望時長的比值進行相應調整的(或變難或變易)。簡單來說,如果網路發現區塊產生速率比10分鍾要快時會增加難度。如果發現比10分鍾慢時則降低難度。
為了防止難度的變化過快,每個周期的調整幅度必須小於一個因子(值為4)。如果要調整的幅度大於4倍,則按4倍調整。由於在下一個2,016區塊的周期不平衡的情況會繼續存在,所以進一步的難度調整會在下一周期進行。因此平衡哈希計算能力和難度的巨大差異有可能需要花費幾個2,016區塊周期才會完成。
舉個例子,當前A節點在挖277,316個區塊,A挖礦節點一旦完成計算,立刻將這個區塊發給它的所有相鄰節點。這些節點在接收並驗證這個新區塊後,也會繼續傳播此區塊。當這個新區塊在網路中擴散時,每個節點都會將它作為第277,316個區塊(父區塊為277,315)加到自身節點的區塊鏈副本中。當挖礦節點收到並驗證了這個新區塊後,它們會放棄之前對構建這個相同高度區塊的計算,並立即開始計算區塊鏈中下一個區塊的工作。
比特幣共識機制的第三步是通過網路中的每個節點獨立校驗每個新區塊。當新區塊在網路中傳播時,每一個節點在將它轉發到其節點之前,會進行一系列的測試去驗證它。這確保了只有有效的區塊會在網路中傳播。
每一個節點對每一個新區塊的獨立校驗,確保了礦工無法欺詐。在前面的章節中,我們看到了礦工們如何去記錄一筆交易,以獲得在此區塊中創造的新比特幣和交易費。為什麼礦工不為他們自己記錄一筆交易去獲得數以千計的比特幣?這是因為每一個節點根據相同的規則對區塊進行校驗。一個無效的coinbase交易將使整個區塊無效,這將導致該區塊被拒絕,因此,該交易就不會成為總賬的一部分。
比特幣去中心化的共識機制的最後一步是將區塊集合至有最大工作量證明的鏈中。一旦一個節點驗證了一個新的區塊,它將嘗試將新的區塊連接到到現存的區塊鏈,將它們組裝起來。
節點維護三種區塊:
· 第一種是連接到主鏈上的,
· 第二種是從主鏈上產生分支的(備用鏈),
· 第三種是在已知鏈中沒有找到已知父區塊的。
有時候,新區塊所延長的區塊鏈並不是主鏈,這一點我們將在下面「 區塊鏈分叉」中看到。
如果節點收到了一個有效的區塊,而在現有的區塊鏈中卻未找到它的父區塊,那麼這個區塊被認為是「孤塊」。孤塊會被保存在孤塊池中,直到它們的父區塊被節點收到。一旦收到了父區塊並且將其連接到現有區塊鏈上,節點就會將孤塊從孤塊池中取出,並且連接到它的父區塊,讓它作為區塊鏈的一部分。當兩個區塊在很短的時間間隔內被挖出來,節點有可能會以相反的順序接收到它們,這個時候孤塊現象就會出現。
選擇了最大難度的區塊鏈後,所有的節點最終在全網范圍內達成共識。隨著更多的工作量證明被添加到鏈中,鏈的暫時性差異最終會得到解決。挖礦節點通過「投票」來選擇它們想要延長的區塊鏈,當它們挖出一個新塊並且延長了一個鏈,新塊本身就代表它們的投票。
因為區塊鏈是去中心化的數據結構,所以不同副本之間不能總是保持一致。區塊有可能在不同時間到達不同節點,導致節點有不同的區塊鏈視角。解決的辦法是, 每一個節點總是選擇並嘗試延長代表累計了最大工作量證明的區塊鏈,也就是最長的或最大累計難度的鏈。
當有兩個候選區塊同時想要延長最長區塊鏈時,分叉事件就會發生。正常情況下,分叉發生在兩名礦工在較短的時間內,各自都算得了工作量證明解的時候。兩個礦工在各自的候選區塊一發現解,便立即傳播自己的「獲勝」區塊到網路中,先是傳播給鄰近的節點而後傳播到整個網路。每個收到有效區塊的節點都會將其並入並延長區塊鏈。如果該節點在隨後又收到了另一個候選區塊,而這個區塊又擁有同樣父區塊,那麼節點會將這個區塊連接到候選鏈上。其結果是,一些節點收到了一個候選區塊,而另一些節點收到了另一個候選區塊,這時兩個不同版本的區塊鏈就出現了。
分叉之前
分叉開始
我們看到兩個礦工幾乎同時挖到了兩個不同的區塊。為了便於跟蹤這個分叉事件,我們設定有一個被標記為紅色的、來自加拿大的區塊,還有一個被標記為綠色的、來自澳大利亞的區塊。
假設有這樣一種情況,一個在加拿大的礦工發現了「紅色」區塊的工作量證明解,在「藍色」的父區塊上延長了塊鏈。幾乎同一時刻,一個澳大利亞的礦工找到了「綠色」區塊的解,也延長了「藍色」區塊。那麼現在我們就有了兩個區塊:一個是源於加拿大的「紅色」區塊;另一個是源於澳大利亞的「綠色」。這兩個區塊都是有效的,均包含有效的工作量證明解並延長同一個父區塊。這個兩個區塊可能包含了幾乎相同的交易,只是在交易的排序上有些許不同。
比特幣網路中鄰近(網路拓撲上的鄰近,而非地理上的)加拿大的節點會首先收到「紅色」區塊,並建立一個最大累計難度的區塊,「紅色」區塊為這個鏈的最後一個區塊(藍色-紅色),同時忽略晚一些到達的「綠色」區塊。相比之下,離澳大利亞更近的節點會判定「綠色」區塊勝出,並以它為最後一個區塊來延長區塊鏈(藍色-綠色),忽略晚幾秒到達的「紅色」區塊。那些首先收到「紅色」區塊的節點,會即刻以這個區塊為父區塊來產生新的候選區塊,並嘗試尋找這個候選區塊的工作量證明解。同樣地,接受「綠色」區塊的節點會以這個區塊為鏈的頂點開始生成新塊,延長這個鏈。
分叉問題幾乎總是在一個區塊內就被解決了。網路中的一部分算力專注於「紅色」區塊為父區塊,在其之上建立新的區塊;另一部分算力則專注在「綠色」區塊上。即便算力在這兩個陣營中平均分配,也總有一個陣營搶在另一個陣營前發現工作量證明解並將其傳播出去。在這個例子中我們可以打個比方,假如工作在「綠色」區塊上的礦工找到了一個「粉色」區塊延長了區塊鏈(藍色-綠色-粉色),他們會立刻傳播這個新區塊,整個網路會都會認為這個區塊是有效的,如上圖所示。
所有在上一輪選擇「綠色」區塊為勝出者的節點會直接將這條鏈延長一個區塊。然而,那些選擇「紅色」區塊為勝出者的節點現在會看到兩個鏈: 「藍色-綠色-粉色」和「藍色-紅色」。 如上圖所示,這些節點會根據結果將 「藍色-綠色-粉色」 這條鏈設置為主鏈,將 「藍色-紅色」 這條鏈設置為備用鏈。 這些節點接納了新的更長的鏈,被迫改變了原有對區塊鏈的觀點,這就叫做鏈的重新共識 。因為「紅」區塊做為父區塊已經不在最長鏈上,導致了他們的候選區塊已經成為了「孤塊」,所以現在任何原本想要在「藍色-紅色」鏈上延長區塊鏈的礦工都會停下來。全網將 「藍色-綠色-粉色」 這條鏈識別為主鏈,「粉色」區塊為這條鏈的最後一個區塊。全部礦工立刻將他們產生的候選區塊的父區塊切換為「粉色」,來延長「藍色-綠色-粉色」這條鏈。
從理論上來說,兩個區塊的分叉是有可能的,這種情況發生在因先前分叉而相互對立起來的礦工,又幾乎同時發現了兩個不同區塊的解。然而,這種情況發生的幾率是很低的。單區塊分叉每周都會發生,而雙塊分叉則非常罕見。
比特幣將區塊間隔設計為10分鍾,是在更快速的交易確認和更低的分叉概率間作出的妥協。更短的區塊產生間隔會讓交易清算更快地完成,也會導致更加頻繁地區塊鏈分叉。與之相對地,更長的間隔會減少分叉數量,卻會導致更長的清算時間。