stateless client, first-class witness data - paradigm


#1

ステートレスクライアントないしはファーストクラス要素としてのwitnessデータ

読了3分

vitalikの “stateless client, first-class witness data” paradigm という発言がタイトルの原文。

高級プログラミング言語における「first class function」などの用法で散見されるように、これまでそのプログラミングパラダイムの中で設計論の中心に据えられていなかったが存在していた概念を、今後は設計の中心に据えたパラダイムを打ち立てるぞというときに、この「ファーストクラス」という言葉は用いられることが多いように思う。

このwitness概念はもともと witnet.io のような分散オラクルの世界で目にしていたが、ここ最近Vitalikの口から設計論の話として耳にすることが多い。

過去にこのforumで扱った99%攻撃体制も一種のwitnessベースの設計とみることができる。

EVM inside EVM(EVMがその上で動くPlasmaで子チェーンの状態の正しさを親チェーンに証明する際に必要)の議論の中でもwitnessが出てくる。

Shardingでもlight clientを使ってfullnodeが持たねばならない状態を減らそうというstateless client概念が出てくる。

これらの「散らばったアイデア」をつなぐメタな概念がじきに整理されるだろうと予想している。


#2

witnessというのは、light client側にあるstate(merkle patricia trie)のうち、これから送信しようとしているTxが変更しようとしているstate patricia treeのkeyたちだと思っている。これはTxに乗せるというより、Txとセットにして同じカプセルで送る。フルノード側はブロック生成時に使えそうなwitnessを選んで署名する。Txにattachされて送られてくるwitnessたちを、cacheとして保持しておき、たとえば5000confsだとか3ヶ月だとかはそれらを参照可能に保つ。このwitnessデータはgas消費や送金などのそのTxによる状態遷移をあらわしているために、minerがTxを改ざんしたばあいwitnessのmerkle rootでもって検証できるので、署名に等しい機能を有する。bitcoinでいうsegwit的な面がある。これをもってproof of correct executionと呼ぶ — という話がVitalikのwitness a.k.a. proof of correct execution (PoCE)の話なのだと思った。

Vitalikは「EVMはチューリング完全なんだから、その上でEvalできるよなー」というところから考えを拡張して、「Evalをもっとも活かせる用途はPoCEだ。“前状態” と “TRIEへのtransition functionの適用” と “後状態” があれば、リモート(light clientや子チェーン)における特定の残高や状態が正当な状態遷移の結果としてそこにあることが証明できる」ということに気づき、上記のShardingやEVM Plasmaや99% fault toleranceの議論に横断的に適用することを開始したように見える。(彼のメタ認知によるレバレッジの効く領域の特定、その高密度なキャッチアップ、天才たちに考えさせる力、すべてが素晴らしい。)

一部推論が不正確かもしれないが、ここまでを人口に膾炙しやすい形での現状の理解のメモとしておく。