learn plasma
Plasma Frame work
plasmaはフレームワークなので、具体的なものではない
そのため、例とかが出しにくくWPもちょっとわかりにくい
ルートチェーンからサイドチェーンへ資産を送る方法
ルートチェーンで資産をロックアップする
サイドチェーンでロックアップした分のアセットを作る
サイドチェーンのアセットを消す
ルートチェーンの資産をアンロックする
サイドチェーンのセキュリティが破壊されるとやばい
サイドチェーンでルートでロックしていない資産を登録できたら、ルートの資産を盗める
winor.icon > ↑の理由でutxoとかにしてるのかも
あとは、サイドチェーンでセキュリティが破壊されたらユーザーの資産をルートチェーンに戻す緊急処置も必要
3つの要素
オフチェーン実行
ステートコミットメント
マークルツリーに対してマークルルートのみをコミットメントし、データを圧縮する
Exits
Plasma MVP
UTXOベースのプラズマチェーンチェーン
ハイスループットなペイメントトランザクションを実現できるが、スクリプトやスマコンみたいな複雑なことはできない
背景としては。。。
Ethereum遅いよねって話と手数料がどんなトランザクションでも割とかかるって話
新しいブロックチェーンを作ってスケーラビリティ上げるのは、セキュリティやUXの観点からX
だったら親ブロックチェーンに資産を固定して、サイドチェーンを作ることが考えられる
ほとんどのブロックチェーンと同様にサイドチェーンでもコンセンサスアルゴリズムは必要
ただし、このコンセンサスが破られたり覆された場合にユーザーの資産がリスクを被ることになり、これを解決するのがプラズマの役割
Consensus
プラズマチェーンはちょっと特殊
コンセンサスが失敗したときにユーザーの資産を逃がす
MVPはPoA
Deposits
Eth上のスマコンにEth or ERC20(FT)をデポジットする
→ plasmaチェーン上にそのトランザクションを一つ含むブロックができる
→ アウトプットはデポジットしたユーザーへデポジットした額分のplasmaチェーン上での資産
Transactions
UTXO形式のトランザクション
トランザクションはオペレーターによって送信される
オペレーターはトランザクションを集めて、ブロックにする
ブロックが十分なトランザクションによって満たされたら、それをEthereumにコミットメントする
Merkle Trees
いくつかのデータの集合を固定サイズのコミットできる情報へと変換する。
また、ほかのユーザーはその変換後のデータがデータの集合であることがわかる
ブロックチェーンでは↑を拡張してトランザクションの集合をコミットしている
それらのトランザクションがただしものかチェックできる
Withdrawals
exitトランザクションをイーサリアム上に送信することによって、プラズマチェーン上の資産を出金できる
Starting an Exit
MVPにはUTXOとして入金されるので、exitされるときも特定のアウトプットに対して行なわれなければならない
かつ、それを持ってる人のみがexitできるようにしたい
Markle Proofでアウトプットを含むトランザクションが実際にブロックに含まれることを確認する
かつ、そのアウトプットがexitを実行するユーザーのものか
Challenging an Exit
使われていないアウトプットであることを保証したい(ダブルスペント)
チャレンジ期間を設ける
↑の期間でexitされそうなUTXOが既に使われているかを検証して、異議申し立てをすることができる
Exit Priority
悪意あるオペレーターだと使用されてるUTXOをexitすることを許可したりすることができてしまう
これを防ぐために、いくつかのルールを追加
exit priority
正確なpriorityはブロックとトランザクションのインデックスとアウトプットのインデックスによって決まる。
ようは不正なトランザクションがexitされようとする場合、ただちにexitすればそのトランザクションより前のutxoのexitのほうが優先されるので、安全
Confirmation Signatures
オペレーターがわざと無効なトランザクションを有効なトランザクションの前で送信した場合はどうするか?
ブロックに含まれる前とあとで署名を2回行う
あとで署名を行えば、無効なトランザクションの前に追加されそうになるので、それには署名できない!といえる
Watching the Plasma Chain
↑の安全性を保つにはプラズマチェーンを監視できるのが必要条件
More Viable plasma
confirmation sigはbad UX
more viable plasmaはconf sigを削除したもの
Plasma Cash
NFTが使われる
mas exit
Consensus
PoAとかPoAでも何でも良い
Deposits
デポジットしたとき、MVPとは違いNFTでPlasma Cash上でのアセットが表現される
10Ethデポジットしたら、10Eth分の価値のトークンが得られる
Blocks
MVPとかなり違う
それぞれのCashブロックにはすべてのトークンが存在するかのスロットがついている
いつ送金されたかがわかる!!
MVPはmarkle tree
Cashはsparse Markle tree
Transactions
他のユーザーがどのトークンを持っているかはわからないので、相手に送金するときは、所有権の証明をしなくてはならない
この証明はトークンができてからの履歴を含む証明
現在のブロックで持っていることを証明するにはそのブロックよりも前で所有しているトークンがどのように所有者を写ってきたかとそのマークルプルーフを提出
Withdrawals
MVPと違う
Starting an Exit
exitするときは最新2件のトランザクションをサブミットしないといけない
Challenging an Exit
正しいオーナーが出金できるためには、3種類のチャレンジをサポートする必要あり
ユーザーが実は出金しようとしていたトークンを使っていたら、すぐにブロックされる
2つのトランザクションの間に他のトランザクションがある場合、すぐブロック
他のトランザクションのトークン履歴からチャレンジできる
↑はすぐにはブロックされない
Pros and Cons
haighly scalbility
ただscalability と flexibilityのトレードオフ
トークンはいつでも固定(NFTだし。。。)
所有の証明はトランザクションごとにかなり急速に大きくなる
Plasma Debit
like Cash
Consensus
何でも良いが、ペイメントチャネルを使用する方法なのでPoAとかのがベター
Deposits
Cashと基本的には同じ
デポジットしたらplasmaチェーン上でユニークなトークンが生成される
異なる点は、ペイメントチャネルでもある(オペレータ<->ユーザー間での)
Transactions
チャネルを使用するので、Cashとはかなり異なる
支払いたい場合はオペレータに頼む
ペイメントチャネルの問題としては、受診者もオペレータとチャネルを開いておかなくてはならない
PlasmaCashのような特徴のおかげで、ペイメントチャネルに参加してないユーザーでもトークンを送れる!
通常はA -> Bに送りたい場合、Bはチャネルを開かなければならない
ユーザーがジョインするたびに、チャネルを開かなければならないのは不便なので、事前に作っておく
https://www.learnplasma.org/img/learn/debit/pd-xfer.png
Withdrawals
基本はCash
ただし、debitはpaymentチャネルになので、1Ethの半分を使うみたいなことができる
Cash同様、withdrawするときはそのトークンを所有していた証明をしなくてはならない
ただし、全体のトークンをexitしようとしたのに既に半分使われていた場合は?
↑だらかが、ユーザーが署名後の資産を明らかにした場合、チャレンジを追加できるので、それによって解決
Pros and Cons
DebitはCashを大きく改善した
payment chanel
ただ、cash同様で、所有証明はかなり大きい
また、事前にユーザーがチャネルを開くことを予想してoperatorがfundしておかなくてはいけないので、ネットワークが大きくならないと動かない状態の資金ができてしまう
Cashよりもクロス通貨ペイメントには適してない
Plasma Prime