比特幣虛擬通道:為 Ark 帶來即時確認

作者:Marco Argentieri

來源:https://blog.arklabs.xyz/bitcoin-virtual-channels/

virtual-channels

利用 Ark 的 VTXO 範式將智能合約轉移到鏈下,“虛擬通道” 可以帶來高效、低成本的比特幣支付通道。

Ark 帶來的最有前景的機會之一是,他可以將比特幣原生的智能合約放到鏈下的樹結構中。支付通道就是展示這種潛力的一個絕佳候選者。

雖然在當前,人們都是在閃電網絡的的語境下理解支付通道的,但在閃電網絡出現以前,更早的提議研究了更簡單的單向支付通道。BitcoinJ 項目就描述了這樣一個實現:它使用 “斯皮爾曼式” 式支付通道,可以帶來高吞吐量的單向(從發送者到接收者)支付通道。

這種方法的顯然劣勢在於,因為需要使用鏈上交易來開啟,啟動成本較高。

我們提出了一種消除這種劣勢的解決方案:利用 Ark 協議,為比特幣支付同村啟用更高效、成本更低的部署方式,我們稱之為 “虛擬通道”。

斯皮爾曼式支付通道

所有支付通道的起點都是在比特幣區塊鏈上確認一筆注資交易、鎖定一定數量的資金到一個參與者共享的多簽名地址中。這筆注資交易充當這條通道的基礎,需要一次鏈上的操作。

這種智能合約的最簡單版本就是標準的單向支付通道。支付者向一個合約注資,該合約有兩種可能的花費條件:

  • 支付者和接收者雙方簽名的合作結算
  • 支付者在一段時間後可單方發起的退款

這裡的核心概念很簡單:支付者通過簽名花費這個合約的新交易、將更大的資金份額分配給接收者,就可以即時在鏈下轉移資金。接收者驗證了支付者的簽名之後,這筆交易就可以被認為生效了 —— 消除了對比特幣區塊的重複花費保護機制的依賴。

只要通道保持開啟,就可以繼續發送交易,每一筆新交易都會更加接收者可以得到的資金。

在這條通道過期以前,接收者一直擁有使用支付者的最新簽名、加上自己的簽名、廣播一筆完全有效的比特幣交易的選擇。這筆交易花費的是通道合約(上述多簽名地址)、以一個或更多輸出準確地反映了通道內最新的餘額:接收者的收益,以及支付者的找零(如果有的話)。

過期機制本質是為了保證支付者能收回自己的資金,如果接收者變得無響應,或者拒絕合作更新通道狀態的話。

這種設計的主要優勢在於,它不需要雙方都同時在線。只要支付者簽名了更新,就可以下線。接收者也只需要存儲最新的通道狀態(交易),不需要承擔困擾閃電網絡的用戶和操作者的備份負擔。

最明顯的缺點,可能你也猜到了,就是這種方法不能高效擴容。一個普通用戶可能有多個對手,而且建立通道的鏈上成本可能不划算(長期來看無法負擔)。

放在 VTXO 內的通道

VTXO 範式最強大的特性是它對 UTXO 模式的原生支持,這使得我們可以使用 Tapscript,讓裸的 VTXO 腳本拓展到超越單個簽名人。通過定義額外的簽名路徑,我們可以封裝多方合約 —— 創建包含支付者、接收者和 Ark 服務商的虛擬通道

ark-vtxo-channel

它所用的 Taproot 腳本路徑是這樣的:

  • 棄權:所有參與者對如何花費這個 VTXO 達成一致。隨時可用。
  • 退款和棄權:在某一個區塊高度之後,支付者和服務商一起花費,以退款或創建新的通道。
  • 24 小時之後:在 VTXO 樹在鏈上展開的 24 小時之後,支付者和接收者的共同控制開始生效。
  • 48 小時之後:在 VTXO 樹在鏈上展開的 48 小時之後,支付者可以完全控制這筆資金。

注資

一旦支付者和接收者對一個腳本模板達成一致,他們就一起通過參與一個 Ark 輪次來創建一條通道。支付者用自己的 VTXO(或者一個進群 UTXO)為這個通道注資,然後接收者驗證並聯合簽名包含了代表這條虛擬通道的葉子的 VTXO 樹。這個過程要求所有參與者同時在線,而且依賴於服務商來提供必要的 UTXO 流動性。

支付

支付者創建並簽名一個花費該合約、在支付者和接收者之間分割通道餘額的 PSBT。

接收者接收這筆部分簽名的交易,存儲它以備日後使用,然後發送承諾好的商品或服務。

退款

如果接收者不再合作了怎麼辦?

不需要手動展開整個 VTXO 樹。一個絕對時間鎖允許支付者跟服務商完全放棄這個通道合約,在 VTXO 樹過期以前。

單方退出

如果 Ark 服務商離線了,或者無法響應,其它的花費路徑就有用了。VTXO 樹可以展開、廣播到比特幣區塊鏈上,從而激活其它花費路徑。這保證了支付者和接收者的交易依然能在鏈上結算,防止資金因為服務商不可用而永遠鎖定。

給我看看你的代碼

我們需要分叉來支持虛擬通道嗎?完全不需要!

在即將到來的 arkd 0.4 版本種,服務商不再需要顯式支持一種具體的腳本模板,只要棄權路徑存在、所有單方面贖回路徑都帶有時間鎖就行。

腳本路徑

棄權

<PayerPubKeyOP_CHECKSIGVERIFY<ReceiverPubKey>OP_CHECKSIGVERIFY<ServerPubKey>OP_CHECKSIG

退款和棄權

<BlockHeight>OP_CHECKLOCKTIMEVERIFYOP_DROP<PayerPubKey>OP_CHECKSIGVERIFY<ServerPubKey>OP_CHECKSIG

通道:更新

<144>  // 1 day in blocksOP_CHECKSEQUENCEVERIFYOP_DROP<PayerPubKey>OP_CHECKSIGVERIFY<ReceiverPubKey>OP_CHECKSIG

通道:退款

<288>  // 2 days in blocksOP_CHECKSEQUENCEVERIFYOP_DROPPayerPubKeyOP_CHECKSIG

開啟通道

支付者放棄自己的 VTXO(或者 UTXO)以參加下一個輪次,為通道注資;TA 跟接收者都註冊一個額外的新公鑰,用於代表自己只用來簽名 VTXO 樹的私鑰。通道輸出的 taproot 腳本樹會在花費時揭曉,在註冊輸入時,需要提供一個十六進制編碼的 tapscript 列表。

message Input {  Outpoint outpoint = 1;  oneof taproot_tree {    string descriptor = 2;    Tapscripts tapscripts = 3;  }}message Tapscripts {  repeated string scripts = 1;}

發起支付

再簡單不過了:支付者簽名一個 PSBT 併發送給接收者。即時結算,而且沒有什麼收款額度概念!

關閉通道

在關閉通道時,接收者結合支付者的最新簽名和自己的簽名,請求服務商聯合簽名一筆贖回交易,從而將通道的關閉終局化。這筆交易可以結算成常規的 VTXO,不論是同步結算還是在未來的輪次中結算。

洞見

  • 斯皮爾曼通道構造非常適合 Ark 框架。
  • 與閃電通道不同,單向通道的風險和開銷都顯著低了許多。用戶不需要備份,也不需要為了持久化通道狀態而保持在線。
  • Ark VTXO 腳本編程允許超越單簽名合約的鏈下擴容應用。

(完)

相关赛道:
來源
免責聲明:以上內容僅為作者觀點,不代表Followin的任何立場,不構成與Followin相關的任何投資建議。
喜歡
收藏
評論