hArk 和 Erk:使用 CTV 和 CSFS 改進 Ark 協議

作者:Steven Roose

來源:https://roose.io/blog/hark-erk-evolving-the-ark-protocol-using-ctv-and-csfs/

(本文同時發佈在 Delving Bitcoin 論壇中。)

上週在 OP_NEXT 論壇上,我提出了 Ark 協議的一種新變種,叫做 “Erk”,它消除了參與回合的用戶的所有交互需要。在本文中,Erik De Smedt 和我希望明確 Erk 以及利用 CTV(OP_CHECKTEMPLATEVERIFY)和 CSFS(OP_CHECKSIGFROMSTACK)可以在 Ark 上作出的其它優化。

簡單來說,我們得出了 Ark 的 兩種 相互競爭的協議,它們具有如下特性:

  • “Erk”:
    • 參與回合的時候不需要用戶交互
    • 離線刷新(服務商可以為用戶刷新)
    • 永續離線刷新(服務商可以為一個用戶不斷刷新,沒有期限)
    • 在單輸入、單輸出的 VTXO 上效果最好
    • 需要 CTV + CSFS
  • “hArk”:
    • 參與回合的時候不需要用戶交互
    • 非常高效,哪怕輸入有多個
    • 無法實現離線刷新(至少到目前為止)
    • 只需要 CTV

Ark 簡介

我們先要總結一下現有的基於 CTV 的 Ark 協議以及基於 MuSig 的 clArk 協議,然後是關於新的 Erk 和 hArk 變種的詳細解釋。

首先,我們來總結一下會在下文的解釋中用到的核心概念。

我們將 Ark 服務商的公鑰記為 $S$,而用戶的公鑰則記為 $A, B, …$

Ark 協議的基礎磚塊是交易樹,它讓多個用戶能夠共享一個鏈上的 UTXO 。下面的骨架圖展示了一棵交易樹,其中 Alice($A$)擁有 4 BTC、Bob($B$)擁有 3 BTC、Carol($C$)擁有 2 BTC,而 Dave($D$)擁有 1 BTC 。Ark 是一套離鏈的協議,所以,在樂觀情形下,整個交易樹只有注資交易(FUNDING)會得到區塊鏈確認。

(每個方框都是一筆比特幣交易)                 +------------+                 |  FUNDING   |                 +------------+                       | 10₿                 +-----+------+                 |   NODE 1   |                  +-----+------+             +---------┴--------------+          7₿ |                        | 3₿        +----+----+              +----+----+        | NODE 2  |              | NODE 3  |        +----+----+              +----+----+             |                        |       +-----+-----+            +-----+-----+    4₿ |        3₿ |       2₿   |           | 1₿    +---+----+  +---+----+   +---+----+  +---+----+    | EXIT A |  | EXIT B |   | EXIT C |  | EXIT D |    +--------+  +--------+   +--------+  +--------+

在這套裝置中,Alice 可以通過廣播她所在的交易樹分支,來執行單方面退出、領取她的資金。她的分支由這四筆交易組成:FUNDINGNODE 1NODE 2EXIT A 。在 Alice 知道這些交易(以及讓它們變成有效交易所需的見證數據)並且可以用公鑰 $A$ 來花費它們的時候,我們就說 Alice 擁有一個 VTXO 。

每一個 Ark VTXO 都有一個過期時間點,在這個過期時間點之前,這個 VTXO 必須要麼被花掉、要麼刷新(否則用戶就會失去其中的價值)。而 “刷新一個 VTXO”,本質上意味著將一個 VTXO 換成一個新的(刷新時間延後了的)VTXO。刷新操作在 Ark 的 “回合” 中實現,也就是是 Ark 服務商和自己的用戶的一個在線交互流程。

在過期之後,服務商就可以清掃整個交易樹中的價值。在理想情況下,服務商可以直接清掃(花費)注資交易,但如果某個(某些)用戶執行過單方面退出,服務商就只能清掃尚未有用戶退出的所有剩餘節點中的價值。

Arkoor

如果 Alice 持有一個 VTXO、想給 Bob 支付,她可以創建一筆新的鏈下交易(在類型上稱為 “arkoor 交易”)、花費她自己的 VTXO(也即她的退出交易的輸出)、為 Bob 創建一個新的 VTXO 。Bob 可以存儲構成 Alice 的 VTXO 的所有交易,再加上 Alice 創建的這筆 arkoot 交易,構成他的新的 arkoor VTXO

(譯者注:“Arkoor” 是 “Ark out-of-round” 的縮寫,顧名思義,是在回合之外執行的。)

輸出的花費條件

我們將用在 Ark 協議中的輸出花費條件分為三種:

  • 節點交易花費條件:用在所有節點交易(也包括注資交易)中的花費條件
  • 葉子條件:用在最後一筆節點交易的輸出中的花費條件,支付給一筆退出交易
  • 退出條件:用在退出交易中的花費條件;退出交易是整個交易樹的葉子,可被用戶用來執行單方面退出

從邏輯上來說,你可以將這些三種花費條件視為前後相接的。下圖指明瞭上圖所示的不同交易所用到的輸出花費條件。退出交易後面可以跟隨 arkoor 交易或者棄權交易。

FUNDING+-------------+-----+| node policy | 10₿ |+-------------+-----+NODE 1+-------------+-----+| node policy |  7₿ |+-------------+-----+| node policy |  3₿ |+-------------+-----+NODE 2+-------------+-----+| leaf policy |  4₿ |+-------------+-----+| leaf policy |  3₿ |+-------------+-----+EXIT A+-------------+-----+| exit policy |  4₿ |+-------------+-----+

所有的變種都具有以下共性:

  • 每一個回合都會在一個 過期區塊高度 $T_{exp}$ ,在這個區塊之後,這個回合(所對應的交易樹)中的資金就可以被 Ark 服務商密鑰清掃。

  • 在我們的構造中,所有的交易都是 0 手續費的,都有一個手續費錨點輸出。在現實中,手續費可以是非零值,如果服務商傾向於給用戶補貼一部分退出成本的話。帶有交易費不是整個構造能夠工作的必要條件,但帶有手續費錨點輸出則是。(譯者注:這個錨點輸出允許用戶通過 “CPFP” 方法來追加手續費)。

  • 節點花費條件葉子花費條件 的功能都是延續交易樹的分支,並帶有一個替代性的花費路徑,讓服務商可以在過期之後清掃資金。

  • 對用戶來說,活性要求是指,他們要在自己的 VTXO 過期之前(也即 $T_{exp}$ 之前)的一段時間裡回到互聯網上,要麼刷新自己的 VTXO ,要麼執行單方面退出(如果服務商和自己的 arkoor VTXO 的任何一位前任所有權人行為不軌的話)。

  • 一旦退出交易得到區塊確認,過期機制就失效了,資金會進入 退出條件。退出條件有兩個主要功能以及對應的 條款

    • 支付條款,給用戶和服務商提供了一種合作式創建即時花費的方法(用於創建 arkoor 交易和棄權交易)
    • 退出條款,用戶提供了一種訪問這些資金的方法,如果 TA 從未用這個 VTXO 創建過即時花費

    退出條件 的最初設計在 退出條款 中使用了一個相對時間鎖,但我們的更新設計結合了一個絕對時間鎖 $T_{exp}$ 和一個相對時間鎖 $\Delta t$ 。

    • 這個相對時間鎖保證了,支付條款 優先於 退出條款
    • 這個絕對時間鎖保證了,這個 VTXO 的任何後續的所有權人(任何可能通過使用 支付條款 的 arkoor 交易收到這個 VTXO 的人),除了在 $T_{exp}$ 之前一段時間上線之外,沒有別的活性要求

細說部分變種

Ark

最初版本的 Ark 協議基於 CTV 。我們對這個想法的最新迭代也一樣。

節點花費條件退出條件 都使用了 OP_CTV 來承諾下一筆交易。

  • 節點條件葉子條件:$CTV\ or\ (S + T_{exp})$
  • 退出條件:$(A + S)\ or\ (A + T_{exp} + \Delta t)$

在回合中(刷新 VTXO 的時候),用戶需要簽名一筆 棄權交易,將自己的 VTXO交給服務商,並且,該棄權交易的生效條件是下一回合的正確開啟。一個 連接器 是下一個回合的注資交易的一個專用後代交易,它會被用作 棄權交易 的一個輸出,從而保證,服務商只有在下一回合(的注資交易)成功得到確認時,才能強制執行這個棄權交易。一旦所有用戶都為自己的 VTXO 簽名了棄權交易,服務商就可以簽名注資交易、並廣播到比特幣網絡中。

棄權交易有兩個輸入:

  • 退出交易的輸出,使用 退出花費條件支付條款
  • 連接器輸入,來自新回合的注資交易的一連串後代交易的一個輸出

棄權交易只有一個輸出,就是將所有資金髮送給服務商。

forfeit tx:| inputs    | outputs | +===========+=========+| exit tx   |       S | +-----------+---------+| connector |         | +-----------+---------+

clArk,“無需限制條款的 Ark”

clArk 與 Ark 非常相似,只是在交易樹上使用了遞歸的多簽名裝置。每一個 節點條件 都包含了一個多簽名裝置,使用該節點下的所有葉子的公鑰。

  • 節點條件:$(A + B + C + … + S)\ or\ (S + T_{exp})$
  • 葉子條件:$(A + S) or\ (S + T_{exp})$
  • 退出條件:$(A + S)\ or\ (A + T_{exp} + \Delta t)$

回合機制是一樣的,也使用了 連接器。唯一的區別在於,在所有客戶端簽名(自己所在的)交易樹的分支時,需要一個額外的階段。

Erk,“Erik 的 Ark”

我在 OP_NEXT 大會上演示 Erk 之後,我們又作了一些額外的升級。

Erk 的花費條件跟 Ark 中的一模一樣,但我們讓簽名變成 可以重新綁定的(“可以重新綁定的簽名” 是使用 APO 語義的簽名,意思是他們不承諾具體的 UTXO 輸入,所以可以用來花費任何包含相同公鑰的輸出)。我們可以使用 CTV + CSFS 來實現可以重新綁定的簽名。

  • 節點條件葉子條件:$CTV\ or\ (S + T_{exp})$
  • 退出條件:$(A + S)\ or\ (A + T_{exp} + \Delta t)$

退出條件 中的 $A + S$,就是我們要使用重綁定簽名的地方。

Erk 的核心和基本原則體現在下列交易中,我們稱為 退款交易

refund tx:| inputs             |        outputs | +====================+================+| old exit tx for A  | exit policy A' | +--------------------+----------------+| new exit tx for A' |              S | +--------------------+----------------+

Erk 回合沒有用戶交互(我們把 “用戶交互” 定義為 “所有用戶同時採取行動”)。用戶通過發送一個新的公鑰($A’$)以及一個簽過名的退款交易給服務商,來參與一個回合。注意,退款交易的一個輸入是用當前的公鑰 $A$ 來簽名的,而另一個輸入則是用新的公鑰 $A’$ 來簽名的。

這時候,服務商可以安全地創建一棵新的 VTXO 樹、為用戶發行相同的 VTXO(減去一些手續費)。這個新的 VTXO 有一個 退出條件,使用的新公鑰 $A’$。

用戶可以隨時安全地簽名這筆退款交易,因為他們依然能從交易的其中一個輸出中收到自己的錢。所以如果這筆交易被服務商惡意使用,用戶並不會丟失任何資金。

服務商也可以在收到這樣的簽過名的退款交易之後創建回合,因為,如果用戶嘗試(惡意地)退出原本的舊 VTXO,服務商可以揭曉這個新 VTXO,然後同時花費兩者、拿走用戶無權擁有的東西。

Arkoor

在 Erk 變種中實現 arkoor 交易需要格外小心。設想,如果用戶 Alice 把自己的新 VTXO 發送給了 Bob(使用一筆 arkoor 交易),然後又惡意的嘗試退出舊的 VTXO 。服務商將被迫廣播新的 VTXO 並使用退款交易,這就把 Bob 的 arkoor VTXO 作廢掉了。

然而,因為作為交易樹的葉子的退出交易,跟退款交易擁有相同的輸出花費條件(對公鑰 $A’$ 來說),那麼 Bob 可以要求 Alice 提供可以重新綁定的 arkoor 簽名:這個簽名在這兩種輸出上都可以使用。(注意,同一時間,只有其中一個才能存在,因為退款交易是退出交易的子交易。)

這一設計讓 arkoor 交易在 Erk 上也可以實現,前提是每一個新的 VTXO 都來自一個 VTXO 輸入。當我們嘗試將這種設計推廣到多個 VTXO 輸入被合併為一個 VTXO 輸出的情形中時,arkoor 構造就會無法工作。

離線刷新

現在,設想如果用戶已經預先為自己的 VTXO 簽名了一筆退款交易(就在這個 VTXO 剛剛創建好的時候)、把這個簽名交給了服務商,然後就離線了。這意味著,這個服務商可以隨時安全地重新發行這個 VTXO,只要持有這筆退款交易,就不怕用戶同時領取這兩個 VTXO 。這意味著,即使用戶放棄了手動刷新,服務商也可以自動幫助 TA 。也可以讓瞭望塔來監控這個 Ark,並在服務商沒有幫助刷新用戶的 VTXO 時通知這個用戶。

(譯者注:“瞭望塔” 指的是能夠監控比特幣區塊鏈並代替客戶對其中發生的事件作出響應的互聯網服務。)

此外,設想第一次刷新將公鑰 $A$ 變更為 $A’$,Alice 也可以預先為未來的 VTXO $A’$ 簽名一筆退款交易,從而將公鑰變更為 $A’’$。實際上,Alice 可以預先簽名任意次數的刷新操作,每一次都將資金轉入一個新的公鑰(還可以每一次都減去一些數額,作為給服務商的服務費)。這樣一來,一個服務商可以不斷刷新一個 VTXO,用戶不需要回到互聯網上,除非一個瞭望塔提醒 TA 服務商並沒有遵守約定。

也許一個惡意的服務商可以嘗試迅速地應用所有這些退款交易,從而領走所有的服務費(請注意,這不一定是經濟的,因為他需要為每一筆交易支付挖礦手續費)。可以通過在每一筆退款交易中放置絕對時間鎖來避免這一點:服務商只能在根據預計的回合時間計算出來的未來時間點之後使用相應的退款交易。)

hArk,“哈希鎖 Ark”

Erk 看起來非常強大(儘管我們放棄了 “aArk” 這個可能的代號),但依然有兩個主要缺點:

  • 服務商為了 “報復” 一個惡意退出操作,必須揭曉新 VTXO 所在的交易樹分支。這在 “入場 VTXO” —— 用戶自己在移動資金到一個 Ark 中時創建的 VTXO) —— 上問題尤其突出。入場 VTXO 只由一筆注資交易和一筆退出交易構成(該注資交易的輸出使用 葉子花費條件)。這意味著用戶嘗試惡意退出的代價是很低的,而服務商要報復的代價則可能是很高的。
  • Erk 只能支持單 VTXO 輸入的刷新。

hArk 並不是 Erk 的變種,而是跟 Erk 完全不同的 Ark 變種。它的回合機制也不要求任何用戶交互,它是鏈上蹤跡最小化的,而且完美適配多 VTXO 輸入的情形。

在 hArk 中,葉子花費條件節點花費條件 不同,在於前者要求知道一個秘密值。

  • 節點條件:$CTV\ or\ (S + T_{exp})$
  • 葉子條件:概念上是 $(CTV + secret) or\ (S + T_{exp})$($secret$ 即所要求的秘密值),但另類的 $(A + S + secret tweak) or\ (S + T_{exp})$ 可以使用 Taproot 密鑰路徑花費,所以更加高效
  • 退出條件:$(A + S)\ or\ (A + T_{exp} + \Delta t)$

在 hArk 的回合中,用戶提交自己希望刷新的 VTXO 輸出。服務商為樹上的每一個新 VTXO 創建一個秘密值。因為一開始只有服務商才知道這個秘密值,所以 TA 可以安全地為回合(交易樹)注資。一開始,沒有任何一個新 VTXO 是能被用戶訪問的,因為所有的秘密值都還是保密的。

在回合注資交易得到區塊確認之後,用戶再簽名一筆 棄權交易。這筆棄權交易將跟 Ark 和 clArk 中棄權交易不同,它讓服務商可以通過揭曉秘密值來領取 VTXO 中的價值。

這筆棄權交易的輸出花費條件是 $(S + secret)\ or\ (A + \Delta t)$ 。粗略地說,秘密值的檢查可以通過使用簡單的哈希鎖來實現,但也可以在 Taproot 的密鑰花費路徑(Schnorr 簽名)中使用 “適配器簽名” 來實現,可以節約一些字節。

forfeit tx:| inputs  |    outputs | +=========+============+| exit tx | S + secret ||         | or  A + Δt |+---------+------------+

在用戶簽名這筆棄權交易之後,服務商再告訴用戶這個秘密值。這樣一來,用戶就能訪問新的 VTXO 了。

如果用戶簽名這筆棄權交易之後,這個服務商拒絕交出相關的秘密值,那麼用戶將被迫嘗試單方面退出,最終,這要麼將錢交回給用戶,要麼服務商再鏈上揭曉這個秘密值。

結論

如果 CTV 可用,我們就能在 Ark 回合機制中完全消除所有用戶交互。VTXO 刷新將變成一個完全異步的過程,用戶可以自由登記,服務商可以獨立地發行新的 VTXO,用戶日後回到互聯網上,就可以完成整個流程。

如果 CTV 之上還有 CSFS 可用,那麼離線刷新甚至可以遞歸使用。這讓服務商可以無需用戶參與、自動刷新 VTXO,並且用戶可以將監控正確動作的任務委託給第三方(瞭望塔)。

Erk 和 hArk 可以同時使用。用戶可以總是預先簽名 Erk 退款交易,以防自己不能及時上線,但依然使用 hArk 方法手動參與回合,比如需要合併多個 VTXO 為一個的時候,或是他們希望儘快刷新的時候。

我們想象,上述方案可以極大地強化 Ark 的用戶體驗、Ark 在移動端場景中的可用性,以及 Ark 服務商可以提供的功能性。

(完)

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