Plasma白皮書(三) - 區塊鏈技術部落格
5. 多方的鏈下狀態
目標是構建一個方式,每個參與者可以使用區塊鏈的原生幣或代幣,不需要鏈上的狀態。Plasma開始模糊鏈上和鏈下的界限(例如,鏈上或鏈下的分片?(shards))。
在構建涉及多方的鏈下通道的努力中,有兩個常見問題。第一個問題是,當需要在整個系統中進行一個狀態更新時,需要在所有參與方間同步狀態變化(或否則失去全域性狀態實時性做為一種平衡),且要求所有參與方必須線上。第二個問題是新增或者移除參與方需要大量的鏈上更新,需要所有的參與方的新增與移除。
另一種可選的方案是構建一個機制,多方參與者在不需要主鏈狀態更新的情況下新增或移除節點,內部狀態更新也不需要所有參與方,僅當有關餘額變更或檢測到Byzantine行為時才需要同步狀態。
一種常見的構建方式是在子區塊鏈中,允許在根區塊鏈(如,以太坊)的智慧合約中,來代表自身餘額。子Plasma區塊鏈的最終區塊狀態由根鏈的智慧合約的餘額的代表和分配。這允許大家在子鏈中持有本地代幣,來代表在父區塊鏈中的餘額,且允許在爭議調解期後取款。
為達到這個目標,我們為賬本構建了一個UTXO(Unspent Transaction Output)模型。雖然這不是一個必須的要求,但通過這個推斷快速取款變得更容易。UTXO模型的原理,是可以很容易的表達一個狀態發生與否。這可以在一個梅克爾證明的樹字首中表示出來,也可通過點陣圖(bitmap)來進一步壓縮表示,同時這種資料結構也方便其它人解析。換句話說,根鏈中的賬戶持有智慧合約,但Plasma鏈維護了一個,在主鏈的賬戶中的餘額花費情況的一個UTXO的集合。對於那些沒有明顯的狀態轉換需要的子鏈,可以使用賬戶模型(account model)來應對更復雜和頻繁的狀態轉換,然而這也將更依賴於父區塊鏈的區塊空間可用性。
目前,大家可以推斷單個的區塊領導者如何選擇子Plasma鏈的區塊。我們可以將這個構建為一個Pos集合,或一個命名預置的n/m驗證器,然而在下述例子中,我將使用單一的命名驗證器來簡化說明。驗證者的角色是提議一個完成了交易排序的區塊。驗證者/提議者由父區塊鏈智慧合約中構建的欺詐證明所約束。如果傳播一個無效狀態志換的塊,所有其它接收到這個區塊的參與者可以提在父區塊鏈中提交一個梅克爾證明,無效的區塊將會被回滾並施以削減(獎勵?)的懲罰。
區塊也會傳播給想觀察區塊的參與方,包括那些持有餘額,或者想關注或強制執行單個Plasma鏈上運算。
維護離線狀態的存款只需要最低的複雜度,狀態轉換和取款將更為複雜。
5.1 欺詐證明(Fraud Proofs)
子鏈中的所有狀態,都通過欺詐證明強制執行,從而允許任何參與方檢驗無效區塊,推斷區塊資料的可用性。
然而,這個構建方案最大的難點在於,它不會明確保證資料/區塊的可用性。
在根鏈(比如,以太坊)上,當區塊資料可用時,存在一個欺詐證明的集合,保證所有的狀態轉移是有效的。對於複雜的計算,狀態轉換必須是梅克爾化的,以支援有效率的驗證。
另外,狀態轉換也可以通過zk-SNARKs/STARKs來強制執行,通過它保證了不恰當的退出(exit)是不可能的。一個zk-SNARKs的構建需要遞迴的SNARKs才能獲得最大功效,因此需要進一步的研究可行性。然而,這個系統被設計為不需要SNARKs也可以工作。
圖10:每個人都有1-4區塊的區塊資料。第4個區塊的提交的狀態轉換被證明是欺詐的,通過前一個塊的資料和第4個塊中的梅克爾證明。
欺詐證明保證了所有的狀態轉換是有效的。示例的欺詐證明是交易是否可花費的證明(檢驗在當前的UTXO中資金是否可用),狀態轉換的證明(包括檢查交易簽名看輸出是否可用,跨區塊的包含/排除,存款/取款證明)。一些更復雜的證明需要一個互動的遊戲。通常的構建是採用一種函式的方法來進行區塊校驗。如果大家用程式把這段共識在solidity中實現,用於校驗的區塊的梅克爾證明的函式方法,將會多一個額外的輸入引數,輸出將會返回校驗是否通過。人們可以簡單的複製共識校驗程式碼,以緊湊的梅克爾證明的形式來執行(這樣人們不用執行整個塊來生成欺詐證明)。
圖11:Alice有所有區塊的資料,所以在主鏈上提交了一個欺詐證明。第四個區塊從而變得無效並回滾。第4個區塊的提交者失去了在智慧合約中的押金從而得到了懲罰。當前的區塊是區塊3(藍色)。在某些設定的時間以後,區塊將確定下來,且不能再提交欺詐證明。人們應該通過完整的校驗區塊,來在沒有被證明是欺詐的區塊上建塊。
然而,為了構建最小的證明,所有的區塊必須提交當前狀態的梅克爾字首樹,輸出花費(outputs spent)的字首證明,交易的梅克爾樹,以及前一個被修改狀態的引用。
欺詐證明保證參與者合謀也不能在不受到懲罰的情況下建立欺詐的塊。當欺詐的塊被檢測到或者在主鏈上(或者父plasma鏈)被發現時,無效的塊將被回滾。這將鼓勵個人參與者有動力來反對Byzantine行為,這將解決在比特幣聯盟側鏈的狀態轉換漏洞。
結果是高度可擴充套件的狀態轉換能夠在plasma區塊鏈中進行,同時確保有權訪問塊資料的觀察者(observer)能夠證明(並因此阻止)無效狀態轉換。 換句話說,支付可以發生在這條鏈上,只需在根鏈上進行週期性的提交。
5.2 存款(Deposits)
來自主鏈的存款將直接傳送給主合約。合約有責任跟蹤當前的提交狀態,使用欺詐證明來懲罰無效的提交,以及執行取款(withdrawals)。由於子plasma區塊鏈是一個對主鏈的完整校驗者,提交的交易必須以二階段鎖定(two-phase lock-in)的方式來執行。
存款必須包括目標鏈的blockhash,從而來指定目標的子鏈,通過多步流程(multi-step process)來保證代幣不可被恢復來達成。
圖12:Alice有一個1ETH的賬戶。她想將之傳送到子Plasma鏈。她將它傳送到Plasma合約。
- 貨幣或代幣(如,ETH或ERC-20代幣)傳送到主鏈的Plasma合約。這些幣在某些設定的時間是可恢復的,以支援挑戰/回覆(challenge/response)。
- Plasma區塊鏈引入了一個即將到來的交易證明(incoming transaction proof)。此時,Plasma鏈承諾交易即將到來,當由存款者或者發起一個鎖定交易(lock-in transaction),或者產生一個花費的事件,前述的餘額變得可花費。當上述已經包括,區塊鏈承諾遵守提款請求。然而,目前還沒有確認存款人是否有足夠的資訊來產生欺詐證據,因此存款人尚未作出承諾。這個區塊鏈包括狀態樹,點陣圖(bitmap),和交易樹,以便有一個正常包含的緊湊證明。
- 存款者在子Plasma鏈上簽名一個交易,啟用交易,包括一個承諾,他已經在鏈提交的第二階段看到了這個區塊。這個階段的作用是存款人證明他們有足夠的資訊來提現資金。
在這些流程之後,鏈承諾會處理這些幣,並進行預留,以便取款可以得到證明。在第三階段中,使用者認證了他們可以取款的事實。
圖13:Alice現在在Plasma區塊鏈中有1ETH。她承諾他看見了資金且當前被鎖定了。資金由主鏈上的智慧合約持有,但賬本記錄在某個特定的Plasma區塊鏈上(於是,狀態轉換,比如,傳送資金到另一個智慧合約)可以在不需要大量的根鏈的消耗下發生。
如果存款者沒有通過第三階段,存款者可以在主鏈上進行取款。存款者提交一個未確認的取款請求,必須等待一些額外的非常長的時間,以便網路上的任何人能有機會生成欺詐證明,證明存款者登出並在Plasma區塊鏈上鎖定了資金。如果沒有證明,然後存款者可以取出他的未確認資金。這個取款需要一個比較大的主鏈上的押金來確保不會出現Byzantine行為。
5.3 大量的取款與點陣圖狀態(Mass Withdrawals and Bitmapped State)
整個系統首要的問題是不能驗證狀態。
為了能最大程度的壓縮交易的狀態,輸出可以選擇性的在一個位圖中表示。這對取款證明是有用的,因為在主鏈上執行的成本很高。這種結構的目標是允許在Plasma子鏈上持有少量餘額(譯者注:原因是一定的不安全性?)。整個餘額由主鏈的合約完全控制,但完整的賬本資訊並不在區塊鏈上。首要被解決的攻擊是持有無效的塊(且提交到了根鏈上)。當系統發現了無效的狀態轉換時,參與者會進行一個大量的交易的退出。
點陣圖這種結構,取款中將包括想退出的交易簽名的點陣圖。一個遊戲/協議會由智慧合約強制執行來保證資訊的正確。點陣圖資訊保證每個人都能推斷出輸出的是什麼。
作為點陣圖,狀態以UTXO(unspent transaction output)的資料結構有一定的必要性,以達到小額賬戶最大的可用性。花費可以被緊湊的證明,同時可以清晰的強制執行一大組狀態轉換。在預定義的某個清算時間後,這些位元組位還可以被重用。
整個漸進的,成本高保證性強,成本低保證性弱:
- 賬本狀態在主鏈上
- 賬本狀態在Plasma,經濟上可行,用單個鏈上
- 賬本狀態在Plasma,經濟上可行,用點陣圖(1-2個位的成本)
- 賬本狀態在Plasma,經濟上不可行,在主鏈上用點陣圖來保證強制執行。1-2個位元組位的在大量取款的情況下成本太高。
對於那些可以在主鏈上強制執行的餘額來說,執行一個UTXO的點陣圖格式是沒有必要的。然而,對於那些持有餘額的,如果1-2位的在主鏈上的交易費/gas足夠的低,強制執行也是可行的。
對於第四種類型(在大量取款情況下,1-2位元組的鏈上成本較高),整個系統仍設計為有一定的擴充套件性(儘管是一些假設,但具名實體將會是可靠的)。本論文的後續章節將描述一個多層級的區塊鏈結構,來建立許多分支,其中大家可以大量的經濟的取款。此外,如果第四類交易的總價值顯著低於代幣價值,那麼從理論上來說,攻擊這些餘額的成本可能太昂貴,因為代幣持有者還將遭受聲譽損害。
5.4 狀態轉換
預設情況下,Plasma鏈上的狀態轉換,與存款的多階段流程類似。都是為了保證使用者有可用的資訊來提供給狀態轉換。然而,與存款結構不同的是,一旦一個交易進行了簽名且被包含進了一個區塊,需要參與一個提交。出於這個原因,狀態轉換需要包括簽名,狀態更新(如,目標,數量,代幣,其它關聯的狀態資料),其它一些過期時間設定,如存活時間(TTL,time to live),以及提交到某個特定的區塊。該TTL,雖然不是必須的,應該低於構建退出證明的時間,來保證相應的退出情況是可知的。預簽名的交易,當然不能包括一個TTL。假設這個構建存在缺陷,因為已經存在關於深度重組的退出活動的假設。區塊的提交是由Plasma鏈的花費者(spender),這個實體來進行的提交,它宣告觀察到鏈達到一個狀態,必須在區塊後的輸出中花費真正發生後,可以強制執行證明。
多階段的提交按如下的方式發生以達到快速的確定性:
- Alice希望在Plasma鏈上轉移他的資金給Bob(不需要將完整的記錄提交到區塊鏈上)。她建立了一個交易,在Plasma鏈上花費她的支出,簽名,廣播這個交易。
- 這個交易被Plasma鏈的驗證者校驗後,頭部的資訊會作為區塊的一部分放入父Plasma鏈或者主鏈,最終會被提交併打包到主鏈中。
- Alice和Bob觀察到了這個交易,簽名確認他們看到了這個交易和區塊。確認需要簽名同時被包含進另一個Plasma區塊中。
對於不需要很快達到確定性的情況下,只需要第一步發生:
當確認發生後,交易可以被認為已經確定。第三步存在的原因是為了保證區塊的可用性,通過參與者(Alice和Bob)來保證。第三步並不是必須的,但沒有它會顯著的延遲確定。原理是,一個交易不能,在區塊校驗,由交易所有有關的參與方證明資訊可用前,被視為達到確定狀態。
如果在第一步後,發生區塊扣留,Alice不清楚她的交易花費輸出是否有效。如果一個交易已經被包含進一個區塊(無論發生區塊扣留與否),如果第三步還沒有完成,它都將被視為未確認。因此,如果她在提交之前沒有簽署提交,那麼Alice仍然可以撤回這些資金。前提是她在區塊最終確定前,在根/母區塊鏈提交了撤消訊息。Alice不能在區塊確定(finalization)後進行取款,區塊將假設已傳送給Bob。如果區塊在確定前被扣留了(在步驟1和2時),Alice和/或Bob觀察到,Alice可以取出她還未確定(finalization)的資金。如果區塊在步驟2之後,但在步驟3之前發生的扣留(withhold),因此假設Bob有足夠的資訊來取款,但由於Alice或Bob都沒有完整的提交這個支付,故交易被視為不完整的,這取決於任何一方在理論上可獲得的資訊可用性。如果雙方都在第3步中進行了確認,那麼它將被假設真正意義上的確定了(finalization)。當這步發生後,特別是當簽名可在鏈上被觀察到時,付款合同雜湊(pay-to-contract-hash)將強制執行。當某方拒絕簽名,或區塊被扣留時,則以贖回證明為條件。因為所有狀態將最終通過梅克爾證明提交到鏈,因此會減少一些對付款合同雜湊(pay-to-contract-hash)的依賴,因為支付在確定(finalization)後可證明且可強制執行。
需要注意的是步驟3可以基於智慧合約而不是雙方的簽名,如,狀態可以通過之前預設的HTLC的釋放。這將允許多鏈或多交易的原子性。合約的建立複雜度將上升,如果需要這樣的特性,可以通過更高級別的語言/工具來解決這個問題。
5.5 週期性提交到主鏈(Periodic Commitments to the Root Chain)
Plasma鏈必須能建立區塊鏈的順序。在Plasma鏈中,區塊內有順序,但區塊沒有自證順序。作為一個結果,有必要在主鏈上建立一個提交。Plasma鏈釋出了它的區塊頭到主鏈上,區塊頭由欺詐證明強制執行。如果釋出的欺詐頭包含其他人的資料可用性,則任何其他參與者都可以釋出欺詐證明,然後提交和區塊將會回滾,並對釋出商進行處罰。
這些提交在後續支援沒有模稜兩可的真正的順序。 如果試圖模糊,將有足夠的欺詐證據,對這樣的行為進行懲罰。 區塊在一段時間之後進行確定態,並且因此不能重新排序,也讓根鏈達到足夠的確定態。
5.6 取款(Withdrawals)
Plasma允許從主鏈存入原生貨幣或者代幣(如,ETH和ERC20代幣)。它額外允許了在Plasma鏈間的狀態轉換,其狀態由根區塊鏈強制執行,前提是存在資訊可用性。當發生資訊可用性失敗時,需要在Plasma鏈上進行大量的退出(exit)。最後,也可以在Plasma鏈上進行一個簡單的取款。
然而,在常規的情況下,大家可以進行一個簡單的取款。
5.6.1 簡單取款(Simple Withdrawal)
簡單取款,只允許已經提交到主鏈後才能取款,最終在Plasma鏈上完成確定(finalize)。
我們已經描述了存款的設計,通過緊湊的格式表示賬本狀態和狀態轉換。直到這個階段,除了欺詐證明外,主鏈上沒有當前Plasma鏈的賬本資訊。在取款時,儘管如此,需要一種特定的證明,證明資金由Plasma鏈持有且當前存 在。
取款是最最關鍵的部分,因為這將保證主鏈與子Plasma鏈間代幣的可互換性。如果人們可以存款到Plasma鏈上,進行狀態轉換(如,向其它方轉移代幣),其它方還能取現,那麼代幣的價值將與主鏈的代幣價值一致。在某些情況下,Plasma鏈上的資金更為有用,因為它支援更高的交易容量,同時交易安全最終也是由主鏈保證。
對於一個簡單的取款,所有的資金需要一個很大的押金,所有的取款請求必須包括一個很大的押金作為欺詐證明。如果當前的區塊資料是可用的,那麼第三方在很低成本情況下提供這個證明是可能的,因為第三方的服務可以驗證Plasma區塊鏈的存活狀態,確保取款證明是有效的。
Plasma鏈的所有參與方必須驗證所有的父Plasma鏈和根鏈,來確保在更新狀態時,對於某個特定的賬戶和輸出沒有進行中的取款。如果取款在進行中,後續的區塊不能使用硬幣/代幣,這裡任何的byzantine行為都違反了共識,並且受到根區塊鏈中Plasma合約的欺詐證明,處罰和封鎖逆轉的影響。
一個取款有如下步驟:
- 一個簽名的取款交易被提交到根鏈或父Plasma鏈。取款的數量必須是完整的輸出(不是部分的取款)。取款也可以有多個輸出,但他們必須在同一個Plasma鏈中。輸出(output)的點陣圖位置將會作為取款的一部分被公開。另還需要一個額外的押金來懲罰不正確的取款請求。
- 存在一個預定義超時週期用於調解糾紛。這與閃電網路的調解期類似。在這種情況下,如果任何人可以證明在鏈中的一個輸出(output)已經被花費了(大多數情況下,在主鏈上),取款將被取消,取款請求的押金將被沒收。任何人發現了都可以進行調解。如果提供了關於花費的欺詐證明,將失去押金,同時取款也將取消。
- 存在第二個延遲來等待任何由較低的區塊確認高度的取款請求。這將強制在某個特定的Plasma鏈或根鏈的的順序取款。
- 如果Plasma之前定義的調整期已過,在根鏈和父鏈上並沒有提供人提供欺詐證明,那我們可以假設取款是正常的,取款者可以在根鏈或父鏈上贖回資金。取款將由舊到新以UTXO/account的年齡來順序執行。
需要注意的是,如果經濟上可行的話,可以在發生區塊扣留的Plasms鏈上進行取款。
欺詐證明僅僅需要在網路上的任何人證明在同一個輸出(output)存在一個雙花簽名,可以被非常簡潔的證明。對於閃電網路或其它一些狀態通道,一個額外的需要是必須證明一個更高的nonce。對於通道,如果取款嘗試一個較低的nonce,資金將仍保留在Plasma鏈中,對於能提供正確簽名的取款可用。其它的構建也是可能的,但設計可能需要作為建立Plasma鏈的智慧合約欺詐證明的一部分進行預載入。
因為常規的取款慢,且成本很高,它將可能被合併為一個單一的取款,或者其它人也希望向其它鏈交換幣使用閃電網路或原子交換(atomic swap)。
5.6.2 快速取款(Fast withdrawal)
快速取款與簡單取款的構建方式類似,但資金會發送到一個合約以進行原子交換(atomic swap)。根/父鏈上被交換的資金,有一個資金的低時間鎖(low timelock for funds)和退出Plasma鏈的高時間鎖(high timelock)。
快速取款並不是實時的。然而,只要保證Plasma鏈提供交易的確定性,即不是Byzantine的(Byzantine行為包括區塊扣留等情況),它可以顯著減少取款的時間。因為這個原因,快速取款不能在區塊扣留攻擊時使用,應該用一個慢的批量取款請求代替。
快速取款有如下幾個步驟組成:
- Alice想取款到根鏈,但是不想等。她願意為此付出時間價值(time-value)。Larry(流動性供應商)願意提供這個服務。Alice與Larry協調一致在根鏈上進行一個取款。我們假設Plasma鏈當前是non-Byzantine的。
- 資金被鎖定在Plasma特定輸出的某個合約上。這與普通的轉賬的方式有些類似,雙方會廣播一個交易,然後後一個提交承諾自己在Plasma鏈上看到了交易。合約的條款是如果一個合約在根鏈上廣播了且確定(finalized),那麼支付就可以在Plasma鏈上進行。如果不能提供交易的證明,Alice就可以贖回自己的資金。也可以通過讓Alice生成一個preimage來構建一個HTLC,僅僅在她認為可以接受並且資金被轉移時才釋放它。
- 在上述的Plasma塊確定(finalized)後,Larry非常有信心他可以在合同條件滿足時贖回自己的資金,Larrry建立了一個鏈上合約,向Alice允許支付指定數額(數額是應收減去整個服務的收費)。
在我們的例子中,流動性提供商(Liquidity Provider)Larry必須線上且需要在接受交換(swap)前完整校驗Plasma區塊鏈的正確性。如果Larry不能完整的校驗Plasma鏈(或者不熟悉主鏈中定義的欺詐證明智慧合約),他不應該進行取款。如果Larry不想要鏈上的資金,而是需要根鏈上的資金,Larry可以在這一切完成後,發起一個取款,或者進行一個原子交換(atomic swap)並作為取款的一部分。
在許多情況下,在Plasma鏈上與流動性供應商進行網路結算的成本效率更高。轉移可以在Plasma鏈上通過閃電網路或者原子交換(atomic swaps)來支援快速的確定性。
因為這是一個原子的跨鏈交換,Alice和Larrry沒有給予彼此資金的保管信託。Alice在根鏈/主鏈上有資金,Larrry在稍後將能完全訪問他們。根鏈提供了低成本的區塊可用性和保證確定性的非Byzantine行為,Larrry可以有信心相信他能得到資金,即使Larry自身並不信任Plasma鏈。
5.7 對抗式大量取款(Adversarial Mass Withdrawal)
對抗式大量取款交易存在於plasma框架下,它不是做為協議必須的,它主要設計來解決在發生區塊扣留(block withholding)時狀態的經濟健壯性(低gas/手續費)。如果某人希望使用Plasma鏈中的賬戶狀態,那麼它也將依賴於其它的一些設計,比如分層的支付(payments)。額外的,需要注意的是這裡使用了UTXO模型,但這個系統僅當主鏈使用賬戶模型時,才會良好的工作。更進一步來說,如果大量取款不是必須的,或者不是需要的特性,那麼在Plasma鏈中使用賬戶模型來持有資金是可能的,同時我們只允許簡單取款(simple withdrawals,使用一個遞增的序號)。
因為Plasma這個設計主要考慮的是關於在區塊扣留攻擊時防止欺詐(以及缺乏資料可用性後的其它影響),在檢測到資料不可用情況時需要減少其影響。當Plasma鏈上的使用者檢測到區塊資料不可用時,對於參與者來說,需要在某個時間之前緊急撤出。當鏈未能及時退出時,結果與閃電網路類似不對不正確的取款提出異議。這個機制是保證Plasma鏈正確性的關鍵。 Plasma依賴於一個事實,需要使用者通過區塊扣留來檢測Byzantine行為,使用者也有責任及時的退出不正確的Plasma鏈。 這裡的原因是,在主鏈上探測某個區塊是否處於區塊扣留的狀態是不可能的(要麼使用者斷言他從來沒有接收到某個區塊,要麼Plasma鏈可以斷言使用者拒絕承認區塊的可用性,使用者在說謊)。因此,這種傳統的方式,用斷言資料不可用的成本來實現了鏈上當前狀態的透明化(這也正是閃電網路正在做的)。然而,對於非常大的區塊和狀態轉換,這將會變得異常昂貴,Plasma並沒有使用這種構建方式,因為它對誰需要對這個成本負責說得不清楚。相反,Plasma鏈假設如果使用者相信正在對抗區塊扣留,將會影響到未來執行強制狀態轉換的能力,那麼使用者應該簡單的儘可能快的從這個Plasma鏈上退出(exit)。
因此,這就是對抗性批量取款的定義範圍。如果區塊不可用,那麼就可以假設Plasma鏈處於對抗或Byzantine。批量退出(mass exit)保證了Plasma鏈的Byzantine行為在某個時間和鏈暫停期間,不會影響大家的資金。
它也假設額外的在未來使用SNARKs來提升安全性的可能,設計方案還在公開討論中。整體結構並不依賴SNARKs以進行取款,因為它需要主鏈上的觀察者(observers)週期性的線上,然而通過在Plasma鏈內的強制狀態轉換,攻擊或者Byzantine Plasma鏈來執行區塊扣留,從而對那麼不周期性的監督Plasma鏈的主鏈實現資金竊取能力,可以通過SNARKs的安全特性來大大減少。這種情況下,將需要SNARKs證明來實現狀態轉換、取款,以進一步的提升保障。然而,Plasma的目標是不依賴於SNARKs就可以提供正確的狀態轉換行為,主要是通過使用者關注(observe)鏈,智慧合約保證機制的正確性,且提供在主鏈取款的能力。類似的理念也可以用於閃電網路中保證當前狀態的正確性上,通過離線的狀態僅由支援智慧合約的第三方提交的遞迴SNARKs證明來保證。
Plasma鏈可以通過不同層次的保障來實現安全,第一環是是元素/硬體,第二環是SNARKs/STARKs,最後一環才是鏈上的互動遊戲。第一環有可能失敗,第二環通過密碼學加密,最後一環是公開的透明互動遊戲。Plasma主要作為最後一環的一個解決方案。
一個批量取款,是一個互動遊戲,其中退出(exit)的實現有如下步驟:
- Alice與其它人協調一致以實現在Plasma鏈上的批量退出。許多批量退出可以一次性發生,但他們不能包含重複的取款。如果發生了這樣的情況,批量退出會更新餘額,同時它們會順序的執行,那個重複的使用者將會受到懲罰。所有參與方應該一致的傳送他們的資金到另一個Plasma鏈。
- Pat,退出的執行者,打算來組織這次退出。Pat協調資金要傳送到的目標鏈,且自動承諾承認資金在批量退出後,在新鏈上的資金可用性。
- Pat驗證了到資料還可用時的鏈資料。時機點必須是糾紛調解接受期或Plasma鏈的確定階段(與主鏈的確定性無關)且符合智慧合約的條款。Pat在新鏈上向所有參與方展示正新增到目標賬本。Pat持有所有希望退出的參與者的簽名(包括我們例子中的,Alice)。Pat校驗所有參與方直到資料可用高位時是否有許可權退出。Pat建立一個帶有大量押金的退出交易(正如根鏈智慧合約中定義的一樣)。Pat也許會收取所有參與方的退出手續費。
- 使用者在下載所有簽名後對這個大量取款再籤一次名。這將允許使用者知道Pat不會受到懲罰,同時現在資金也被鎖定了。那些沒有進行第二次簽名的使用者不會包含他們的位。
- Pat然後會關注當前是否有其它退出交易,同時移除那些可能的重複,然後簽名這個退出交易,廣播交易到根鏈或者父Plasma鏈。當發生重複時,父鏈會按順序執行(根鏈有最高優先執行權)。早期的交易的優先順序較高。廣播批量退出發起交易(MEIT,mass exit intiation transaction),Pat正在證明他以下資訊的有效性:區塊正確性,區塊高度的UTXO集合,非最終確定(finalize),UTXO的點陣圖對映,提交的金額(為了快速證明的梅克爾求和樹),Alice和其它人的簽名。作為MEIT的一部分,Pat還需要公佈退出狀態的完整點陣圖。這樣其它觀察根/父鏈的參與者可以驗證正在退出的,並挑戰那些不正確的。MEIT的確定性需要很長時間,也許會花費數週,由此MEIT是最後一筆交易(未來我們可以通過SNARKs來加速)。
- 如果出現重複的取款,Pat可以一個較短的寬限期內更新點陣圖和餘額。
- 任何網路中的參與者可以通過DMET(Disputed Mass-Exit Transaction)挑戰(challenge)MEIT中的資料。然而,因為Pat不可能知道未來的某個塊替換了輸出,如果資金在未來被花費了,Pat不會受到懲罰(但在未來花費這筆資金的使用者會)。如果出現了挑戰,資金將被凍結直到挑戰結束。挑戰必須發生在早期的寬限期,如果一個挑戰是有效的,那麼Pat必須更新取款的餘額。(譯者注:會不會一直有挑戰,導致整個取款一直延遲)
- 如果沒有挑戰,那麼在前述的MEIT的確定時間後,使用者將收到他們的資金。
Plasma鏈進入確定狀態的這個時間視窗,是為了保證一個人最少的週期性的觀察鏈的時間。在確定的時間視窗過去後,將會假設所有人在那個時間視窗結束前都已經驗證了Plasma鏈的區塊資料的可用性。
實際上,當Pat建立MEIT時,Pat證明了在某個特定的區塊高度,某些記錄的正確性,同時也證明他有輸出的取款的簽名。在證明階段後,Pat並不會因為在輸出中有雙花的情況而受到懲罰(因為區塊扣留不應該懲罰Pat)。
5.7.1 批量取款糾紛:不正確的取款的挑戰
當發生使用者,比如,Alice發現Pat未經其同意就進行一個批量取款時,她可以通過建立一個挑戰來作廢這次取款。
- Alice在Pat的批量取款中發現了她自己在Plasma鏈中的輸出(output),比如其中的點陣圖欄位是開啟的狀態。Alice廣播一個帶有大量押金的挑戰。押金保證了不會隨便產生挑戰,她在區塊鏈上廣播這個資訊。
- 如果挑戰在一個設定的時間裡沒有被質疑,Alice將會得到押金的退款,而且整個MEIT將會被取消。如果挑戰被Pat或其它任何方通過欺詐證明為無效,MEIT仍舊有效,同時她的押金將會沒收。
參與者需要確定簽名可用,因為在MEIT中有第二個階段(第四步),因此當挑戰不正確時,他們有足夠的資訊來質疑挑戰。我們通過激勵來阻止產生錯誤的挑戰,因為他們將因為區塊的正常可用和根鏈的非中心化而受到懲罰。
5.7.2 批量退出交易質疑(Disputed Mass-Exit Transaction)
當發生某個輸出(output)在MEIT後的某個區塊被花費時,Pat將不可能知道這一切,所以他將不會受到懲罰,因為人們不能證明區塊扣留。
將會存在多個質疑者來質疑同一個點陣圖組,但他們都必須附加一個較大的押金。
任何的參與方都可以通過一個大的押金來說明發現的點陣圖/範圍的重複消費。這個較大的押金證明了一個幣在稍後的某個塊中被消費,並提交到區塊頭中。
然而,質疑的處理過程不能簡潔的進行證明,所以另一個迭代的挑戰變為可能,一個針對批量退出交易質疑的挑戰(CDMET,Challenge on the Disputed Mass-Exit Transaction)。
質疑的挑戰流程如下:
- Alice注意到某些人(如,鏈的操作者在進行區塊扣留)正試圖質疑她參與中的某個批量退出。她提交一個附帶有大量押金的針對質疑的挑戰,來證明挑戰的提出者不能提供一個有效的花費。
- 質疑的提交者必須在某個時間內對挑戰進行迴應。如果提交者不能產生一個花費的證明,本質是提供一個在後續交易中是否發生了的簽名,那麼Alice就被平反了,然後整個糾紛將被取消(這就是為什麼允許重複的質疑)。如果提交者證明了幣被花費,那麼Alice將失去她的押金,質疑而且會將繼續。
5.8 回收UTXOs
當一個輸出確定(finalized)後,我們將可能重用UTXO點陣圖。
5.9 總結
作為批量取款遊戲的結果,對於許多參與者取款,最樂觀情形下,我們可能只需要為每個取款佔用1-2位元組位的空間來完成批量取款。
批量退出在發生區塊扣留時是必須的。然而,這也仍是非常高成本的。為此,我們仍需其它的解決策略來不加重主鏈的負擔。
這個結構允許許多參與者在他們的子鏈中持有資金,如果區塊資訊可用通過欺詐證明能校驗有效性,狀態轉換可以發生(如,支付),取款可用,批量退出(會有一些延遲),這些都是在發生區塊扣留時可用的。
感謝您的支援
處於某些特定的環境下,可以看到評論框,歡迎留言交流 _ 。