foundry - Foundryは、Rustで記述されたEthereumアプリケーション開発用の非常に高速でポータブルなモジュラーツールキットです。

(Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust.)

Created at: 2021-09-08 19:23:11
Language: Rust
License: NOASSERTION

ファウンドリのロゴ

ファウンドリ

Githubアクション テレグラムチャット テレグラムサポート

Foundryは、Rustで記述されたEthereumアプリケーション開発用の非常に高速でポータブルなモジュラーツールキットです。

ファウンドリの構成:

  • Forge:イーサリアムテストフレームワーク(Truffle、Hardhat、DappToolsなど)。
  • キャスト:EVMスマートコントラクトとやり取りし、トランザクションを送信し、チェーンデータを取得するためのスイスアーミーナイフ。
  • アンビル:ローカルイーサリアムノード、ガナッシュ、ハードハットネットワークに似ています。

Foundryを使い始めるのに助けが必要ですか?読む📖ファウンドリブック(WIP)!

デモ

インストール

問題がありますか?トラブルシューティングのセクションを参照してください

まず、以下のコマンドを実行して

foundryup
、Foundryツールチェーンインストーラーを取得します。

curl -L https://foundry.paradigm.xyz | bash

リダイレクトを使用したくない場合は、ここからfoundryupインストールスクリプトを手動でダウンロードしてください。

次に、

foundryup
新しいターミナルセッションで実行するか、をリロードした後に実行します
PATH

その他の使用方法

foundryup
、およびその他のドキュメントは、ここにあります。ハッピーフォージ!

ソースからのインストール

ソースからインストールしたい人のために、あなたは以下のようにそうすることができます:

git clone https://github.com/foundry-rs/foundry
cd foundry
# install cast + forge
cargo install --path ./cli --bins --locked --force
# install anvil
cargo install --path ./anvil --locked --force

または経由

cargo install --git https://github.com/foundry-rs/foundry --locked foundry-cli anvil

GithubActionでのCIのインストール

https://github.com/foundry-rs/foundry-toolchainGitHubActionを参照してください。

Docker経由でのインストール

FoundryはDockerイメージリポジトリを維持しています。

次のように最新のリリースイメージをプルできます。

docker pull ghcr.io/foundry-rs/foundry:latest

このイメージの使用例とガイドについては、本のDockerセクションを参照してください。

手動ダウンロード

ここから夜間リリースを手動でダウンロードできます。

フォージ

特徴

  • 高速で柔軟なコンパイルパイプライン
    • 自動Solidityコンパイラバージョンの検出とインストール(の下
      ~/.svm
    • インクリメンタルコンパイルとキャッシュ:変更されたファイルのみが再コンパイルされます
    • 並列コンパイル
    • 非標準のディレクトリ構造のサポート(例:Hardhatリポジトリ
  • テストはSolidityで書かれています(DappToolsのように)
  • 入力の縮小と反例の印刷による高速ファジングテスト
  • tokioのようなRustの非同期インフラストラクチャを活用した高速リモートRPCフォークモード
  • 柔軟なデバッグログ
    • DappToolsスタイル、
      DsTest
      の発行されたログを使用
    • 人気の
      console.sol
      契約を使用したヘルメットスタイル
  • ポータブル(5-10MB)で、Nixやその他のパッケージマネージャーを必要とせずに簡単にインストールできます
  • FoundryGitHubアクションを使用した高速CI

どのくらい速いのか?

Forgeは、コンパイル(ethers-solcを活用)とテストの両方で非常に高速です。

以下のベンチマークを参照してください。その他のベンチマークは、v0.2.0の発表の投稿ConvexShutdownSimulationリポジトリにあります。

ベンチマークのテスト

計画 フォージ DappTools スピードアップ
メープルラボ/ローン 800ms 4分28秒 335x
ラリ-キャピタル/ソルメイト 2.8秒 6分34秒 140倍
reflexer-labs / geb 0.4秒 23秒 57.5x
ラリ-資本/金庫 0.28秒 6.5秒 23倍

注:上記のベンチマークでは、コンパイルは常にスキップされました

コンパイルベンチマーク

コンパイルベンチマーク

要点:Forgeのコンパイルは、関連するキャッシュの量に応じて、1.7〜11.3倍高速です。

キャスト

Castは、コマンドラインからEthereumアプリケーションと対話するためのスイスアーミーナイフです。

その他のドキュメントは、キャストパッケージにあります。

構成

使用する
foundry.toml

ファウンドリは非常に構成可能になるように設計されています。

foundry.toml
プロジェクトのルートで呼び出されるファイル、または他の親ディレクターを使用してFoundryを構成できます。使用可能なすべてのオプションについては、 configパッケージを参照してください。

構成は、プロファイルによって任意に名前空間を付けることができます。デフォルトプロファイルには名前が付けられます

default
「デフォルトプロファイル」を参照)。

FOUNDRY_PROFILE
環境変数を使用して別のプロファイルを選択できます。
FOUNDRY_
を使用して、または
DAPP_
接頭辞付きの環境変数を使用して、構成の一部をオーバーライドすることもできます
FOUNDRY_SRC

forge init
基本的な拡張可能な
foundry.toml
ファイルを作成します。

現在の構成を確認するには、を実行します

forge config
。基本的なオプション(で設定
forge init
)のみを表示するには、を実行します
forge config --basic
。これを使用して、を使用して新しい
foundry.toml
ファイルを作成できます
forge config --basic > foundry.toml

デフォルトで

forge config
は、現在選択されているファウンドリプロファイルとその値が表示されます。また、と同じ引数を受け入れます
forge build

DappToolsの互換性

Foundryツールを使用して事前

.dapprc
に実行することにより、環境変数を再利用できます。
source .dapprc

追加の構成

追加のセットアップおよび構成ガイドは、FoundryBookにあります。

インストールのトラブルシューティング

libusb
実行時のエラー
forge
/
cast

リリースされたバイナリを使用している場合、MacOSで次のエラーが表示される場合があります。

dyld: Library not loaded: /usr/local/opt/libusb/lib/libusb-1.0.0.dylib

これを修正するには、次

libusb
のようにインストールする必要があります。

brew install libusb

デフォルトのインストールから実行すると、古い
GLIBC
エラーが発生します。
forge
foundryup

使用時に次のようなエラーが発生した場合

foundryup

forge: /lib/x86_64-linux-gnu/libc.so.6: version 'GLIBC_2.29' not found (required by forge)

2つの回避策があります。

  1. ソースからの構築:
    foundryup -b master
  2. Dockerの使用

貢献

寄稿ガイドラインをご覧ください。

ヘルプを取得する

まず、あなたの質問に対する答えがや関連する木枠にあるかどうかを確認してください。

答えがない場合:

貢献したい場合、または貢献者のディスカッションをフォローしたい場合は、メインの電報を使用して、Foundryの開発についてチャットできます。

謝辞

  • Foundryは、テストフレームワークDappToolsをクリーンルームで書き直したものです。DappHubチームの長年にわたる作業がなければ、これは不可能でした。
  • Matthias Seitz:作成されたethers-コンパイルパイプラインのバックボーンであるsolcと、ethers、特に
    abigen
    マクロへの無数の貢献。
  • Rohit Narurkar :複数のSolidityバージョンを自動検出および管理するために使用するRustSolidityバージョンマネージャーsvm-rsを作成しました。
  • Brock Elmore:VMのチートコードを拡張し、構造化された呼び出しトレースを実装するための、スマートコントラクト呼び出しをデバッグするための重要な機能。
  • エーテルへの他のすべての貢献者-rsファウンドリリポジトリとチャットルーム。