メインコンテンツへスキップ
ブロックチェーンMar 28, 2026

Deep EVM #17:Huffコントラクトのテスト — Foundryフォークテストとガスアサーション

OS
Open Soft Team

Engineering Team

Huffコントラクトのテストが異なる理由

Huffは低レベルEVMアセンブリ言語で、スタック、メモリ、ストレージを直接制御できます。型エラーを捕捉するコンパイラも、SafeMathも、自動境界チェックもありません。書いたオペコードがそのままデプロイされます。これがテストを重要ではなく絶対に不可欠にしています。

プロジェクトセットアップ

FoundryプロジェクトにHuffサポートを設定します。foundry-huffを使用してテスト中にHuffコンパイラをFFI呼び出しで呼び出します。

テスト対象のHuffコントラクト

シンプルなERC20風トークンをHuffで書き、テストします。

FoundryでのHuffテストセットアップ

HuffDeployerライブラリを使用してHuffコントラクトをデプロイし、vm.storeで初期状態を設定、vm.prankでコール元を偽装。

ガススナップショットと回帰テスト

forge snapshot --match-contract SimpleTokenTest
forge snapshot --check .gas-snapshot --tolerance 1

CIでは.gas-snapshotファイルをリポジトリにコミットし、すべてのPRを現在のベースラインに対してチェック。

差分テスト:Huff vs Solidity参照

正しいことが分かっているSolidity実装を書き、Huffコントラクトがすべての入力で同一の結果を生成することを検証。10,000のランダム入力で微妙なバグを発見。

メインネットステートに対するフォークテスト

実際のUniswapコントラクトに対してHuffルーターをテスト。統合上の問題を発見。

ガス比較:Huff vs Solidity vs Yul

操作SolidityYulHuff
balanceOf2,6042,3412,187
transfer29,41227,89126,534
デプロイ198,234143,89298,421

まとめ

低レベルコードほど高レベルのテスト規律が必要です。手動で書いたすべてのオペコードが微妙なバグの機会です。包括的なテストスイートに投資してください。