閃電網路(2)-比特幣 Layer 2 擴容方案詳解

第一篇文章中,我們介紹了單向支付渠道如何透過時間鎖解決無法順利結算的問題以及為了擴大應用場景的雙向支付渠道。這一集我們要介紹的是若要做到雙向支付渠道所需的技術同時也是閃電網路的核心技術,RSMC 以及 HTLCs。

RSMC 可撤銷順序成熟度合約 (Revocable Sequence Maturity Contract)

RSMC 其實就是資金池,打開支付渠道時,雙方將資產放入這個資金池中,封起來各自用一把鑰匙鎖上,交易時不會真的動用到該筆資金,而是用合約的方式紀錄兩人在資金池裡的剩餘資產,等到關閉通道時,才會打開這個資金池做結算。

雙向支付通道如何運作?

從頭到尾,涉及的雙方只需要與比特幣區塊鏈進行兩次互動。一次打開支付渠道而另一次是關閉渠道,在這之間發生的所有其他交易都不直接與主鏈接觸,這意味著,只有在雙方都同意並簽名的狀態下,交易才會被確認。

假設 Alice 和 Bob 打算頻繁進行交易,雙方同意開闢雙向支付通道,並約定好在 1000 個區塊後強制結算。Alice 和 Bob 必須先在鏈上開啟一個多重簽名錢包,才能開闢雙向支付通道。

此時雙方會各自生成一組 Secret Key (鑰匙) 以及 Hash (鎖頭),Hash 會交給對方,Secret Key 自行保管。在開闢雙向支付渠道後,Alice 和 Bob 每次支付都像簽一次合約,在簽新合約之前會廢棄掉舊合約,要注意的是當舊合約作廢的同時彼此將取得對方舊合約的 Secret Key,而合約的內容就是關於如何重新分配資金池的資產。

閃電網路(2)-雙向支付通道如何運作

閃電網路(2) - 支付通道

共同簽名錢包裡的錢只能在三個條件下解鎖:

  1. 鎖定時間到了
  2. 任何一方通過對方的 Secret Key 從他們設置的多重簽名錢包中解鎖資金
  3. 合約有雙方簽名,且其中一方廣播

要注意的是,如果一方決定關閉支付渠道並廣播交易,廣播的那一方將不得不等待到交易簽名時設置的預定時間到,才能收到他那部分的資金。

會不會有人作惡?

例如:閃電網路中的其中一位參與者廣播對於自己有利的舊合約來進一步圖利,而非依照正常程序廣播最新的合約。

此時,上述的兩個值得注意的點就派上用場

  • 當舊合約作廢的同時彼此將取得對方舊合約的Secret Key
  • 如果一方決定關閉支付渠道並廣播交易,廣播的那一方將不得不等待到交易簽名時設置的預定時間才能收到他那部分的資金

假如 Alice 企圖廣播舊合約惡意結算關閉通道,依照上述閃電網路的機制,Bob 與 Alice 都擁有對方舊合約的 secret key,且 Alice 必須等到預定的時間到,才能拿到舊合約中Alice 的那份 BTC,所以 Alice 只要廣播舊合約,Bob 即可在 Alice 等待的時間中使用舊合約的 secret key 將 Alice 的那份 BTC 取走,這樣一來 Alice 不但沒有成功廣播對他有利的舊合約,還為他的惡意行為付出代價。

讀到這邊,我們就把雙向支付通道的運作方式全都說完了。接下來要介紹的是,雙向支付通道如何編織成為支付網路。

支付網路

現在,除了 Alice 和 Bob 之間有支付通道之外,Bob 也和 Carol 開了支付通道。Alice 如果要向 Carol 支付 1 顆比特幣,該怎麼做呢?

閃電網路(2)-支付網路Alice 可以選擇直接跟 Carol,建立一個支付渠道,但是這樣做對 Alice 跟 Carol 來說,必須在主鏈上建立多重簽名錢包還要打幣,不僅麻煩而且又需要額外成本。相信大家都想到解決方法了,Alice 只要透過現有的支付通道,先把 1 BTC 打給 Bob,Bob 在將 1 BTC 打給 Carol,這樣就可以在不用負擔額外成本的情況下完成交易了。但是,這同時也存在幾個信任問題。

  1. Bob 不老實,拿了 Alice 的 BTC 之後私吞,不交給 Carol。
  2. Carol 拿了錢,卻跟 Alice 說他沒拿到錢。

如何解決這部分的信任問題,就要仰賴閃電網路的另一項核心技術「HTLCs」。

HTLCs 哈希時間鎖合約 (Hash Time-Locked Contracts)

要解決上述的信任問題就必須做到兩點:

  1. Alice 要確定 Carol 本人確實有收到比特幣
  2. 必須確定 Bob 不會拿走這筆比特幣

還記得我們之前介紹過的公鑰與私鑰吧,HTLCs 就是用同樣的概念下去延伸,我們把鑰匙想成私鑰,鎖頭就是公鑰。假設 Alice 需要付給 Carol 1 個 BTC,收款方 Carol 會創建一個Value (鑰匙) 和對應的哈希值 (鎖頭),然後把鎖頭交給 Alice。

這裡就是這個技術的精華。

” 只要拿得出鑰匙就代表他是 Carol “

” 只有 Carol 擁有鑰匙,換言之,只有 Carol 能夠打開鎖頭 “

在這個前提下,Alice 和 Bob 提出一份合約,如果 Bob 在 3 天內(Lock time = 3 day),提供哈希值對應的 Value,Alice 就給 Bob 1.0001 BTC,超過 3 天,BTC 原路返回給 Alice。

Carol 也同樣跟 Bob 簽訂一個合約,只要 Carol 提供哈希值對應的 Value,就必須給 Carel 1 BTC。

於是,Carol 向 Bob 提供 Value,從 Bob 那獲得了 1 BTC。Bob 將這個 Value 交給 Alice,從 Alice 那獲得了 1.0001 BTC,這當中的價差 0.0001 BTC 就給 Bob 作為手續費。

閃電網路(2) - 時間鎖

閃電網路的優勢

閃電網路致力於比特幣可擴展性問題的鏈下解決方案。如果成功,可能會大幅減少比特幣區塊鏈的負載,增加比特幣的實際應用可能。

通過使用雙向支付渠道,閃電網路可以實現近乎即時且極低成本的交易。

閃電網路的侷限性

與鏈上交易不同,如果接收方處於離線狀態,沒辦法做交易確認,無法進行支付。

網路的參與者可能需要定期監控支付渠道,以保證他們的資金安全。

閃電網路較難支援大額付款。閃電網路交易時有時需要仰賴中間人,舉個例子,閃電網路中存在 Alice、Bob 和 Carol 三人,Alice 要發送 1 BTC 的交易給 Carol ,這中間需要經過 Bob,如果 Bob 的餘額不足 1 BTC ,這筆交易便無法順利完成,因此交易金額會受限於中間人的資產餘額。

閃電網路的實用性取決於網路大小,若使用人數不足,閃電網路便難以發揮其價值。越多的人加入,閃電網路才會更加健全且完善,流動性也才能隨之提升。

本文由 AMIS 首席科學家 – 陳昶吾博士協助審閱

相關文章