10.5 不可分割的交叉鏈互換

在比特幣體系裡,在不同個體或群體之間,達成一項交換貨幣或資產的交易很直接。這就是第6章裡談到的合幣的原理。合幣也可以用來交易智能資產,第9章簡要提到,第11章會再進一步討論。本章前面談到的在域名幣中出售域名也是基於同樣的原理。

但是前面所有的例子中,即便涉及不同的資產,交易也都是限制在單一的區塊鏈裡。一般來說,一個另類幣的交易和另外的其他另類幣的交易歷史沒有任何關係也無法相互參考,這是一個基本的無法跨越的限制。那麼,是否有其他辦法可以互換不同的貨幣?比如,如果愛麗絲想賣掉a個另類幣給鮑勃,換得鮑勃的b個比特幣,他們可以把這項交易做成是單一且無法分割的形式嗎?初看起來好像不太可能,因為無法強迫不同體系的區塊鏈同時發生相關的交易。如果其中一個人,假設是愛麗絲,先執行交易,有什麼辦法可以阻止鮑勃不遵守承諾呢?

有個聰明的辦法可以做到,這用到了密碼學的承諾和鎖定時間存儲,這是兩個我們已經討論過的技術。圖10.6描繪了這個協議。暫時先假設兩個區塊鏈裡的區塊是按固定步驟輪流產生的,每個時間單位產生一個區塊。T代表協議流程的開始時間。

圖10.6 不可分割的交叉鏈互換協議

1原作者寫的是另類幣,應該是筆誤。——譯者注

第一步,愛麗絲存儲a價值的另類幣〔這裡的存意味著把貨幣發給輸出腳本(ScriptPubkey),並在裡面註明只有兩種情況可以使用這筆貨幣〕。這個存款只有通過以下兩種方法可以取得此a價值另類幣:第一,如果愛麗絲和鮑勃兩個人都同意,他們可以取回。事實上,愛麗絲只有在鮑勃簽署回款交易後,她才公開這個存款。這樣就保證如果兩個時間單位過去後,存款還沒有被領取,她可以贖回她的存款。

另外一個辦法是在任何時候,提供鮑勃的簽名和x的值,通過x的值去開啟哈希函數的承諾h。注意,把<h>寫在存儲A的區塊裡來表明愛麗絲特意把h寫入輸出腳本。因為只有愛麗絲知道x,所以在最後階段,任何單獨一方無法索取存款。這個方法就是,當且僅當愛麗絲拿到比特幣,鮑勃才知道x的地址,他才能索取另類幣。

第二步大體是第一步的反向過程。鮑勃存b單位比特幣,這些比特幣只能在兩種情況下才能被取走。很重要的區別是,鮑勃並不需要創建一個新的謎題。相反,他用相同的哈希值h ( 把這個h值從存儲A區塊簡單複製到存儲B區塊)。哈希值h就是鏈接兩個區塊鏈的鑰匙。

這時,愛麗絲有主動權,她可以臨時變卦。如果在T1時,愛麗絲還沒有表示要給鮑勃x值,鮑勃可以簡單地取回他的存款退出交易。愛麗絲的另一選擇是在T1之前取走鮑勃的比特幣,但是她必須創建並廣播輸入腳本,裡面含有x值。鮑勃看到這個廣播就可以用x值去領取愛麗絲的另類幣,兌換的交易完成。

注意,如果愛麗絲稍微晚點領取鮑勃的比特幣(在T1之後但是在T2之前),鮑勃可能同時拿走兩筆存款。類似地,如果愛麗絲及時拿走鮑勃的比特幣,但是鮑勃等太久還沒取走愛麗絲的,那麼愛麗絲也可以把兩個都拿走。但這不是問題,只要保證雙方無法在協議上欺騙對方就可以,自己的疏忽或者故意怠慢不是系統考慮的範圍。

最後,區塊在比特幣和另類幣中,並不是按照固定時間產生的。這種情況會造成一些混亂,特別是兩個區塊鏈沒有協調一致時。假設兩個區塊鏈各自平均10分鐘產生一個區塊。以1小時為時間單位,也就是說,需要T1至少為現在另類幣區塊+12,T2至少為現在比特幣區塊+6,也許能帶來更大安全邊際。

遺憾的是,存在很小的可能性,12個另類幣區塊已經找到,但後面6個比特幣還沒有找到。這時,愛麗絲可以索取兩個存款。可以通過增加時間單位來降低可能性,但是會犧牲速度。

這是一個清晰明瞭的協議,但是截至2015年,還沒有人用到。相反,所有加密貨幣都是在傳統的中心化的交易系統裡交易。造成這種現象有很多原因:第一是該協議的複雜、不便和緩慢;第二,這個協議可以防止偷盜貨幣,但是不能防範服務性攻擊。有人或許以誘人的兌換價格作為廣告,但是在協議原型的第一步或第二步就反悔退出,這浪費了每個人的時間。為了減緩這種情況,也為了集合併匹配大家的需求,可能需要一個中心化的交易平台(機制),即使如此,也不能完全相信它不會偷你的貨幣。這種情況進一步降低了該協議原型的使用範圍。

《區塊鏈:技術驅動金融》