第7章 UTXO(連載)

本系列連載自《重新創造比特幣》,它是一本比特幣入門書籍,通過一個虛擬故事,讓讀者體驗從零開始創造比特幣的過程,從而理解比特幣為什麼如此設計。

重新創造比特幣 | 第7章 UTXO(連載)

0.前言

Bitcoin的第二個版本已經上線,運行正常。

重要的改變包括:

  1. 加入數字簽名。
  2. 公鑰替代用戶名。
  3. 將簽名加入交易模型。
  4. 刪除了賬號模型。

本篇在講如何重新定義交易。

交易是經濟學理論的核心,交易是一切。

交易即承載著每個個體的起心動念,交易也承載著整個世界的斑駁陸離。

對交易這個概念的認知高度,決定了Bitcoin系統的高度。

如何認知交易,就表現在如何定義交易。

1.Bug出現!

新版本上線後, 系統看起來一切正常。

不過,只要是人寫的程序就會有Bug。

這一天Alice找到中本聰,說自己的餘額忽然歸零了,懷疑自己的私鑰洩漏了。

中本聰趕緊登陸到服務器上,查看賬本中的交易記錄,發現了Alice的交易記錄有異常。

怎麼會有重複的交易記錄呢?(見下圖)

重新創造比特幣 | 第7章 UTXO(連載)

賬本

中本聰問:“Alice,你最近做了幾次轉賬?”

Alice說:“就一次,昨天給Carol轉賬20個Bitcoin”

中本聰說:“可是,在賬本里我查到了3筆給Carol的轉賬(公鑰C代表Carol的公鑰)”

中本聰找來Gilfoyle,兩人一起分析,很快找到了問題所在。

原來是Carol搞的鬼,Carol截獲了Alice的交易請求,並重復的將其發送給服務端,服務端錯誤的認為是Alice在多次請求轉賬,結果就是將Alice的餘額全
部轉給了Carol(見下圖)

重新創造比特幣 | 第7章 UTXO(連載)

Carol在搞鬼

2.分析Bug

問題的根源是什麼呢?

原來問題出在簽名上,在現在的設計中,同一用戶在不同交易中,簽名沒有變化。

服務端只會驗證簽名真偽,只要簽名是真的,交易就成立。

黑客會重複發送偽造的交易請求,直到用戶的餘額小於交易金額。

那麼簽名為什麼沒有變化呢?

這是因為簽名是將公鑰加密,公鑰不變,所以簽名就不變。

簽名不變,就意味著,簽名的權利空間為用戶的所有餘額。

分析到了這裡,中本聰對Gilfoyle說:“我們得讓每筆交易中的簽名都不同,最好是每筆交易的簽名是系統唯一的”

如何做到讓簽名在每筆交易都是變化,且唯一的呢?

Gilfoyle說:“加密整個交易數據,因為交易數據每筆都不同”。

這個方案,乍看上去不錯,但是仔細一想還是有漏洞。

中本聰說:”如果用戶的正常需求就是,同一時刻發出兩筆相同的交易請求,難道服務端還要拒絕嗎?如果服務端不拒絕,萬一是黑客在重複請求呢,就像前面Alice遇到的那個bug。”

Gilfoyle說:“那我們改造一下交易模型,加一個隨機數的字段,約定好瀏覽器在創造交易數據的時候,需要填寫一個隨機數。這樣每筆交易就不會重複了”。

中本聰說:“這個思路還是太傳統了,不夠優雅。況且,隨機數也可能碰巧相同啊,雖然概率很小”。

中本聰閉上了眼睛,傾聽著內心的聲音,現在需要啟動直覺,一個顛覆傳統思路的方案,隱隱約約閃爍著身影。

3.顛覆傳統的優雅方案

最初的問題,是由於簽名鎖定到餘額。

變更之後,簽名鎖定到交易。

但是新的問題來了,交易數據可能重複。

現在問題卡在了這裡:如何讓交易成為唯一?

交易的本質究竟是什麼?

交易的本質是描述Bitcoin的所有權的變更,即,n個Bitcoin的所有權,由付款者變成了收款者。

例如Alice給Bob轉賬3個Bitcoin,本質就是:“3個Bitcoin的所有權,由Alice變成了Bob。”,這句話如何變成唯一呢?

Alice不會變,Bob不會變。3個Bitcoin也不會變。
等等!3個Bitcoin是可以變的!如果給每個Bitcoin都加上編號, 那麼每個
Bitcoin都不同,都是唯一的。

假設Alice的餘額中有6枚Bitcoin,編號為:Bitcoin001~Bitcoin006。

那麼這筆交易的描述就變成了:“編號分別是Bitcoin001、Bitcoin002、Bitcoin003的Bitcoin的所有權,由Alice變成了Bob”

下一筆,Alice如果還想再給Bob轉3個Bitcoin,描述就變成了:“編號分別是Bitcoin004、Bitcoin005、Bitcoin006的所有權,由Alice變成了Bob”

看到了嗎,只要給Bitcoin加上編號,之前無法區分的交易,就可以區分開了,交易的描述,在語義上實現了唯一。

4.每筆交易都要先融化再鑄造

交易是經濟學理論的核心,交易是一切。

交易即承載著每個個體的起心動念,交易也承載著整個世界的斑駁陸離。

對交易這個概念的認知高度,決定了Bitcoin系統的高度。

如何認知交易,就表現在如何定義交易。

中本聰感覺找對了方向,不過現在的方案太粗糙,還需要進一步打磨。

給Bitcoin以編號,每一枚Bitcoin就可以看成一枚硬幣。Bitcoin的最小單位就是整數1,不可再分割。

每筆交易都要明確的寫出,自己引用的具體Bitcoin的編號。

這樣雖然能實現交易的語義唯一,但是同時會帶來兩個問題:

第一個問題:如果不支持Bitcoin的小數分割,就太不靈活了。就像美元沒有了美分。

第二個問題:如果交易金額很大,例如10萬枚Bitcoin,就需要引用太多的Bitcoin編碼,交易數據會過於龐大。這就像美元中只有1美元的面額。

突然,中本聰來了靈感:

如果我們每一次交易都等於是一次鑄幣呢,就是將多枚硬幣融化成一個大塊的硬幣。

這樣,每一筆交易產生的大硬幣,就可以被下一筆交易所引用,且僅可以被引用一次。(如果被不同的交易引用,就是傳說中的"雙花",這個概念留給後面討論)

當然,當前交易也要引用之前的一筆(或者多筆)交易的鑄幣。(見下圖)

重新創造比特幣 | 第7章 UTXO(連載)

UXTO

被交易引用後的一個(或者多個)大硬幣就等同於被融化了(IN),然後再鑄造新的大硬幣(OUT)。

我們就稱賬本中,未被引用的大硬幣:未花費的交易輸出。

對應的英文:Unspent Transaction Output,我們用TX代表transaction,所以最終簡寫為:UTXO。

一個人的餘額,本質上就是他能夠引用的UTXO的總和。

Gilfolye說:“精彩!那麼如何處理找零呢?Alice引用了一個金額為5的大硬幣,但是隻想給Bob,3.5Bitcoin”

中本聰說:“鑄造成2個OUT(大硬幣)就可以啦。在這裡就是生成兩個OUT(大硬幣),分別是3.5和1.5,其中3.5給Bob,1.5給自己,這就是我們日常生活中的破零錢嘛。”(見下圖)

重新創造比特幣 | 第7章 UTXO(連載)

UTXO中的找零給自己

每一筆交易都引用過去交易生成的UTXO,同時創造出新的UTXO,等著未來交易來引用。

所有交易首尾相連,成為了一條連綿不絕的河流,從唯一的源頭開始,中途經過分分合合的支流,永遠朝著東方的大海前進,這就是所謂的,萬折必東。

從這個角度來看,Bitcoin系統就是,一個條由交易組成的時間長河。

描述這類數據結構的專業名詞稱為:有向無環圖。英文全稱:Directed Acyclic Graph(簡寫為:DAG)。(見下圖)

重新創造比特幣 | 第7章 UTXO(連載)

有向無環圖

中本聰在腦子裡,模擬運行著新的設計:“現在的設計應該沒有大的缺陷了,可以進入交易模型的設計啦”。

GIlfoyle:“UTXO的確優雅,交易模型的改動會很大”

所謂交易模型的設計,就是說,通過重構交易模型來承載UTXO機制。

5.後記

UXTO的設計部分就寫完了,下一篇開始寫,交易數據模型的重構,還會引入鎖定和解鎖腳本的機制。

“語義唯一”與“語法唯一”

語義的意思是,一句話想表達的意義是什麼。

語法的意思是,以什麼形式來組織語言。

語義是本質,語法是外表。

語義唯一,即,一句話表達的意義是確定性不變的。就拿這句話:“編號分別是Bitcoin001、Bitcoin002、Bitcoin003的Bitcoin的所有權,由Alice變成了Bob”,不論誰來說,重複說多少次,什麼時候說,誰來解釋,都不會有歧義,即便服務端多次執行這句話,多次將這句話寫入賬本,Alice的餘額也只會減少3枚Bitcoin,不會丟幣。

而之前描述方式,是語義模糊的:“3個Bitcoin的所有權,由Alice變成了Bob”。如果服務端收到重複請求,無法確定其精確意義:究竟是Alice真的想付款多筆,還是客戶端出了毛病(一筆交易發出了多次請求),還是黑客截獲消息後的攻擊。

傳統的解決思路是,用語法上的唯一,來代替語義唯一。

什麼是語法唯一,就是變著花的說話同一個意思,這樣看上去就是不同的句子。

加隨機數就是實現方法之一,像這樣:
“隨機數001, 3個Bitcoin的所有權,由Alice變成了Bob”
“隨機數002, 3個Bitcoin的所有權,由Alice變成了Bob”
“隨機數003, 3個Bitcoin的所有權,由Alice變成了Bob”

這樣,服務端就就可以認為,重複的請求是異常數據,可以拋棄不理。

所以當前系統的漏洞,在本質上是交易的定義上存在漏洞,即,不是語義唯一。

重新創造比特幣 | 第7章 UTXO(連載)

感謝 Craig Wright 博士、比特幣協會中國經理 Lise Li、Mempool & 打點錢包聯合創始人林哲明, BlueSV & Webot 創始人周全等眾多大咖的極力推薦。


轉自: BSVOfficial 作者 | 何巖


分享到:


相關文章: