您好,登錄后才能下訂單哦!
這篇文章主要講解了“區(qū)塊鏈中比特幣技術(shù)的雙重支付概念是什么”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“區(qū)塊鏈中比特幣技術(shù)的雙重支付概念是什么”吧!
雙重支付概念
比特幣作為電子貨幣,且不利用第三方機構(gòu)。首先需要解決的問題就是:如何防止雙重支付(double-spending)? 雙重支付簡單來說就是一份貨幣被使用了多次。
這個約束在比特幣結(jié)構(gòu)的基礎(chǔ)上就可以表示成:一個交易的輸出最多接一個交易的輸入,即最多被消費一次。
雙重支付是比特幣系統(tǒng)要解決問題。對應有兩道防火墻,第一道是本地檢查,第二道是分布式協(xié)議。
理想情況
我們之前介紹過一種理想的工作模式:嚴格按照每10分鐘有一個節(jié)點挖到礦,且一個區(qū)塊在10分鐘之內(nèi)可以到達所有節(jié)點。
在這種理想的工作模式下,系統(tǒng)會出現(xiàn)雙重支付嗎?不會。簡單看一下:現(xiàn)在有兩筆賬單 A 和 B,不分先后,都要消費同一筆比特幣。
(1)第一種情況:假如 A 在 B 之前被寫入了區(qū)塊鏈。在某個節(jié)點挖到礦準備寫入 B 時,根據(jù)我們之前的假設(shè),這個節(jié)點已經(jīng)同步了最新的區(qū)塊鏈。因此,A 已經(jīng)在這個節(jié)點的本地鏈上了,通過本地檢查會發(fā)現(xiàn) B 不合法,直接把 B 扔掉。
(2)第二種情況:A 和 B 都還未寫入?yún)^(qū)塊鏈。并且都被一個節(jié)點接收,這時這個節(jié)點直接在本地檢查候選區(qū)塊中的所有賬單中是否有沖突,檢查到 A 和 B了,扔掉后來的一個。
可以看到,在理想情況下,本地檢查就可以避免雙重支付。但是現(xiàn)實情況呢?
現(xiàn)實情況
現(xiàn)實情況是不一定嚴格10分鐘有一個節(jié)點挖到礦,可能每隔任意時間就有節(jié)點挖到礦了,也可能兩個節(jié)點同時挖到礦了。而且可能出現(xiàn)網(wǎng)絡(luò)分區(qū)導致一個區(qū)塊不確定多久會廣播到所有節(jié)點。
由于節(jié)點挖到礦之后,并不需要請求其他節(jié)點同意就直接寫入本地區(qū)塊鏈了,因此很容易出現(xiàn)各個節(jié)點維護不同的鏈的情況。但是,畢竟是個分布式系統(tǒng),不同的節(jié)點總會進行通信的,當他們通信時,就會檢測出沖突,類似 git 的分支合并。git 的分支合并沖突是交給用戶手動解決的,但是比特幣的沖突可以靠系統(tǒng)解決。中本聰給出了一個簡單的解決方法:
以最長鏈作為有效鏈,新的區(qū)塊需要加到最長鏈后,短鏈在一定時間后會被拋棄。
這個類似排隊上公交車,這時候有兩個隊,管理員說以最長隊為準,這時候后來的人為了保證自己排到前面,都會去排最長的隊。這時,短的鏈就會被丟棄,我們看個例子:
上邊是節(jié)點 A 的鏈,下邊是節(jié)點 B 的鏈,當節(jié)點 A 接收到 B 的鏈,A 會拋棄綠色塊,把 B 的鏈同步過來,在黃色塊繼續(xù)寫。
可能的雙重支付
在這種機制下,有沒有漏洞讓我把一塊錢花多遍呢?有的。我可以先把交易寫入?yún)^(qū)塊鏈,然后想辦法把這筆交易廢棄掉,也就是讓這筆交易的鏈分支成為短的分支(再寫一個長分支),這樣這筆分支就不會被認可了。我就可以繼續(xù)創(chuàng)建一筆新的交易來花這筆錢了。
好了,準備就緒,我要開始干壞事了,看示例圖:
我控制著節(jié)點 A。交易A 是第一筆交易,并且已經(jīng)被廣播到其他節(jié)點了。為了讓交易 A 失效,我需要重新開一個黑鏈包含交易 B。其實就是和其他節(jié)點賽跑,我需要先追上綠鏈,并且超過綠鏈一個塊,這樣我就可以同化其他的節(jié)點了。
而這就需要我連著挖到兩個礦。這是個什么概念?從概率的期望來說,這就相當于我有比特幣系統(tǒng)中一半以上的計算資源。我都這么牛逼了,還需要黑系統(tǒng)嗎?我只需要努力挖礦就能得到很高的回報。
然而更多情況是下面這種:
我和別人的計算能力差不多,當我挖到一個礦寫入一個黑塊時,另外兩個節(jié)點已經(jīng)挖到兩個礦了,他們互相同步數(shù)據(jù)根本不會鳥我,而這個差距還會越來越大,最終我只能選擇放棄抵抗。
這里還有一個細節(jié):塊是一個一個廣播出去的,不是整個鏈廣播出去的,因此,當某個節(jié)點接收到一個和自己分支沖突的塊時,不會馬上丟掉,會先緩存在本地,當緩存的所有塊構(gòu)成的某個分支超過當前工作的分支,就會切換到最長分支上去。
一般來說,當鏈上的一個塊后邊接了 6 個塊了,就可以確認這個塊的所有交易不會被丟棄了,所以比特幣賬單的確認時間是 1 個小時。
感謝各位的閱讀,以上就是“區(qū)塊鏈中比特幣技術(shù)的雙重支付概念是什么”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對區(qū)塊鏈中比特幣技術(shù)的雙重支付概念是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。