国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

深入理解Plasma(三)Plasma MVP

mmy123456 / 831人閱讀

摘要:合約會處理由子鏈提交的區塊,并且將區塊的哈希值存在主鏈上。負責處理所有子鏈上發生的交易,將其打包成區塊存儲在子鏈上,并且周期性地向合約提交區塊,將子鏈上的狀態區塊的哈希值提交到主鏈共識。

本文首發于深入淺出區塊鏈社區
原文鏈接:深入理解Plasma(三)Plasma MVP原文已更新,請讀者前往原文閱讀

這一系列文章將圍繞以太坊的二層擴容框架 Plasma,介紹其基本運行原理,具體操作細節,安全性討論以及未來研究方向等。本篇文章主要介紹 Plasma 的一個最小實現 Plasma MVP(Minima Viable Plasma)。

在上一篇文章中我們已經理解了 Plasma 中的一些關鍵操作,但是 Plasma 是一套框架,如果脫離了實際的應用,仍然很難徹底理解它。因此本篇將詳細介紹 Plama 的第一個項目 Plasma MVP(Minimal Viable Plasma),即在 Plasma 框架下的最基礎的實現。Plasma MVP 是 Vitalic 和他的團隊在 2018 年初提出的基于 UTXO 模型實現的 Plasma 設計標準[[1]](https://ethresear.ch/t/minima...,它以最簡單的方式實現了鏈下交易,但無法支持復雜的計算,例如腳本(Script)和智能合約。在閱讀下面的內容之前,請確保已經理解了這個系列之前的文章。

整個 Plasma MVP 的生命周期可以通過下面這幅圖表現出來:

Plasma 合約

首先需要將 Plasma 合約部署到主鏈(以太坊)上作為主鏈和子鏈溝通的媒介。Plasma 合約會處理由子鏈提交的區塊,并且將區塊的哈希值存在主鏈上。除此之外,還會處理用戶的存款(deposit)、取款(withdrawal/exit)以及爭議(challenge)操作。

Plasma 合約中主要包括的數據結構有:

Owner:合約的擁有者(即部署合約交易的發送者)的地址,即部署合約交易的發送者;

Plasma 區塊列表:每個 Plasma 區塊中存儲了(1)區塊的 Merkle root(2)區塊提交的時間;

退出列表:即提交了退出申請的列表,每個退出申請存儲了(1)申請者的地址(2)申請退出的 UTXO 的位置。

Plasma 合約中主要包括的函數有:

submitBlock(bytes32 root):向主鏈提交一個區塊,僅僅提交區塊中所有交易的 Merkle root;

deposit():生成一個只包含一個交易的區塊,這個交易中包含與 msg.value 值相等的 UTXO;

startExit():執行給定 UTXO 的退出操作;

challengeExit():向某個正在執行的退出提出爭議。

Operator

在前面的文章中我們已經知道 Plasma 子鏈是一個獨立的區塊鏈,那么也就有獨立的共識機制。在 Plasma MVP 中采用的共識機制就是 PoA(Proof of Authority),即參與共識的只有唯一一個礦工,稱為 Operator。Operator 負責處理所有子鏈上發生的交易,將其打包成區塊存儲在子鏈上,并且周期性地向 Plasma 合約提交區塊,將子鏈上的狀態(區塊的哈希值)提交到主鏈共識。那么,既然 Operator 是唯一的礦工,這不就意味著 Plasma 違背了去中心化的初衷了嗎?其實,這是去中心化向執行效率的妥協。在之前的文章中也提到過,Plasma 的安全基礎依賴于底層的區塊鏈,只要底層的區塊鏈能夠保證安全,那么在 Plasma 子鏈上發生的最差結果也只是迫使用戶退出子鏈,而不會造成資產損失。

Operator 可以采用最簡單的 REST API 方式實現,子鏈中的用戶可以通過調用簡單的 API 獲取到子鏈中區塊的數據。

存款(deposit)

用戶 Alice 通過存款(deposit)操作向 Plasma 合約發送帶有一定數額的以太幣或 ERC20 token 加入 Plasma Chain,這時 Plasma 合約會執行 deposit() 函數,生成一個只包含一個交易的區塊,這個交易的 UTXO 記錄了 Alice 從主鏈轉移到子鏈的數額。當這個區塊被主鏈確認后,Alice 就可以使用新生成的 UTXO 向其它用戶發送交易了。

交易(transaction)

在 Plasma MVP 中,所有用戶發送的交易都是直接發送給 Operator,當積累了一定數量的交易后,由 Operator 將交易打包成區塊。這里需要注意的是,由于 Plasma MVP 采用的是 UTXO 模型,所以即使交易的收款方不存在,交易也是成立的。

在子鏈上 Alice 向 Bob 發送一個交易的流程如下:

Alice 首先需要得到 Bob 在子鏈上的地址;

Alice 將一個或多個 UTXO 作為輸入構造交易發送到 Bob 的地址,并對交易簽名;

等待該交易被打包到區塊中;

Alice 向 Bob 發送確認消息,并且使用相同的私鑰簽名。

生成區塊

在 Plasma MVP 中,一個 Plasma 區塊產生的情況只有兩種:一種是 Operator 打包生成區塊,另外一種是當用戶執行 deposit 操作時,由 Plasma 合約直接生成一個只包含一個交易的區塊。

監視子鏈

為了保證子鏈上資產的安全,用戶需要周期性地檢查子鏈上的數據,保證沒有惡意交易產生。用戶需要運行一種自動化的軟件(例如錢包),每隔一段時間下載子鏈中的區塊數據,檢查每個區塊中的交易,如果有惡意交易產生,立即退出子鏈。

取款/退出(withdrawal/exit)

當 Alice 想要退出子鏈時,需要向 Plasma 合約發送一個 exit 交易,申請中需要包含(1)所要退出的 UTXO 的位置,包括區塊號(blknum)、區塊內交易號(txindex)以及交易內輸出號(outindex)(2)包含該 UTXO 的交易(3)該交易的 Merkle proof(4)用于生成該 UTXO 所涉及的之前一系列交易的確認簽名。除此之外,exit 交易中還要包含“退出押金(exit bond)”。如果這個 exit 被 challenge 成功,那么取款的操作將被取消,而且退出押金將被發送給提出 challenge 的用戶。

之后這個申請會被放入一個優先隊列中,通過這個公式計算優先級:

Priority = blknum  1000000000 + txindex  10000 + oindex

之所以采用這種優先隊列的方式處理取款順序的原因是保證舊的 UTXO 總能優先于新的 UTXO 被取出。也就是說,當有惡意交易(例如雙花等)產生時,所有在惡意交易發生之前的交易都可以被優先取出。那么如何解決在惡意交易之后被確認的交易的取款問題呢?Plasma MVP 采用了“確認簽名(Confirmation Signatures)”的機制,在下一小節我們將介紹這一機制是如何工作的。

確認簽名(Confirmation Signatures)

在 Plasma MVP 中,用戶的退出順序以所要退出的 UTXO 所在的交易的位置為準。假如 operator 作惡,在一個合法的交易之前插入一個非法的交易,那么當用戶執行取款時,由于非法交易可以先被取出,因此當執行到該用戶的交易時,可能 Plasma 合約中的資產已經被取空。為了解決這個問題,Plasma MVP 采用了“確認簽名”機制,例如當 Alice 產生一個交易時,她首先會對交易簽名。當該交易被打包入區塊后,Alice 還需要對該交易進行一次簽名,即“確認簽名”。

引入確認簽名機制后,當 Alice 發現在一個區塊中自己的合法交易之前存在非法交易時,可以拒絕對自己的交易進行“確認簽名”,同時申請取款。這樣可以使得當前的交易失效,保證自己之前“確認簽名”后的交易可以優先于非法交易之前取出。

這種確認簽名機制極大地破壞了用戶體驗,用戶每產生一個交易都要經歷簽名->等待確認->確認簽名。而且由于確認簽名也需要占據 Plasma 區塊的空間,因此也降低了子鏈的可擴展性。為了解決這個問題,Plasma 的研究人員提出了擴展版本 More Viable Plasma 移除了確認簽名的要求[[2]](https://ethresear.ch/t/more-v...。

爭議(Challenge)

每個取款操作都會經歷一個爭議期。例如在 Alice 的某個 UTXO 退出子鏈的過程中,如果 Bob 在爭議期內發現有惡意行為發生,他可以提出一個爭議(challenge)。一個爭議需要給出針對的 UTXO 的位置,以及該 UTXO 被花費的證明,即該 UTXO 已經存在于某個交易中,且這個交易已經被打包到區塊。

合約通過調用 challengeExit() 函數執行一個爭議,爭議成功后會取消正在執行的取款操作,并將提交取款申請所凍結的押金發送給 Bob。

攻擊場景

在 Plasma 子鏈中主要存在兩種攻擊場景:

Alice 試圖忽視在子鏈中轉移給 Bob 的資產,使用最初加入 Plasma 子鏈時的交易證明向主鏈提出取款申請。

Operator 生成一個惡意交易,占有其他用戶的資產,并且嘗試退出子鏈。

下面對這兩個攻擊場景進行分析,觀察 Plasma MVP 如何保證資產的安全性:

場景1

Alice 使用最初加入子鏈時生成的交易作為證據向主鏈提出取款申請;

Bob(或者其他任意用戶)擁有 Alice 申請退出的 UTXO 被花費的交易證明,并將此作為證據向主鏈提出一個爭議;

爭議生效,Alice 的退出申請被駁回,同時將 Alice 申請退出的押金發送給 Bob;

Alice 的攻擊失效。

場景2

Operator 創建了一個非法交易,并且將其打包生成區塊之后在主鏈得到確認;

Operator 提交取款申請,打算將 Alice 的資產取走;

在爭議期內,Alice 發現了 Operator 的惡意行為,立即提出取款申請,退出子鏈;

由于 Alice 的申請優先級較高,因此會在 Operator 之前退出;

Operator 的攻擊失效。

相關項目
Talk is cheap, show me your code.

目前已經有許多機構和公司已經實現了 Plasma MVP,但實現的語言和細節有所不同:

FourthState Lab[[3]](https://github.com/fourthstate)

Omisego[[4]](https://github.com/omisego/pl...

Kyokan[[5]](https://github.com/kyokan/pla...

總結

本文介紹了 Plasma 的最小實現版本 Plasma MVP,雖然采用最簡單的 UTXO 模型,但已經足夠體現出 Plasma 的核心思想。在 Plasma MVP 中,用戶資產的安全主要依賴于用戶及時發現惡意行為,并退出子鏈。接下來的文章將會介紹另外一個稍微復雜一點的項目,Plasma Cash。

相關資源

https://ethresear.ch/t/minimal-viable-plasma/426

https://ethresear.ch/t/more-viable-plasma/2160

https://github.com/fourthstate

https://github.com/omisego/plasma-mvp

https://github.com/kyokan/plasma

本文的作者是蓋蓋,他的微信公眾號: chainlab

深入淺出區塊鏈 - 系統學習區塊鏈,打造最好的區塊鏈技術博客。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/99194.html

相關文章

  • 深入理解PlasmaPlasma MVP

    摘要:合約會處理由子鏈提交的區塊,并且將區塊的哈希值存在主鏈上。負責處理所有子鏈上發生的交易,將其打包成區塊存儲在子鏈上,并且周期性地向合約提交區塊,將子鏈上的狀態區塊的哈希值提交到主鏈共識。 本文首發于深入淺出區塊鏈社區原文鏈接:深入理解Plasma(三)Plasma MVP原文已更新,請讀者前往原文閱讀 這一系列文章將圍繞以太坊的二層擴容框架 Plasma,介紹其基本運行原理,具體操作細...

    guqiu 評論0 收藏0
  • 深入理解Plasma(四)Plasma Cash

    摘要:稀疏梅克爾樹在上文中我們已經了解到一個交易的成功的前提是需要發送方提供關于一個的完整交易歷史。因此,中使用了一種稱為稀疏梅克爾樹,的數據結構存儲交易數據,能夠在的時間復雜度驗證一個交易不存在。 本文首發于深入淺出區塊鏈社區原文鏈接:深入理解Plasma(四)Plasma Cash原文已更新,請讀者前往原文閱讀 這一系列文章將圍繞以太坊的二層擴容框架 Plasma,介紹其基本運行原理,具...

    godiscoder 評論0 收藏0
  • 深入理解Plasma(四)Plasma Cash

    摘要:稀疏梅克爾樹在上文中我們已經了解到一個交易的成功的前提是需要發送方提供關于一個的完整交易歷史。因此,中使用了一種稱為稀疏梅克爾樹,的數據結構存儲交易數據,能夠在的時間復雜度驗證一個交易不存在。 本文首發于深入淺出區塊鏈社區原文鏈接:深入理解Plasma(四)Plasma Cash原文已更新,請讀者前往原文閱讀 這一系列文章將圍繞以太坊的二層擴容框架 Plasma,介紹其基本運行原理,具...

    sourcenode 評論0 收藏0
  • 深入理解Plasma(二)Plasma 細節

    摘要:用戶在將主鏈的資產如以太幣或者其它合約發布的轉移到的過程稱為存款,具體做法是直接向主鏈上的合約發送以太幣或。將賣給,獲得了以太幣,賺取了以太幣。當子鏈中有拜占庭行為發生時,用戶之間可以共同協作執行批量取款。 本文首發于深入淺出區塊鏈社區原文鏈接:深入理解Plasma(二)Plasma 細節原文已更新,請讀者前往原文閱讀 這一系列文章將圍繞以太坊的二層擴容框架,介紹其基本運行原理,具體操...

    Bowman_han 評論0 收藏0
  • 深入理解Plasma(二)Plasma 細節

    摘要:用戶在將主鏈的資產如以太幣或者其它合約發布的轉移到的過程稱為存款,具體做法是直接向主鏈上的合約發送以太幣或。將賣給,獲得了以太幣,賺取了以太幣。當子鏈中有拜占庭行為發生時,用戶之間可以共同協作執行批量取款。 本文首發于深入淺出區塊鏈社區原文鏈接:深入理解Plasma(二)Plasma 細節原文已更新,請讀者前往原文閱讀 這一系列文章將圍繞以太坊的二層擴容框架,介紹其基本運行原理,具體操...

    Tecode 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<