一文了解閃電網路中的 Submarine Swap

買賣虛擬貨幣

有關 submarine swap(“潛水艇互換”)的討論已經持續好一段時間了,而且已經出現了有意思的產品和服務。那麼,Submarine Swap 到底是什麼,又是怎麼工作的呢?本篇文章就要講解這個問題。

要理解 submarine swap,我們先要知道什麼是 HTLC:雜湊時間鎖合約。名字很唬人,但實際上很容易理解。而且,理解 HTLC 不僅僅是理解 submarine swap 的關鍵,也有助於理解閃電網路本身。

雜湊時間鎖

假如你是高貴的 Bictoiner,擁有 1 btc,你把一些錢轉給了你的朋友 Martin 持有的地址。(得到你的支付之後)在花費這些比特幣時,Martin 需要證明自己擁有這個地址所對應的私鑰。這就是比特幣最基本的工作形式:Martin 證明自己擁有私鑰,然後就能花費那些錢。

我之所以說這是“最基本的工作形式”,是因為你可以給 Martin 的使用行為新增更多的約束條件。實際上,你可以加入條件,要求 Martin 必須在一段時間內提供一個特定的秘密資料,否則就不能花這筆錢。一旦超時,這筆比特幣就只能用另一組金鑰(比如你自己的金鑰)來使用了。

這個秘密資料是怎麼來的?始作俑者是誰?這不是太重要。只有一點區別,如果這個資料是 Martin 自己創造的,那在使用這筆資金時就不會遇到任何障礙。但如果這個資料是別人創造的,那 Martin 就只有找到這個人、要到這個資料之後才能使用這筆資金。

無論如何,只要 Martin 知道了這個秘密資料,他就會盡快花掉這筆錢,哪怕是發給自己持有的另一個地址也好,以免超時。我們把這個動作叫做 “申領資金”。

你看,這就是所謂的雜湊時間鎖合約了:它是一個要求資金的接收方在一段時間內證明自己知道一個特定的數值,否則就無法花費這筆錢的合約。

事實證明,可以增加這種條件,讓許多非常有趣且有用的功能得以實現,其中之一就是 “連鎖支付”。這種功能對鏈上的交易來說可能用處不大,因為你畢竟可以把錢直接支付給最終的接收方。但對閃電網路來說就非常有用,因為閃電網路是由一對一的支付通道組成的,要讓每個人都能給另一個人直接支付是非常低效的。

因為在路由網路(比如閃電網路)的語境下會更容易理解 HTLC 的作用,我們會先看一些鏈下支付的例子。不過,請記住,HTLC 在鏈上和鏈下交易中都能實現。甚至在別的區塊鏈,比如萊特幣中,也能實現。

雜湊時間鎖在閃電網路中的作用

假設你要給 Sandra 支付 1 btc,但你們之間沒有支付通道;只有 Bob 跟你們倆都分別開設了一個支付通道,可以轉發你的支付給她。這種連鎖支付會遭遇什麼問題呢?

如果沒有雜湊時間鎖,事情可能在兩個環節失控,就取決於誰先支付了”

如果你先給 Thomas 支付,Thomas 可以拿著這份資金跑路。

如果 Thomas 先給 Sandra 支付,相信你會信守諾言把錢給回他,那麼你可以翻臉不認人,拒絕償還(而 Thomas 給出去的錢是收不回來了)

但如果有了雜湊時間鎖,Sandra 可以生成一個只有自己知道秘密資料,然後告訴你可以放心地轉賬給 Thomas,只是這筆資金有一個附加條款,Thomas 必須能在給定時間公開這個秘密數值,否則這筆錢會重新回到你手上。Sandra 可以在閃電網路收款請求中使用二維碼給你這個指示。她完全無需把秘密數值透露給你,因為,即使你對這個數值一無所知,也可以知道 Thomas 公開了 Sandra 的數值(錢會被取走)。

現在 Thomas 可以給 Sandra 傳送 1 btc,但是附上了一摸一樣的條款:Sandra 必須在給定時間內揭示這個秘密資料。Sandra 自己知道這個資料,因此當然可以取走這個錢。然而,在她申領資金的那一刻,這個秘密也隨之暴露,Thomas 也就知道了這個數值,因此可以申領你給他的資金了。

結果就是,你成功透過 Thomas 支付給了 Sandra,無需信任他們,也沒有人會面臨風險。現在你和 Thomas 都知道了 Sandra 所生成的秘密值,你也可以用它作為一種支付證明,因為 Sandra 揭示它就獲得了支付給她的資金。注意,這裡的的超時機制是很重要的,它充當了應對 Sandra 拒絕或不能揭示這個秘密值時候的 “退款” 措施。

Submarine swap 中的雜湊時間鎖

雜湊時間既可以用在鏈上交易中,也可以用在鏈下交易中。實際上,它可以用在鏈上的支付方和鏈下接收方之間的連鎖支付中,反過來也可以。這就是所謂的 “潛水艇互換”。

假設你想在閃電網路中為某事支付,到又不想自己手動管理一個通道。那麼 submarine swap 讓你可以使用鏈上的比特幣給閃電網路的收款請求支付,只需透過一個 “互換服務提供商”。這是怎麼做到的呢?

閃電網路的收款方可以生成一個二維碼,來提示你設定給予互換服務提供商的資金的申領條件。這樣你就可以放心地在鏈上把比特幣發給互換服務提供商,附上雜湊時間鎖。

互換服務提供商沒法立即使用你發給他的錢,因為他還不知道哪個秘密值。相反,他要透過閃電網路給收款方轉賬,附帶一摸一樣的申領條件,要求收款方公開這個秘密。

收款方知道這個秘密數值,但要領走這筆資金就只能暴露這個秘密,這時候,服務商也就知道了這個秘密,可以申領你支付給他的資金了。服務商和收款方皆大歡喜,區別只在於服務商要在鏈上申領資金,而收款方在鏈下申領。

潛水艇互換有什麼用?

潛水艇互換可能是人們嘗試閃電網路支付最簡單的手段。雖然你還是要支付鏈上手續費,整個支付流程也很像鏈上支付,但收款方可以是即時到賬的(跟具體的實現有關)。如果你想開一個閃電網路通道,也需要發起一筆鏈上交易。考慮到我們現在還在閃電網路早期,有一個易於上手的玩法是很重要的。這也是為什麼我們在Muun Wallet中實現了潛水艇互換。

潛水艇互換對於想把部分資金從鏈上轉移到鏈下(或者反之時),也很有用。舉個例子,靠閃電網路來收賬一週之後,店家可能需要一些鏈上的比特幣來償還賬款。Loop Out提供了一種支援反向潛水艇交換的方法,執行時可以重新調整通道內的餘額平衡並獲得入賬容量。

最後,給定潛水艇互換也可以在其它鏈上實行,你可以使用其它幣,比如萊特幣(手續費更低且上聯速度更快)來做閃電支付,或者給自己的通道提供更多流動性。

潛水艇支付的觀念來自 Lightning Labs 的開發者 Alex Bosworth 和 Olaoluwa Osuntokun,如今獲得了越來越多的熱度。雖然不無缺點,它可以幫早期的網路解決兩大問題:流動性和接受度。

有關閃電網路,這裡還有一些閱讀材料:

Rebalancing: The Key to the Lightning Network

Rebalancing in the Lightning Network: Circular Payments, Fee Management and Splices

How Splices Impact Lightning Network Fees

The Inbound Capacity Problem in the Lightning Network(中文譯本)

(完)

(文內有許多超連結,可點選左下 ”閱讀原文“ 從 EthFans 網站上獲取)

原文連結:

https://medium.com/muunwallet/a-closer-look-at-submarine-swaps-in-the-lightning-network-4417a2e8f93c

作者:Florencia Ravenna

翻譯:阿劍

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读