Ethereumのコンセプトってすごいな、と思って実行可能ブロックチェーンを自作してみた。なるべくシンプルな設計で、主要な機能を持たせるように努めた。主なコンポーネントは以下の3つ。
- 言語処理系(FORTHコンパイラ)
- 仮想マシン(スタックマシン型命令セット)
- ブロックチェーン(SHA256)
リポジトリはここです。
詳しくはソースコードを見てもらいたいですが、テストケースで試している機能は以下。
- 簡単な四則演算
- 簡単な関数定義・呼出し
- 簡単な条件分岐
- ネストされた条件分岐
- ネストされた関数呼出し
- 再帰関数
- 末尾再帰関数
- 過去のブロックに登録した関数の呼出し
- 揮発性の変数(数値のエイリアス)
- 不揮発性の変数(ブロックに登録する変数)
- ブロックチェーンのバリデーション
- ブロックチェーンの改竄不可能性
普段は主にPythonでデータ分析とかをしているので、C++と戯れるとconst伝播とか変数アクセス制御とかメンバ関数ポインタとか新鮮で楽しい。C/C++の勉強もうちょっとがんばろ。
参考資料
SHA256関数のC++実装。
ブログによる解説あり(英語)。
SHA256関数はここのコードをそのまま使わせて頂きました。
ブロックチェーンのC++実装。
シンプルで分かりやすい設計。
ブログによる解説あり(英語)。
元ネタはJavascriptで書かれたブロックチェーン。
ForthコンパイラのC++実装。
シンプルで分かりやすい設計。
- https://ethereum.github.io/yellowpaper/paper.pdf
- https://github.com/ethereum/wiki/wiki/Ethereum-Development-Tutorial
Ethereumの仕様などについての定番資料。