位元幣核心技術之雙花問題

2021-10-12 00:01:01 字數 2051 閱讀 1734

位元幣核心技術之雙花問題

1.顧名思義,雙花就是一筆錢被花了兩次甚至多次

實體貨幣不存在雙花問題,比如一張百元人民幣,不可能同時出現在兩個地方。

中心化系統中,比如銀行系統,若a向b支付100元,則銀行系統會先檢查a的賬戶餘額是否足夠支付100元,否,則報錯提示,是,則從a的賬戶中減去100元,同時向b的賬戶中增加100元。

去中心化的系統中,比如位元幣系統,

一筆交易產生後會被廣播到全網,接收到該筆交易的礦工先將其放置在本地的記憶體池中,並對其做一些基本的驗證,比如這筆交易是否為雙花交易,如果驗證通過,則將該交易放入未確認交易池中,等待被打包,如果驗證失敗,則該交易會被標記為無效交易,不會被打包。也就是說,礦工在比拼算力的同時,還要及時驗證每筆交易的有效性,更新自己的未確認交易池。

礦工在取得記賬權後,從未確認交易池中抽取約近千筆交易進行打包,然後將打包後的區塊廣播給其他節點進行確認,當大多數(如何確認大多數不重要,礦工挖礦成功後會盡量擴散,一般6個塊後還是最長鏈,就認為確認成功,錢到手了)節點都認可該區塊時,這個區塊就會被放置到區塊鏈上,所有節點再同步更新新的資料。

那礦工是如何驗證一筆交易沒有被花過呢,這裡就要介紹乙個概念utxo,(utxo是unspent transaction outputs未使用的交易輸出的縮寫),utxo中都是已確認,但未被使用完的交易(使用完後從utxo中撤銷)。

位元幣系統中的每一筆交易,都會有乙個**位址,記錄這筆錢從哪來,礦工根據該交易的**位址,在utxo中進行檢索,假如能找到相應的**交易,且該交易對應輸出項中的金額足夠,那麼礦工則認為不存在雙花問題。若找不到相應的**交易或者對應輸出項中的金額不足,則認為存在雙花問題。

位元幣系統中區塊有明確的時間順序,交易資訊廣播後,先被打包進區塊的交易,就被認為是合法的,之後的交易就會被拒絕。

比如a一共有100元,向b支付100元購買衣服的同時向c支付100元購買食物,兩筆交易分別對應交易ab和交易ac。

礦工d取得記賬權後,將交易ab打包入塊,得到其他節點確認後將包含交易ab的區塊上鏈(礦工挖礦成功後會盡量擴散,一般6個塊後還是最長鏈,就認為確認成功);之後礦工e將交易ac打包入塊後,廣播給其他節點確認,其他節點查詢自己的utxo後,發現交易ac存在雙花問題,就會拒絕e廣播的區塊,這樣交易ac就會成為無效交易,反之亦然。

位元幣系統中還有乙個最長鏈原則,即只有在最長鏈上挖礦的礦工才能得到獎勵,大家都認可最長的鏈。而且一筆交易上鏈後,只有再過5個塊(共6個塊),才會被認為真實無誤,不可篡改。

比如a一共有100元,向b支付100元購買衣服的同時向c支付100元購買食物,兩筆交易分別對應交易ab和交易ac。

礦工d,e同時取得記賬權,分別將交易ab和交易ac打包入塊,一部分節點同步了d的資料,另一部分節點同步了e的資料,此時區塊鏈出現分叉,兩條鏈分別記為ld,le。那麼接下來,如果認同ld的礦工取得了下乙個區塊的記賬權,那麼根據最長鏈原則,ld將會保留,le將會被廢棄,反之亦然。如果還是同時取得記賬權,就再接著比拼,6個區塊後一筆交易才會被認為真實無誤,而連續6個區塊都同時取得記賬權的概率很小很小,幾乎不可能,所以交易ab和交易ac只會保留乙個,不會存在雙花問題。

再比如a一共有100元,向b支付100元購買衣服的同時向c支付100元購買食物,兩筆交易分別對應交易ab和交易ac。

礦工d與a勾結並取得了記賬權,同時將交易ab和ac打包入塊,因為一筆交易上鏈後過6個區塊才算真實無誤,得到認可,記礦工d擴散的含有雙花問題的區塊鏈為ld,那麼在之後的5個區塊中,ld及其同夥礦工(也許有也許沒有)必須一直取得記賬權,雙花交易才算成立,而這需要遠超其他人的算力,目前看可能性很小,況且如果真的有人具備如此強大的算力,並被大家察覺,除非其他人也有能力公升級算力,否則大家紛紛退圈,這個遊戲就玩不下去了。

雙花問題還有另一種形式,即通過篡改記錄,將已經確認的資料,恢復到確認之前的狀態。

比如a一共有100元,用這100元從b處購買衣服,6個區塊後交易得到確認,而a在得到衣服後,將付款的資料從自己的區塊鏈中刪除了,為了讓大家都認可被篡改的這條鏈,a必須將這條鏈做成最長鏈,也就是說他在修改完隨後的6個區塊的相關nounce值後,還要比其他礦工更快的打包區塊,才能保證被自己篡改的鏈是最長鏈,這需要很強的算力,目前來看幾乎不可能。但假如a真的有如此強的算力,還是回到剛才的問題,大家察覺後,這個遊戲也就玩不下去了。

位元幣雙花攻擊的原理分析

在學習區塊鏈的過程中,大家一定對會聽到 雙花 這個詞,意思就是雙重支付,或者更直白點就是一筆資金被花費了兩次。這篇文章我們來簡單的分析一下為什麼會有雙花,位元幣是如何避免雙花的。在傳統的交易中,因為有銀行這樣的中心化機構,所以是不會存在雙花問題的 每一筆支付都將從你的銀行賬戶中扣除相應的資金,所有的...

位元幣系統是如何解決「雙花」問題的

近年來 區塊鏈 引起了廣泛的關注 與爭議,它既 是位元幣和其他加密貨幣幕後的核心技術,又是尚未發展成熟的網際網路科技後起之秀。在 區塊鏈分布式資料庫中,去中心化的信任機制是其核心,任何兩方都可以 在區塊鏈應用專案中 進行直接交易,而無需經過 第三方公信 機構。在最初的位元幣 中,中本聰闡述了如何建立...

Docker 核心技術之映象

映象是乙個docker的可執行檔案,其中包括執行應用程式所需的所有 內容 依賴庫 環境變數和配置檔案等。通過映象可以建立乙個或多個容器。作用 命令格式 命令引數 options 只搜尋官方的 centos docker search f is official true centos作用 命令格式 ...