内容简介: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是獨立的,所以不能跨鏈交易,必須先轉回到主鏈。
可以這樣想像,一個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的介紹大概就到這,若有錯誤歡迎指正!說不清楚的部分,也歡迎提問!
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
HTML 压缩/解压工具
在线压缩/解压 HTML 代码
URL 编码/解码
URL 编码/解码