【CTO Tech Blog】Rubyで簡易STARK/zkVMを実装してCRubyとSpinelで速度比較してみた
- CTO Tech blog

当社のCTO、安土 茂亨がクラウドやBlockchainについて書き連ねるブログ Develop with pleasure! から最新記事をご紹介するCTO Tech Blog。
今回は「Rubyで簡易STARK/zkVMを実装してCRubyとSpinelで速度比較してみた」というタイトルの記事をご紹介!!
📦 ブログ記事の概要
📄 概要
STARKは、「ある計算を正しく実行した」ことを、その計算をやり直すよりも効率的に検証するための証明技術です。zkVMはこの仕組みを仮想マシン(VM)に応用し、プログラムを特定の入力で実行した結果が正しいことを証明します。
記事では、STARKとzkVMの仕組みへの理解を深めることを目的に、外部のgemに依存しないPure RubyでSTARK証明系と4種類の命令を持つ小さなzkVM「BabyStark」を実装。さらに、同じソースをCRubyとRubyのAOTコンパイラ「Spinel」で動かし、性能の違いについても検証しています。
⚙️ 技術的ポイント
- BabyStarkでは、計算の実行過程を記録し、それが正しいことをAIRによって多項式の制約に変換。FRIによる低次性の証明とFiat-Shamir変換を組み合わせて、非対話型のSTARK証明を構成している。
- 特定の計算を証明する実装から、任意のプログラムを扱えるzkVMへ一般化。定数の読み込み、加算、乗算、条件付きジャンプという4種類の命令を実行できるシンプルなVMを構築している。
- BabyStarkは教材用の実装で、最新のSTARKで使われるすべての技術を採用するのではなく、コードと理論の対応の分かりやすさを重視している。
- CRubyとSpinelで生成した証明がバイト単位で一致することをCIで検証し、CRuby、YJIT、Spinelによる性能比較も実施している。
- ベンチマークでは、証明の検証はSpinelがすべての計測サイズで最速だった一方、証明生成ではYJITを有効にしたCRubyが最速という結果になった。
- 性能分析から、YJITはRubyらしい多数の小さなメソッド呼び出しの高速化に強く、Spinelは計算中心の処理では高い性能を発揮する一方、メモリ割り当ての多い処理ではGCの特性が性能に影響することが確認された。
💡 技術的意義
BabyStarkは、STARKの理論をRubyコードと対応させながら追うことで、「計算が正しい」という主張がどのように数学的な制約へ変換され、検証可能な証明になるのかを理解しやすくした実装です。
また、同一のRubyソースを異なる実行方式で比較したことで、アルゴリズムだけでなく、JIT・AOTコンパイル、GC、データ表現などが暗号処理のパフォーマンスに与える影響についても興味深い結果が得られています。
📌 まとめ
本記事は、STARKやzkVMの仕組みを実際の実装と対応させながら理解したいエンジニアにおすすめです。
Pure Rubyによるシンプルな実装を通じてSTARKとzkVMの基本的な仕組みを追えるだけでなく、CRuby、YJIT、Spinelの比較から、Rubyの実行環境や実装方法によるパフォーマンスの違いについても知ることができる内容です。
🔗元記事へのリンク
Chaintopeでブロックチェーンの未来を共に創りませんか?

Chaintopeは、独自のブロックチェーン「Tapyrus(タピルス)」と、開発プラットフォーム「Tapyrus Platform」を活用し、デジタル社会の信頼基盤を構築しています。
私たちは、ブロックチェーン技術の可能性を最大限に引き出し、社会に新しい価値を提供することを目指しています。
募集職種:
- ブロックチェーンエンジニア
- アプリケーションエンジニア
- インフラ・保守エンジニア
- プロジェクトマネージャー
- フィールドセールス
Chaintopeで働く魅力:
- 最先端のブロックチェーン技術に触れる機会
- リモートワークやフレックスタイム制による柔軟な働き方
- 専門性の高いチームとの協働
ブロックチェーン技術に情熱を持つあなたのスキルを、私たちのチームで活かしませんか?
↓↓詳細は、採用情報をご覧ください↓↓


