Ethereum Plasma MVP and Plasma Cash

栏目: 数据库 · 发布时间: 7年前

内容简介:Vitalik大約在一年前(2017/08)提出了Plasma這個概念以解決Ethereum交易速度及成本的問題,不過提出的內容太概念性,沒什麼人知道該怎麼實作,在今年初Vitalik提出了Plasma屬於layer 2的solution,就是在主鏈之外做運作(也就是離線交易)。Plasma簡單來說就是鏈中鏈,每個鏈都可以有自己的鏈,自己的鏈還可以再有鏈,就像是tree一樣的概念。舉例來說,往後交易所就可以創造自己的鏈,在自己鏈內交易,速度快而且無手續費。而目前MVP的設計是在主鏈外多一層而已,還沒有多層

Vitalik大約在一年前(2017/08)提出了Plasma這個概念以解決Ethereum交易速度及成本的問題,不過提出的內容太概念性,沒什麼人知道該怎麼實作,在今年初Vitalik提出了 Plasma MVP(Minimal Viable Plasma) ,最小可行性的Plasma,而目前大家也是遵循這個規範來實作。

Plasma屬於layer 2的solution,就是在主鏈之外做運作(也就是離線交易)。Plasma簡單來說就是鏈中鏈,每個鏈都可以有自己的鏈,自己的鏈還可以再有鏈,就像是tree一樣的概念。舉例來說,往後交易所就可以創造自己的鏈,在自己鏈內交易,速度快而且無手續費。而目前MVP的設計是在主鏈外多一層而已,還沒有多層的概念。上個月的COSCUP有Ethereum Foundation負責Plasma的開發者的分享, 影片連結在這 (是中文,大家不用害怕 XD)。

  • Plasma MVP

在每個Plasma chain會有一個operator,operator負責產塊(可以想像是中心化的管理者),以目前來說,operator實作成Restful API server,而產塊可以想作是在DB insert一筆紀錄,跟我們以往中心化的系統一樣。而你要進入到這個Plasma chain需要先在主鏈上的smart contract作存款(deposit)才能進入。然後Plasma chain每產一個塊,就必須跟主鏈作回報(回報Merkle root),這樣Plasma chain這邊的塊才算被confirm。每個Plasma chain是獨立的,所以不能跨鏈交易,必須先轉回到主鏈。

Ethereum Plasma MVP and Plasma Cash

可以這樣想像,一個Plasma chain是一間賭場,你要進入一間賭場要先去把新台幣換成賭場的籌碼(deposit),接著你就可以在這間賭場做任何交易,那如果你要去隔壁賭場下注呢? 你要先換成新台幣,然後再換成隔壁賭場的籌碼。而在賭場的每一筆交易,都會被記載在賭場的帳本上(可以想像是Excel表格),而這個帳本要定期地跟政府報備,報備通過了,在帳本上的交易紀錄,才會被承認。Plasma chain的概念大概就像這樣。

那安全問題呢? operator是中央式的,如果被攻擊或是原本就是惡意的呢?接續上面的例子,其實要把籌碼換成新台幣,沒有這麼簡單。首先,要七天後才能領出,這段期間就是挑戰期,在這段期間內,如果有人提出你在賭場內造假的證據,提交到法院(也就是主鏈)並被且被法院認證是造假,那你的錢就不能提領了。

接著回到,如果operator跟某個帳號串通,假造balance的數目怎麼辦勒?Plasma會依照transaction的順序處理,從最舊的到最新的逐一驗證。舉例來說,

1.) A存了5塊存進賭場(A: 5顆籌碼)

2.) B存了20塊進入賭場(B: 20顆籌碼)(此時賭場共有25顆籌碼)

3.) 接著B給A 3顆籌碼(A:8, B:17),

4.) operator從桌底下偷偷拿拿自己帶的1000顆籌碼給了C

這個時候,大家發現賭場詐賭,就會開始想跑,把籌碼換回新台幣,這個時候就會照1,2,3,4順序來驗證交易,驗證到到第3步,A有8塊可以提領,B有17塊可以提領,AB領完後,賭場就沒錢了,所以C想領假造的1000塊也沒錢可以領了。更細節的部分,可以參考 Karl.tech 對於Plasma的介紹

  • Plasma Cash

簡單來說, Plasma Cash 做了兩個修改

1.) 每一筆存入Plasma contract的錢,都給一個 unique token ID

2.) Merkle tree的 index 存token ID 內容 存這個token ID的交易紀錄

這樣有什麼好處呢? 你每一筆存入的錢都有一個ID,可以想作是進了Plasma chain,你的Eth就變成了ERC20 token,所以當有人要偷錢的時候,就必須一個一個token的偷,對惡意的攻擊者來說,變得很不方便。不過相對的壞處就是,你存進去兩筆錢,要分開來用,不能合併一起,比較不方便。第二點,可以想像成, 你的token有一個自己的帳戶,所有的交易都在這個帳戶裡,要找紀錄, 證明交易都很方便,重點是尋找起來很快速 ,只要是關於這個token的交易但不在這個帳戶的,都是無效的。

但是每一筆錢都有一個ID,可想像的是Merkle tree會長得很大, Ethereum Research 上有個簡單的算數

Assuming we have a (very) small Plasma Cash chain with only  2^16 (= 65536) coins , then the Merkle proof of either existence or non-existence for a given coin will be at least 32 bytes * 16 siblings = 512 bytes per block. If we assume that Plasma block is created once every 15 seconds, then we’ll end up with 31557600 / 15 = 2103840 blocks per year. 2103840 blocks per year * 512 bytes per block = 1077166080 bytes per year = ~1.077 gigabytes per year.  1 gigabyte per coin, per year! 

source:  https://ethresear.ch/t/plasma-xt-plasma-cash-with-much-less-per-user-data-checking/1926

簡單來說,就是65536種token(也就是63356次存款),每年大概會多1GB的資料量。如果Plasma 被大量使用,這個量會相當驚人。後來又有提出 Plasma XT ,是基於Plasma Cash之上做改進。資料會這麼大,是為了要有歷史紀錄作為查證,而Plasma XT提出了check point的概念,定期做驗證,也就不需要全部歷史紀錄了。

Check point的概念聽起來很簡單,就定期檢查就好,但是operator並不是實際的一個鏈,只是一個api server,所以假如operator不提供交易紀錄只提供Merkle root那使用者要怎麼確認? 假使有方法可以確認了,那token數量這麼多,大家都同時確認,是不是會超過gas limit的上限? 目前解決方案,第一個問題,就是用使用者的簽名驗證,如果operator擅自在某個check point finalize你的狀態,那你就很容易地知道這個operator作弊,因為你沒有在這個check point簽名過。第二個問題使用了checkpoint zone,也就是每個token ID有一個時間做驗證,例如0-99做N block做驗證,100-199在N+1 block驗證...以此類推,解決了一次太大量的問題。

Plasma的介紹大概就到這,若有錯誤歡迎指正!說不清楚的部分,也歡迎提問!


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Design systems

Design systems

Not all design systems are equally effective. Some can generate coherent user experiences, others produce confusing patchwork designs. Some inspire teams to contribute to them, others are neglected. S......一起来看看 《Design systems》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具