就像plasma-utils架構一樣:
請注意,inclusionProof是一個可變長度陣列,其大小取決於樹的深度。
證明步驟(Proof steps)
從存款開始,驗證過程的核心是將每個證明元素應用於當前“已驗證”狀態。如果任何證明元素沒有導致有效的狀態轉換,我們必須拒絕證明。
應用每個證明元素的過程是公開的; 我們只是根據合同的監管規則要求在每個區塊應用交易。
快照物件(Snapshot object)
我們跟蹤歷史擁有範圍的方式稱為快照。
快照代表了區塊中範圍的經過驗證的所有者:
存款記錄(Deposit records)
每個收到的範圍必須來自相應的存款。
存款記錄由其令牌、開始、結束、存款人和塊號組成。
對於每個存款記錄,驗證者必須仔細檢查以太坊以確認所聲稱的存款確實發生,並且在此期間沒有發生退出。
驗證快照陣列將初始化為這些儲存,每個snapshot.owner都是儲存者。
接下來,我們應用所有給定的事務證明,相應地更新已驗證的快照。對於每個事務和相應的TransactionProof,驗證程式執行以下步驟:
1. 驗證給定的證明元素是否有效。如果沒有,提示錯誤
2. 對於交易中的每次轉移,請執行以下操作:
a.“拆分”在transfer.typedstart、transfer.typend、implicitstart和implicitend上更新的任何快照。
b.增加所有結果驗證快照的.block編號,這些快照的block編號等於transaction.block number-1;
c.對於在transfer.start和transfer.end之間的每個拆分快照:
i.驗證snapshot.owner==transfer.from。如果沒有,丟擲一個錯誤。
ii.設定snapshot.owner=transfer.sender。
TransactionProof必須應用於遞增的BlockNumber中。
一旦該操作被遞迴地應用於所有交易證明,客戶可以透過搜尋已驗證快照中的所有元素(塊號等於當前Plasma塊,所有者等於其地址)來檢查自己現在擁有的新硬幣。
交易證明有效性(TransactionProof Validity)
上述步驟1中的交易有效性檢查等同於檢查智慧合約的有效性條件。基於上面的和樹規範的基本有效性檢查如下:
1.檢查事務編碼是否格式正確。
2.對於每次轉移和相應的轉移證明:
a.檢查簽名是否解析為其transfer.sender地址
b.驗證inclusionproof的根是否等於該Plasma塊的根雜湊,以及leafindex定義的二進位制路徑。
c.計算分支的implicitstart和implicitend,並驗證implicitstart<=transfer.start<transfer.end<=implicitend
來源:區塊鏈研究實驗室
作者 : 鏈三豐