📜 [專欄新文章] Ethereum Plasma Prime
✍️ Kimi Wu
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
“We finally hit the peak of the mountain!”
這是Ethereum Foundation researcher, Karl在Devcon 4 所說的。用這句話作為開場,代表著Plasma Prime離最終目標已經不遠了。
Plasma Prime是什麼呢?? 其實在Ethereum Research上找不到這個主題,Plasma Prime是Plasma Cash延伸的提案。Plasma Cash有一個很大的問題就是交易的歷史紀錄過於龐大(每個coin每年大約有1–3GB的歷史紀錄),如果沒有這些歷史紀錄,就沒辦法驗證作challenge 的動作。而Plasma Prime就是利用質數跟因式分解的特性,解決歷史紀錄過於龐大的問題。
Plasma Prime利用RSA accumulator來取代原本的驗證需要整個Merkle tree branch的方式。這邊用的概念很簡單,直接看範例不看數學式,假設有3, 5, 11這三個質數,可以得到 A = g ⁽ ³* ⁵* ¹ ¹ ⁾,若要證明3是A的一部分(比較精確的說法應該是 g³ 是A的一部分),只要可以在 (g³) ⁿ 中求得整數n,就代表3 是A的一部分,以這個例子來說,可以得到整數 n=55,因此 3 是A的一部分。但是實際應用上 n 可能會很大(因為coin數很多),所以會需要更有效率的確認方式,這部分牽涉到的數學比較多,就不在這裡討論,有興趣可以參考Wesolowski的論文跟Benedikt Bünz的演講。
回過頭來解釋這個範例,g 是generator(代表了初始的accumulator),A是accumulator,然後每產出一個block,accumulator就會累加上一個block的accumulator,也就是一開始accumulator A = g ⁿ,下一個block就accumulator A’ = A ⁱ,以此類推,一直累加上去。所以每個block就不需要帶著整個交易的Merkle tree,只需要多一個accumulator就可證明是否有交易過。
接下來,證明沒有交易過,代表要證明某數 v 不是A的一部分,很直覺會覺得無法因數分解即可,不過沒這麼單純(這邊我也不確定為何,可能要請數學好一點的人幫忙解答一下)。以上面的例子繼續解釋,7 不是165(3*5*11)的因數,只需要證明 0 < i < 7 可以得到 A * g ⁱ 即可,也就是 (g⁷)ⁿ 找不到整數解 n,但可以找到 A * g³ = g¹ ⁶ ⁸,然後 i = 3(滿足 0 < i < 7),可以得到因數24跟(g⁷) ² ⁴ = A * g³ = g ¹ ⁶ ⁸。
統整一下,Plasma Prime是利用上面講的RSA Accumulator減少了交易的歷史資料,那說好的質數在哪裡?! 在Plasma Prime每個coin的id都會是一個質數,而不是Plasma Cash中只是一個亂數id。再來,看看實際應用的的狀況,若有你所屬的coin在block n … n+k都沒有做過交易,只需要拿block n(的input state)的當作generator,然後n+k(的output state) 當作accumulator,根據上面的例子,只需要簡單的驗證就可以證明你的coin沒做過交易,相當簡潔。整個數據量會從GB等級減到MB等級。
以上是介紹減少數據量的方法,但是Plasma Cash還有一個詬病的問題就是進來Plasma chain的coin/token是無法分割的,也就是你存進1 ETH進Plasma chain,沒辦法只轉0.5 ETH給別人。在Ethresear.ch 中有一系列關於這個的文章(Plasma Cash Defragmentation / Take 2 / Take 3),簡單來說,就是交易原本是從一個coin轉到使用者,變成從一個區間的coin轉給使用者,如下圖,A轉了33 ETH給B,就轉token 0–32這個區間的token給B
當然,這種方式也不是沒問題,交易次數多了之後,就會造成fragment,跟硬碟使用久了,會造成空間碎裂不連續一樣,每個人持有token的就無法是一個連續的區間,在Plasma Cash Defragmentation Take 3有解決的提案,概念上還滿簡單的,因為不是本篇重點,有興趣的可以自己去看(不過看Take 3之前還是需要看前兩篇,才能比較了解在幹嘛 XD)
以上是我所知道的Plasma Prime,利用RSA Accumulator減少資料量跟轉帳是轉一個區間的coin。
今天分享就到這邊,如果有錯誤或是缺漏的,歡迎指教!
other references :RSA Accumulators for Plasma Cash history reductionLog(coins)-sized proofs of inclusion and exclusion for RSA accumulators
同場加映:Elph 發表了Plasma側鏈OmiesGO 發表了Plasma Dog
Originally published at kimiwublog.blogspot.com.
Ethereum Plasma Prime was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
plasma coin 在 Taipei Ethereum Meetup Facebook 的精選貼文
📜 [專欄新文章] Ethereum Plasma Debit and More Viable Plasma
✍️ Kimi Wu
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
看完上篇Plasma MVP跟Plasma Cash的介紹,感覺Plasma MVP目前還處於是概念上的階段,正式上線好像還有段距離。Plasma Cash每個coin都是不可分割的,在實際上的使用上有點困難。而本篇是要接續介紹Ethereum researcher 們更新的提案-Plasma Debit跟More Viable Plasma。
Plasma Debit
Plasma Debit要解決的就是Plasma Cash 每筆進帳不可分割的問題。Plasma Cash的帳戶裡只有一個值(而且值等於1),在Plasma Debit改成兩個值a跟v。v 代表這個帳戶最多可以擁有多少錢(也就是存了多少ETH進Plasma chain)a 是目前帳戶裡的錢 舉例來說,
1. 甲存了5 ETH進入Plasma chain後,v=5, a=52. 甲轉2 Plasma token給乙,v=5, a=3可以想作是信用卡的最高額度(v)跟還可以使用的額度(a)。
但是,這裡有個問題,在最一開始大家的a跟v的值都一樣,代表著大家不能相互轉帳。什麼意思呢? 舉例來解釋一下
1. 甲,乙各存了5ETH, 7ETH進Plasma chain,此時甲:(v=5, a=5), 乙:(v=7, a=7) 2. 甲想轉帳給乙,但因為乙的 v=a,若甲轉給乙則會造成乙的 a>v 的狀況,這在設計上是不允許的(信用卡公司給你5萬的額度,總不能刷超過5萬吧) 為了要有流動性,operator可以透過不同的function存錢進你的帳戶(也就是某個coin),也就意味著你的v值會變被增加(當然會需要付一些手續費給operator),以上例來說3. operator提供 2ETH的額度給乙(v=9, a=7) 4. 甲就可以轉 2ETH給乙(甲:(v=5, a=3), 乙:(v=9, a=9))
目前Plasma Debit的設計類似payment channel,每個coin的擁有者跟operator建立一個雙向的payment channel(提案中多處都在類比Lightning Network的channel,不過我不夠熟悉payment channel,就不在這裡提出比較),所以在交易時,都是透過operator做中介做交易。由於channel 結構上的問題,目前這個提案,只限於單一個operator。
More Viable Plasma
More Viable Plasm(MoreVP)是基於Plasma MVP作發展,改進提款的流程(Exit Game)。 上一篇Plasma MVP只有簡單介紹概念,沒有特別著墨在exit的部分,因為MoreVP是針對exit game的部分做改進,所以這次會對exit game的部分在做多一些的解釋。
在Plasma MVP中,有人要離開plasma chain(把錢提出)時,需要大家的簽章(confirmation signature),而confirmation sign對使用者非常的不方便,每次有人離開,都需要收集簽章。但移除了confirmation sign,operator就很容易可以作怪,例如不打包使用者的tx(in-flight tx),甚至可以憑空鑄幣。MoreVP改變了原本離開plasma chain的排序機制,在MoreVP中越新的input(youngest input)有越高離開plasma chain的優先權。此外,挑戰期(challenge period)也改成兩段式。
整理一下:MVP的exit game 1. 越舊的UTXO的優先權越高 2. 送出交易需要簽章,離開時也需要簽章(confirmation signature) 3. 單一挑戰期(需要exit bond)MoreVP的exit game 1. 越新的input(youngest input)優先權越高 2. 只需要送出交易的簽章,不需要confirmation signature 3. 兩段式挑戰期(需要exit bond跟piggyback bond)
接下來再深入一點介紹兩段式的挑戰,這裡只針對worst case(byzatine共識且是in-flight tx)作討論,因為被打包的的tx不會有問題,就照正常程序離開即可。* in-flight tx: 還沒被打包的tx,無論是還沒被打包或是被operator惡意不打包。
當有人要離開plasma chain時,要先壓錢作擔保(exit bond),任何想一起離開的人需要壓附帶擔保(piggyback bond),如果沒有附帶擔保(piggyback bond)就不能離開。此時,進入第一階段挑戰期
第一挑戰期,原則上就是讓大家提出要離開的這個tx是不是無效的或被花過的。如果是,提出證明的tx‘ 來更換原本的tx,提出證明的人可以拿到上一個的附帶擔保(piggyback bond),然後壓上新的piggyback bond。然後一直直到沒人提得出新的證明為止。
若有人挑戰,就進入到第二階段
第二階段,上一階段只有提出挑戰,但是沒有人去確認,而這階段就是去確認/驗證第一階段的挑戰,如果驗證後是正確的,則第一階段的挑戰者可以拿到申請離開人的exit bond,並且申請著不能離開。若無人能驗證,則退還exit bond,此時申請者也不能離開(不能把plasma chain的錢提出)。 若第一階段無人挑戰,則有申請離開者就順利離開。 有沒有覺得聽完有點頭昏眼花 XD,這裡有提案者的圖解
source: https://ethresear.ch/…/ca4ff953b1fe258bc80dbb3ba98ad724d84d…
今天的介紹大概就到這邊,有任何的錯誤或是意見歡迎指教!
other references :Plasma Debit, SimplifiedLearn PlasmaOmiseGO-MoreVP
Originally published at kimiwublog.blogspot.com.
Ethereum Plasma Debit and More Viable Plasma was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
plasma coin 在 AppWorks Facebook 的最佳解答
Blockchain Series - Scalability 擴容
本週與大家分享 Scalability 擴容,不少公鏈都面臨交易速度的挑戰,因而有了許多擴容方案來優化交易狀況,如果你想了解 Segwit, 閃電網路, Sharding 或者是 Plasma,歡迎收看我們的影片!
回顧 Blockchain Series 前三集
智能合約 Smart Contract: https://youtu.be/Khbr-8bDGFM
隱私幣 Privacy Coin: https://youtu.be/exKMExiMnwY
穩定幣 Stable Coin: https://youtu.be/rn5fMRbl3q0
有任何建議歡迎留言給我們,訂閱我們的頻道後記得開啟小鈴鐺喔!
https://youtu.be/Ta5VShyb2dU