Plasma初期解説
なぜプラズマ?
ETHの最大の課題はトランザクションが待ち状態になっていくつかブロックを待ってから取り込まれる状態になること
別名:送金詰まり
なぜ起こる?
1ブロックに入れられるトランザクションの数(ブロックサイズ)に上限がある
アイデア:1つのトランザクションにめちゃくちゃたくさんのトランザクションを詰め込めないか?
つまり「マークル木」という大きなデータを小さくまとめる技術を使う
他のチェーンのほうでもトランザクションを処理してもらっておく
そのデータをマークル木に加工して、木のてっぺんの文字列だけをETHに保存する
こいつを「Plasmaチェーン」と呼ぶ
ETH(ルートチェーン)側に「Plasmaコントラクト」というつなぎ目が必要になる
どのくらい早いの?
早さには2種類ある
1秒あたりに捌けるトランザクション数
これがプラズマが解決する課題
MVP(検証可能な最小限の仕様)で1000tps(トランザクション毎秒)
Plasmaチェーンが子チェーンを持つことができる。最大100万tpsまでいける
コントラクトがチェーンに及ぼす影響が覆らなくなるまでの時間
Plasmaはトランザクション作成後すぐにfinalityを得ることを目的に設計されていない
1秒に1ブロックを生成するPoSチェーンを子チェーンとして用意したとして、6ブロックくらい待つ
ブロックに取り込まれたトランザクションはのちにルートチェーンに取り込まれる
その取引を改ざんするにはEthereumを書き換えねばならないためにセキュア
セキュリティ大丈夫なの?
攻撃には4種類ある
51%攻撃
多額の資金を積んでPoSバリデーターの51%以上のノードを得る
二重支払いや不正なトランザクション、トランザクションの拒絶などが可能になる
それを検知して取引やコントラクトを停止する対策が可能
この場合攻撃の影響は「麻痺」になる
過去の歴史の改ざんはこの攻撃ではできない。100%のノードに歴史を信用させる必要がある。
無理に行う場合、改ざんされたチェーンは孤立した別のチェーンになる。そのようなチェーンは誰も支持しない。
UTXO(Unspent Transaction Output/残高データ)偽装
Plasmaチェーンから他のPlasmaチェーンやルートチェーンに残高を移す(exit)とき、持ってる額を偽る攻撃
引き出し処理の前にbond(供託)をしてから引き出し、成功したら供託が戻る
exitトランザクションをPoSのようにバリデーションする主体を用意する
不正にバリデーターが異議申し立てし、より新しい(つまり使用された)UTXOを提示すると詐欺が証明できる
もし詐欺師が発覚した場合、その引き出しはキャンセルされ、供託は没収される
block withholding攻撃
PoSバリデーターが自分に回ってきたブロック採掘権を行使せず、ネットワークを止める攻撃
PoSバリデーターをする際の供託をそのPlasmaチェーンのコイン(Plasmaコイン)にする
PoS報酬をPlasmaコインにすることで、ネットワークに害をなすと供託や報酬が毀損されるので抑止できる
Plasmaコインの原資はトランザクション手数料(コントラクト実行も含む)
mass exit 攻撃
Plasmaのセキュリティモデルのひとつとして"ブロックが提出に異常があって、そのチェーンの参加者は強制的にすぐ離脱する"というルールがある
これは親チェーンに大量のトランザクションを作ってしまい、送金詰まりになりやすい
緩和策として一定の調停期間を経てからルートチェーンに移れるようにするとトランザクションが集中しない
gastoken.io などを利用してGas代が安いうちに仕入れておくのも良い手かもしれない
他には?
TendermintがPoSチェーンを作る雛形に便利
好きな言語でPoSチェーンとコントラクトを作れる
NodeJSで書かれたtendermint謹製の lotion.js が流行りそう
それベースで planet というフレームワークを落合 sg.icon が昨日から作り出した
planetの中にJavaScriptのコードとしてコントラクトが書けるよ
JavaScriptのオブジェクトへの変更がそのままtendermintの自分のチェーンに記録されていくよ
OmiseGO, voltaire labs, BankEraがそれぞれPlasmaコントラクトのMVPを作成している
それにつなぎこむPoSチェーンが planet になるといいなと考えている
voltaire labsのPlasmaMVPを見ていると、PlasmaチェーンのトークンがなんかERC-20互換になりそうな気がしているが、精査が足りないので判断は保留 コントラクトの実装は?
こんなかんじ
https://gyazo.com/ee2a51b8f5cd42f866580b22384aab28
https://gyazo.com/fdd873ba71e901e0a5f17aaf12d8a6a5
コントラクトの実行は?
こんな感じ
https://gyazo.com/c5ad2f26298ad6bb1589b1d435828dbc