有關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 NetworkRebalancing in the Lightning Network: Circular Payments, Fee Management and SplicesHow Splices Impact Lightning Network FeesThe 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