BTC 挖礦(區塊鏈技術與應用)

2022-09-10 12:48:16 字數 2860 閱讀 4016

位元幣系統中有兩種節點,一種是全節點,一種是輕節點。

全節點特徵

在本地硬碟上維護完整的區塊鏈資訊

在記憶體中維護utxo集合,以便快速檢驗交易的正確性

監聽位元幣網路上的交易資訊,驗證每個交易的合法性(有沒有合法簽名,是不是double spending)

決定哪些交易會打包到區塊裡(預設狀況下只要合法交易並且交易費符合要求都會打包)

監聽別的礦工挖出的區塊,驗證其合法性:

挖礦:輕節點特徵

不用儲存完整區塊鏈,只要儲存每個區塊塊頭(這樣和全節點的大小相差大約1000倍)

不用儲存全部交易,只需要儲存和自己相關的交易

沒法驗證大多數交易的合法性,只能檢驗與自己相關的交易的合法性

無法檢測位元幣網路上發布的區塊的正確性

可以驗證挖礦的難度(因為挖礦時候計算雜湊值只用到了塊頭資訊,而塊頭資訊輕節點是儲存了的)

只能檢測哪個是最長鏈,不知道哪個是最長合法鏈(因為無法檢測這條鏈上所包含的交易都是合法的)

輕節點假設礦工(全節點)大多是有理智的,即假設礦工們不會沿著不合法的鏈一直挖下去。

位元幣網路中大部分節點都是輕節點,如果只是想轉賬,而不是去挖礦的話,只用輕節點就可以了。

當在挖礦過程中發現新發布了乙個區塊,那麼應該停止挖礦,重新從utxo中取出一系列合法交易組成候選區塊,在剛發布的這個區塊後面開始挖礦。因為一方面這個區塊中的交易可能和剛剛在挖的那個區塊有重複,另乙個本質的原因就是候選區塊的塊頭有指向前乙個區塊的雜湊指標。因為最新的區塊已經變了,這個雜湊指標也要跟著改變

深入理解utxo:

假設我有 8 個位元幣,這其實意味著,之前有乙個交易把這些位元幣轉入我的位址,這個交易的輸出(即 8 個位元幣)未被使用,我擁有了這 8 個位元幣。

現在,我要發起乙個轉賬交易,這個交易中的輸入是讓我擁有這些位元幣的上乙個交易。

這樣,我就發起了乙個轉賬支付交易。等礦工將這一交易打包進新的區塊,轉賬交易完成(?所以要進入區塊,才算交易成功嗎?),這 8 個位元幣就屬於你了。你擁有的是你我這個交易的未使用的交易輸出。

由於挖礦過程的無記憶性(memoryless,progress free),無論是在剛剛的區塊上繼續挖,還是新組裝乙個區塊繼續挖,成功的概率是一樣的。

位元幣系統安全性的保證:因為別人沒法偽造你的私鑰,也就沒法把你賬戶上的btc轉走。但這個密碼學上的保證是要以「系統中大部分節點是誠實的」為前提,即大家不會接受那些不合法的交易進入區塊鏈。

位元幣會出現礦工偷答案嗎?:也就是偷算好的nouce值,使得h(blockheader)≤target。如果偷取nouce值,在鑄幣交易中,會將轉賬的位址改為自己的位址,這樣會使鑄幣交易的雜湊發生變化,從而導致merkle tree的根雜湊值發生變化,使得塊頭的雜湊值也變了,所以此時nouce是失效的。

第一代挖礦裝置:cpu

如果專門搞一台計算機來挖礦是很不划算的。因為計算機大部分記憶體是閒置的(挖礦只要用到很少一部分記憶體),cpu大部分部件是閒置的(計算雜湊值的操作只用到通用cpu中的很少一部分指令),硬碟和其它很多資源也都是閒置的。隨著挖礦難度提高,用通用計算機上的cpu挖礦很快就無利可圖了。

第二代挖礦裝置:gpu

gpu主要用來做通用的大規模平行計算,用來挖礦還是會有不少浪費,而且gpu的噪音很大,其中很多部件還是浪費了(如用於浮點數計算的部件)。近些年gpu**漲得很快,這不僅是深度學習火熱的原因,實際上很多gpu是買來挖礦的。不過現在挖礦的難度已經提高到用gpu也有些划不來了,不會再有那麼多人買gpu來挖位元幣。

第三代挖礦裝置:asic晶元

挖礦的競爭越來越激烈,定製的asic晶元可能用了幾個月就過時了,到時候又要買新的asic晶元參與競爭。asic礦機上市後的大部分利潤也就在前幾個月,這個裝置的迭代也是很塊的。

asic resistance:為了讓通用計算機也能參與挖礦過程,抗asic晶元化,有些加密貨幣採用alternative mining puzzle,以去對抗那些只為了解決特定mining puzzle而設計出來的asic礦機。

礦池將很多礦工組織起來,一般的架構就是乙個礦主(pool manager)全結點去驅動很多礦機,下屬礦工只負責計算雜湊值,全結點的其它職能只由礦主來承擔。有了收益以後再大家一起分配。

分叉攻擊

因為算力佔了半數以上,並且礦工挖礦任務被分配開並行進行,分叉出來的鏈的增長速度很快,最終勢必成為最長合法鏈。

boycott(封鎖禁用)

這裡不必等候的原因是,之前普通分叉攻擊等候幾個確認區塊只是為了讓收款人認為已經沒問題了,已經成功收款了,這裡沒有這種顧慮。

在之前學習共識協議時學過,大部分節點是誠實節點時,記賬權也可能落在有惡意的節點手裡,它完全可以不發布某些交易,但在那種情形下總有誠實的節點願意發布這些交易,所以是沒關係的。

但當在這種情況下,即有惡意的節點算力很大時,卻可以始終讓某些交易不上鏈。即完全可以公開抵制某些交易,這樣一來別的礦工也不敢隨便打包這些交易了,因為很可能自己辛苦挖的礦最後淪為丟棄的區塊

無法進行盜幣

不論算力再強,因為沒法偽造別人賬戶的簽名(除非獲得其私鑰),所以沒法偽造交易將別人賬戶上的btc轉走。即便是仗著自己算力強,強行將不合法的區塊發布到區塊鏈上並沿著這條鏈繼續延伸,誠實的節點依然不會沿著這條不合法的長鏈延伸,所以還是沒用的。

區塊鏈技術與應用 BTC挖礦難度

挖礦就是不斷嘗試nonce,使整個block header中的雜湊值小於等於給定的目標閾值 target。h block header target。target越小,挖礦難度越大。調整挖礦難度,就是調整目標空間在整個輸出空間中所佔的比例。位元幣中的hash演算法是sha 256,整個輸出空間是2 ...

區塊鏈技術與應用 BTC密碼學原理

加密貨幣並不加密,區塊鏈上所有的交易內容都是公開的,包括賬戶位址,轉賬金額等。cryptographic hash function collision 指的是雜湊碰撞 如果x y,hash x hash y 這就是雜湊碰撞,兩個不同的輸入算出的雜湊值是相等的,不可避免。因為無限的輸入對映到有限的輸...

BTC 位元幣的共識協議(區塊鏈技術與應用)

怎麼驗證交易的合法性,防止雙花攻擊 由所有使用者來共同維護,這個資料結構是區塊鏈 位元幣系統中每個交易都分為輸入部分和輸出部分,輸入部分要給出這筆交易的位元幣的 以及付款方的公鑰,輸出部分要給出收款人的公鑰的雜湊值。位元幣系統中的收款位址就是收款人的公鑰取雜湊再經過一些轉換得到的。位元幣中的全結點要...