區塊鏈-不對稱可撤銷承諾

目錄:https://blog.csdn.net/qq_40452317/article/details/89646633

摘自《精通比特幣》

處理先前承諾狀態的更好方法是明確撤銷它們。但是,這不容易實現。比特幣的一個關鍵特徵是,一旦交易有效,它一直有效,不會過期。取消交易的唯一方法 是在交易被挖礦前用另一筆交易雙重支出它的輸入。這就是爲什麼我們在上述簡 單支付通道示例中使用時間鎖定,以確保最新的承諾交易可以在舊承諾生效之前被花費。然而,把承諾在時間上排序造成了許多限制,使得支付通道難以使用。

雖說一個交易無法取消,但是它可以被構造成無法再使用的樣子。我們這樣做我 們實現它的方法是通過給予每一方一個 撤銷密鑰,如果對方試圖欺騙,可以用來 進行懲罰。撤銷先前承諾交易的這種機制首先被作爲閃電網絡的一部分提出。

爲了解釋撤銷密鑰,我們將在由Hitesh和Irene經營的兩個交易所之間構建一個 更加複雜的支付通道。 Hitesh和Irene分別在印度和美國運營比特幣交易所。 Hitesh 的印度交易所的客戶經常向 Irene 的美國交易所的客戶發送付款,反之亦 然。目前,這些交易發生在比特幣鏈上,但這意味着支付手續費用並等待幾個塊 進行確認。在交易所之間設置支付通道將大大降低成本並加快交易流程。

Hitesh 和 Irene 通過合作建立資金交易來啓動通道,每人向通道注資 5 個比特幣。 初始餘額爲 Hitesh 有 5 比特幣且 Irene 有 5 比特幣。資金交易將通道狀態鎖定在 2-2 多重簽名中,就像在簡單通道的例子中一樣。

資金交易可能有一個或多個來自 Hitesh 的輸入(加起來 5 個比特幣或更多),以 及 Irene 的一個或多個輸入(加起來 5 個比特幣或更多)。投入必須略微超過通 道容量纔夠支付交易費用。該交易有一個將總共 10 個比特幣鎖定到由 Hitesh 和 Irene 控制的 2-of-2 多重地址的輸出。如果他們的輸入超過他們需要貢獻的數值,資金交易也可能有一個或多個輸出將找零返回給 Hitesh 和 Irene。 這是由雙方提供和簽署的多個輸入形成的單一交易。在發送之前,它必須被合作 構建起來並且由各方簽署。
現在,代替雙方簽署單一承諾交易的是, Hitesh 和 Irene 創造了兩個不對稱 的承 諾交易。

Hitesh 有一個帶有兩個輸出的承諾交易。第一個輸出立即支付 Irene 欠她的 5 比特 幣。第二個輸出支付 Hitesh 欠他自己的 5 比特幣,但條件是只有在 1000 個區塊 的時間鎖之後。交易輸出如下所示:

Input: 2-of-2 funding output, signed by Irene
Output 0 <5 bitcoin>: <Irene's Public Key> CHECKSIG
Output 1: <1000 blocks> CHECKSEQUENCEVERIFY DROP <Hitesh's Public Key> CHECKSIG

Irene 有帶有兩個輸出的不同的承諾交易。 第一個輸出支付 Hitesh 欠他的 5 比特 幣。 第二個輸出支付 Irene,欠她自己的 5 比特幣,但同樣只有經過 1000 個區塊 的時間鎖。 Irene 持有的承諾交易(由 Hitesh 簽署)看起來像這樣:

Input: 2-of-2 funding output, signed by Hitesh
Output 0<5 bitcoin>: <Hitesh's Public Key> CHECKSIG
Output 1: <1000 blocks> CHECKSEQUENCEVERIFY DROP <Irene's Public Key> CHECKSIG

這樣一來,雙方各有一筆承諾交易,以花費 2-2 的資金輸出。 該承諾交易的輸 入是由對方簽署的。 在任何時候,持有承諾交易的一方都可以簽字(完成 2-2 籤 名)並進行廣播。 然而,如果他們廣播承諾交易,承諾交易會立即支付對方,而 他們自己的必須等待短時間鎖到期。通過在其中一個輸出強制執行贖回拖延,我們 可以做到讓各方在選擇單方面廣播承諾交易時處於輕微的不利地位。但是單靠時 間延遲還不足以鼓勵公平的行爲。

下圖顯示兩個不對稱承諾交易,其中承諾持有人的有延遲支付

現在我們介紹這個方案的最後一個要素:一個撤銷密鑰,允許被欺詐的一方通過 佔有通道的所有餘額來懲罰騙子。
每個承諾交易都有一個“延遲”的輸出。 該輸出的兌換腳本允許一方在 1000 個區塊後兌換它,或者另一方如果擁有撤銷密鑰也可兌換它。 所以當Hitesh爲Irene 簽署承諾交易時,他將把第二個輸出定義爲在1000塊之後可輸出支付給自己, 或者是任何可以出示撤銷密鑰的人。 Hitesh構建了這個交易,並創建了一個由他祕密保管的撤銷密鑰。當他準備轉移到新的通道狀態並希望撤銷這一承諾時, 他 纔會把撤銷密鑰透露給 Irene 第二個輸出腳本如下所示:

Output 0<5 bitcoin>: <Irene's Public Key> CHECKSIG
Output 1<5 bitcoin>: IF # Revocation penalty output <Revocation Public Key> ELSE <1000 blocks> CHECKSEQUENCEVERIFY DROP <Hitesh's Public Key> ENDIF
CHECKSIG

Irene 可以自信地簽署這筆交易,因爲一旦被髮送它將立即支付她被欠的欠款。 Hitesh 持有交易,但知道如果他在單方通道關閉時發送,他將不得不等待1000個塊才能獲得支付。

當通道進入下一個狀態時, Hitesh必須在 Irene 同意簽署下一個承諾交易之前撤銷 此承諾交易。要做到這一點,他所要做的就是將撤銷密鑰發送給 Irene。一旦Irene擁有這一承諾的撤銷密鑰,她就可以自信地簽署下一個承諾。她知道,如果 Hitesh 試圖通過發佈先前的承諾交易來作弊,她可以使用撤銷密鑰來兌換Hitesh的延遲輸出。如果 Hitesh 作弊,Irene 會得到 BOTH(兩方)輸出。

撤銷協議是雙邊的,這意味着在每一輪中,隨着通道狀態的進一步發展,雙方交 換新的承諾,交換用於之前承諾的撤銷密鑰,並簽署彼此的承諾交易。當他們接 受新的狀態時,他們通過給予對方必要的撤銷密鑰來懲罰任何作弊行爲,使先前 的狀態不可能再被使用。

我們來看一個它的工作例子。 Irene 的客戶之一希望向Hitesh的客戶發送2比特幣。要通過通道傳輸2比特幣, Hitesh 和 Irene 必須更新通道狀態以反映新的餘額。 他們將承諾一個新的狀態(狀態號 2),通道的 10 個比特幣分裂,7 個比特幣屬 於 Hitesh 和 3 個比特幣屬於Irene。爲了更新通道的狀態,他們將各自創建反映新 通道餘額的新承諾交易。

如上述內容所說,這些承諾交易是不對稱的,所以每一方所持的承諾交易都迫使 他們等待兌換。至關重要的是,在簽署新的承諾交易之前,他們必須首先交換撤 銷密鑰以使先前的承諾無效。在這種情況下,Hitesh 的利益與通道的真實狀態是 一致的,因此他沒有理由廣播先前的狀態。然而,對於 Irene 來說,狀態號1中留給她的餘額比狀態 2 中的更高。當 Irene 給予 Hitesh 她以前的承諾交易(狀態 號 1)的撤銷密鑰時,她實際上廢除了自己可以回滾通道狀態到前一狀態而從中 獲益的能力。因爲有了撤銷密鑰,Hitesh 可以毫不拖延地兌換先前承諾交易的兩 個輸出。也就是說一旦 Irene 廣播先前的狀態,Hitesh 可以行使其佔有所有輸出的權利。

重要的是,撤銷不會自動發生。雖然 Hitesh 有能力懲罰 Irene 的作弊行爲,但他 必須勤勉地觀察區塊鏈中作弊的跡象。如果他看到先前的承諾交易廣播,他有 1000 個區塊時間採取行動,並使用撤銷密鑰來阻止 Irene 的欺騙行爲並佔有所有 餘額也就是全部 10 比特幣來懲罰她。

帶有相對時間鎖(CSV)的不對稱可撤銷承諾是實現支付通道的更好方法,也是 區塊鏈技術非常重要的創新。通過這種結構,通道可以無限期地保持開放,並且 可以擁有數十億的中間承諾交易。在閃電網絡的原型實現中,承諾狀態由 48 位 索引識別,允許在任何單個通道中有超過 281 兆(2.8×10^14)個狀態轉換!

發佈了266 篇原創文章 · 獲贊 89 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章