State-Channels
哪個狀態通道狀態是誠實的?
如果 Alice 和 Bob 互相打開一個狀態通道,例如支付通道,狀態如下:
Alice initial balance: 1ETH Bob initial balance: 1ETH
Bob sends Alice 0.20ETH Alice sends Bob 0.25ETH Bob sends Alice 0.30ETH Final state: Bob=0.75ETH , Alice=1.25ETH
Alice 試圖最終確定通道並在主鏈上進行結算,但是 Bob(惡意行為者)提出了一個替代的最終確定方法,如下所示:
Bob sends Alice 0.20ETH Alice sends Bob 0.25ETH Bob sends Alice 0.01ETH Bob sends Alice 0.01ETH Final state: Bob=1.03ETH , Alice=0.97ETH
在這種情況下,合約如何能夠確定哪個是惡意行為者?
我能想到的唯一解決方案是,如果 Alice 希望將狀態發佈到區塊鏈,最終簽名必須來自 Bob,反之亦然,但我找不到關於這個問題的太多文件,所以我不確定是否解決方案在某些情況下是否失敗。
這通常通過要求交易雙方簽署來解決。這種方式很明顯雙方都同意,並且任何一方都不能改變通道的商定狀態。
但是,這種方法並不能避免惡意行為者試圖通過使用較早狀態關閉通道來繞過必須支付以後的交易。在您的範例中,如果 Bob 使用第二次交易後同意的狀態關閉通道,則會發生這種情況。
為了避免這種情況,可以向每個狀態添加一個隨機數(嚴格遞增的數字)。如果其中一方想要關閉通道,通道會進入結算狀態一段時間,這使另一方有機會提供更高隨機數的狀態。
在我們的範例中,在 Bob 請求關閉具有第二次交易後狀態的通道後,Alice 將提供第三次交易後的狀態,該狀態將用於關閉具有公平狀態的通道。