位元幣UTXO交易模型

2021-09-24 04:10:18 字數 2519 閱讀 3006

因為位元幣網路有個天然的問題:分叉問題,總是可能出現多個位元幣礦工挖出合法區塊,然後在鏈上產生分叉。在這個時候位元幣有一條規則:多條分叉鏈出現時,最長鏈(積累工作量最多的鏈)是有效的。如果你挖出一條比現有的誠實鏈更長的攻擊鏈,那大家就會承認你的攻擊鏈是有效的,誠實鏈會被作廢。

這個時候就會產生雙花問題。要實現雙花就必須掌握全網51%的算力,因此又叫做51%攻擊。

所謂51%攻擊,就是利用位元幣使用算力作為競爭條件的特點,使用算力優勢撤銷自己已經發生的付款交易。位元幣發動51%攻擊具體思路,大致如下:

準備工作:

既然是51%攻擊,就必須首先掌握足夠的算力,無論是控制礦池,還是利用其它計算資源,總之必須使你的算力領先與現在網路總算力,領先的幅度越大,成功的可能性越高;

拿到足夠的btc作為籌碼,無論是自己挖到的,還是從任何渠道買的,都可以;

模擬攻擊:

可行性評估:

現在位元幣全網算力差不多90t,而且還會快速增長,現在看來只有現在的幾大礦池聯合,才具有發動51%攻擊的實力,普通個人或機構實施此攻擊的可能性越來越小。

過去幾年位元幣網路的算力悄無聲息的增長到了無比之大,這大大增加了位元幣成功的可能性。反之也可以解釋為什麼山寨幣不靠譜,太容易被51%攻擊啦。在依賴密碼學的數字貨幣領域,先發優勢是非常明顯的。

誰需要擔心51%攻擊

交易支付者不要擔心。51%攻擊可以撤銷交易,不可以在沒有私鑰的情況下,控制私鑰對應的位元幣位址,因此不能無(私鑰)中生有交易。支付者放心吧,在別人51%攻擊時,你也有可能來一次雙花商家。

交易接收者需要注意被別人51%攻擊,預防攻擊,多等待幾個區塊的確認。

攻擊悖論

攻擊是為了利益,既然攻擊者持有了這麼高的算力,誠實的挖礦帶來利益是不是更好?攻擊必然打擊投資者對位元幣系統信心,對攻擊者來說是一件好事嗎?

spv這個詞的意思simplified payment vertification,重點在於支付驗證,而不是交易驗證。只是確認下這筆支付是否存在。這裡面有乙個merkle tree的資料結構,位元幣的區塊頭是乙個80個位元組的定長,這個區塊頭中包含有merkle tree的根節點。這個根節點的作用可以用來驗證區塊是否包含這筆交易。

區塊頭結構:

content

size

版本號4位元組

父區塊的雜湊

32位元組

merkle根值

32位元組

時間戳4位元組

難度目標值

4位元組nonce

4位元組區塊頭一直有80個位元組,當錢包生成交易時,並向鄰近節點傳播。節點對收到的交易進行驗證,並丟棄不合法的交易。(對於節點來說,對交易進行驗證是一種義務,不然千辛萬苦挖出來的礦當全網廣播時,其他節點進行驗證時會發現這是乙個錯誤資訊。)

交易的驗證包括以下幾項:

將合格的交易加入到本地的transaction資料庫,並將合法的交易轉給臨近節點。

礦工在挖礦前必須要組建區塊,將coinbase交易打包進區塊,將交易池中的高優先順序的交易打包進區塊(優先順序 = 交易的額度 * utxo的深度 / 交易的size),這樣做的原因可能是為了防止粉塵攻擊。

挖礦的過程就是不斷變換區塊頭中的nonce值使得區塊頭部的雜湊值小於給定的目標難度值。挖礦成功後,將計算出來的隨機數nonce填入區塊頭部,向臨近節點廣播。

它不用傳統的基於account的記賬模式,傳統的交易模型都是採用這個模型儲存使用者的資料,因為基於傳統的關聯式資料庫,有事務的支援可以很輕鬆的實現。而在區塊鏈網路上,不可能採用這種中心化資料庫的方式來解決的。它換了乙個思路,就是記錄交易的流轉過程,就想以前看過那種從山上利用竹管接水,引到山下。傳統的賬戶模式,本質上是只記錄結果。這種方式不但複雜,且容易出錯。位元幣的思想,本身就是,資料不可篡改,不可篡改最重要的實現就是記錄整個流轉過程,就像時間一樣,任何事情都是有序的,git的版本原理,任何的修改都會被記錄下來。用程式設計的術語可以理解為:面向過程,重視過程而不只是結果。因為有了過程自然就有結果。

下面來看一組交易的資料:

交易4089e6ac***8081的第0個輸出,將0.61692481 btc發給1hvn…;

交易4089e6ac***8081的第1個輸出,將1.88497646 btc發給18df…;

交易總輸入total input 2.50807052 btc

交易總輸出total output 2.50190127 btc

礦工fees 0.00616925 btc

在位元幣的世界裡面其實不存在錢包的概念,有的只是未花費的交易輸出(utxo),錢包只是為我們管理顯示了我們的utxo。

簡單理解位元幣中UTXO模型

假設每個區塊中只打包一筆交易,有四個區塊,四個交易 1.區塊1為創世區塊,假設該區塊的交易雜湊值為111,input輸入的三個引數分別是空的位元組陣列,1,空字串。創世區塊中給zhongbencong轉賬50個幣。2.接下來區塊2中要發生一筆交易 zhongbencong給xiaoming轉賬10個...

區塊鏈 位元幣的賬戶模型 UTXO

在位元幣中,是不存在乙個中心化的機構對位元幣的交易進行結算清算的,自然也就沒有中心化的資料庫對使用者的賬戶進行管理。事實上,在位元幣系統中是沒有賬戶這個概念的,取而代之的是utxo unspent transaction output 即未消費的交易輸出。這是中本聰的乙個極其天才的設計。通過utxo...

位元幣交易

位元幣交易是位元幣系統中最重要的部分。位元幣交易的本質是一種特殊設計的資料結構。而區塊鏈是記錄位元幣交易的總賬簿,每個位元幣交易都被記錄在區塊鏈上。這種資料結構的生命週期包括 被建立 被簽名加密 被廣播 被驗證 被新增到新建立的區塊。位元幣交易這種資料結構包含6個字段 版本 輸入數量 輸入 輸出數量...