作者:Second Docs
來源:https://docs.second.tech/ark-protocol/forfeits-connectors/
用戶的棄權交易也是預先簽名的交易,用於刷新 VTXO 和離場,作用是讓 Ark 服務商能控制用戶的 VTXO 。服務商持有這些棄權交易但並不立即廣播到網絡中,為的是應對惡意的退出操作。雖然一筆棄權交易將一個 VTXO 的控制權交給了服務商,但該服務商無法立即獲得其中的比特幣 —— 必須等待該 VTXO 過期。
“連接器” 是一種特殊的輸出,給出了一種密碼學保證:棄權交易僅會在用戶意圖的交易完成時才會變成有效交易;這樣的意圖交易可能是:
- 一個新的 VTXO,被包含在一筆新的回合交易中,並且該交易得到了區塊鏈確認
- 一個離場輸出,作為回合交易的輸出,並且該交易得到了區塊鏈確認
結果是,用戶可以安全地簽名棄權交易,不需要信任任何第三方 —— 也即保證了整個過程是原子化的(要麼完全成功,要麼完全沒變化)、自主保管的,而且沒有對手方風險。
- 連接器保證了 Alice 棄權交易僅在(例如)新 VTXO 的回合交易得到區塊鏈確認之後才成為有效交易 -
Ark 內部支付並不使用棄權交易
Ark 內部支付並不涉及用戶通過放棄一個 VTXO 來發起支付的原子化操作。相反,用戶跟 Ark 服務商一起預簽名一筆新的鏈下交易,在 TA 現有的其中一個 VTXO 上再衍生一個葉子出來。若是用戶希望發起閃電支付,Ark 協議會對葉子使用定製的、基於 HTLC 的花費條件,來保證原子化執行。
棄權交易
如果你熟悉閃電通道的懲罰交易的化,你應該已經能夠想到 Ark 協議中的棄權交易是怎麼回事了。
為了支出棄權,每一個 VTXO 的 “退出交易”(葉子)都有兩個花費路徑:
- 花費路徑 1:這條路徑是一個 2-of-2 的多簽名,由用戶(VTXO 所有者)和 Ark 服務商組成。用戶用這個路徑來簽名棄權交易,從而將這個 VTXO 中的比特幣交給 Ark 服務商。注意,這條花費路徑並無時間鎖。即使用戶將退出交易發佈到網絡中,Ark 服務商也可以在用戶能夠取走比特幣之前發佈棄權交易。
- 花費路徑 2:這條路徑完全是由用戶控制的,允許他們單方面退出(假設用戶從未簽名過棄權交易的話)。這條路徑有一個相對時間鎖,長達
60
個區塊(大約是 10 消失)。這個時間鎖是在比特幣腳本中通過 OP_CHECKSEQUENCEVERIFY(CSV)操作碼實現的。
- 退出交易的輸出(葉子)中的花費條件如何支持棄權操作 -
棄權交易通常不會發布到網絡中
在常規條件下,基於這兩條花費路徑的交易都不會被廣播到網絡中,即便用戶要放棄其 VTXO 。相反,Ark 服務商會在一筆回合交易的絕對時間鎖過期後,用一筆鏈上交易清掃該回合交易中的所有資金(也即一次性清掃基於該回合交易的所有 VTXO 中的資金)。
用戶所簽名的棄權交易,對 Ark 服務商來說僅僅是一種 “保險”,應對用戶已經棄權之後又嘗試單方面退出的非常規情形。
棄權交易如何防止惡意退出
如果用戶嘗試惡意退出,他們會先廣播自己的 VTXO 的所有分支交易,然而,一旦他們發佈了葉子交易(退出交易),他們就必須等待相對時間鎖過期,然後才能將葉子交易輸出中的所有資金髮送到僅有他們能控制得鏈上地址。
在 Second 的 Ark 實現中,我們預計會將這個退出時間鎖設為大約 10 小時。這將給 Ark 服務商充足的時間來發現惡意退出的嘗試,並廣播用戶簽過名的棄權交易;因為用戶必須等待,棄權交易會更快將退出交易輸出中的資金轉走。
雖然棄權交易給 Ark 服務商提供了一些安全性,但也並不理想:一旦出現了惡意退出,服務商就不再能以一筆交易取走相關回合交易輸出中的所有資金,而必須發起額外的鏈上交易。然而,廣播多筆交易(從分支交易到葉子交易)所需支付的鏈上手續費,應該已經足以勸阻用戶常常這麼做!
連接器
理解了棄權交易之後,我們再來看看 “連接器” 如何保證棄權過程是原子化的。我們以刷新過程為例,但離場過程是完全一樣的。
棄權操作的原子性是通過跟意圖確認的回合交易相綁定來實現的。只要相關的回合交易還沒確認(比如還停留在各節點的交易池中),那棄權交易就是無效的,即便廣播出去,也會被網絡中的節點拒絕(不會被轉發)。當然,在回合交易還沒確認時候的,新的 VTXO 也不是有效的價值載體!
- 如果回合交易還沒得到區塊鏈確認,棄權交易就還不是有效的交易,同時新的 VTXO 也還沒生成。 -
(譯者注:這是因為棄權交易使用了回合交易的一個小額輸出,也即所謂的連接器,作為自己的輸入。如果回合交易沒有得到確認,棄權交易就是在花費一個不存在的輸入,也就是無效的。)
但只要回合交易得到了區塊鏈確認,棄權交易就轉為有效交易,同時新 VTXO 生成。
- 一旦回合交易得到區塊確認,棄權操作和新 VTXO 的生成就同時完成了 -
優化 蹤跡/區塊空間使用
為了節約空間,我們希望所有的連接器可以打包到一個輸出中。但我們需要高效實現這一點。一個 Ark 回合可能有幾百個、幾千個用戶參與,草率構造的連接器可能會產生一個體積很大(也非常昂貴的)回合交易。
下圖是是一種糟糕設計的圖示,儘管將多個連接器打包到了一個輸出中,交易的體積依然會很快膨脹:
因此,Ark 協議使用 “連接器鏈條” —— 一連串的交易,其中每一筆交易都有一個連接器輸出。下圖是這種良好的打包設計的圖示 —— 最終會產生一個體積更小的回合交易,但依然能嵌入關聯所有棄權交易所需的數據。
為此需要犧牲的東西是,它需要更多交互:棄權一個 VTXO 的用戶必須根據鏈條上的每個連接器輸出簽名一筆棄權交易。
在下圖中,你可以看出,在有用戶嘗試惡意退出時,Ark 服務商要如何響應。比如,它必須廣播 C1 和 F1 到區塊鏈網絡中。
棄權交易與連接器都只偶爾出現
在常規輕輕下,只有回合交易會廣播到比特幣網絡中。來自連接器鏈條的交易只會在有用戶嘗試惡意花費一個已經棄權的 VTXO 時出現在鏈上。