foundryをインストールしてSolidityで書かれたスマートコントラクトをブロックチェーンにデプロイ&実行するまでの流れ
素人プログラミング備忘録ですので自己責任でお願いします。
Ubuntu22.04
foundryのインストール
参考:
https://book.getfoundry.sh/getting-started/installation
インストール
以下の方法で最新版がインストールされる。
curl -L https://foundry.paradigm.xyz | bash
![](https://assets.st-note.com/img/1726429231-Mkgom80Z6eWjTbYSFvRPCcEr.png?width=1200)
パスを通すように書いてあるので、画像の「Run 'source /home/lisk/bashrc'」を参考に私の場合は下記を打ち込んで実行。
ちなみに、その後「インストールするには'foundryup'と打ち込んでね」、とも書かれています。
source /home/lisk/.bashrc
インストール
foundryup
![](https://assets.st-note.com/img/1726429640-azWAtPMV1jLefGKHk3yug0Ds.png?width=1200)
これでインストール完了したはず。
インストール完了確認(テストプロジェクトを作ってみる)
デフォルトテンプレートでhello_foundryプロジェクトを作成
forge init hello_foundry
下記のディレクトリやファイルが作成される
![](https://assets.st-note.com/img/1726671312-8tbu7HCmyZhqIrj15McnNWEp.png?width=1200)
ビルドする
forge build
![](https://assets.st-note.com/img/1726671479-UGCTzykAaYD2LqsROWX0Qpct.png?width=1200)
![](https://assets.st-note.com/img/1726671584-5a0oO4HplmIdCvLyPX7GbAKY.png?width=1200)
テストする
forge test
![](https://assets.st-note.com/img/1726671669-7UI3YGQbiMfxLrFC8VSqzTaW.png?width=1200)
ちなみに、コントラクトの中身は、
・setNumber関数で数字をセット
・increment関数で数字を+1する
だけでした。
![](https://assets.st-note.com/img/1726671953-Vzb4LcPCNDyOQM85HenEfgo7.png?width=1200)
そして、forge buildしたときに表れたoutディレクトリ内のCounter.solディレクトリ内にABIがありました。
![](https://assets.st-note.com/img/1726672207-rRoqb5HzeKUn7FPwgx8B9uAa.png?width=1200)
ブロックチェーンにデプロイする
スマートコントラクト(・数字をセット、・数字を+1するだけのコントラクト)をブロックチェーン上にデプロイしてみます
Base mainnetにデプロイしてみました。
<my_rpc_url>はmetamask等のwalletでrpc urlとして指定しているurl
<my_private_key>はmetamask等のwalletで使用している秘密鍵
<my_api_key>はBaseScanにSign in(未登録であればSign upから)してAPIキーを発行すると得られます(コマンドでコントラクトにアクセスする場合は不要かも?)
forge create --rpc-url <my_rpc_url> --private-key <my_private_key> --etherscan-api-key <my_api_key> --verify src/Counter.sol:Counter
※APIキーの発行
![](https://assets.st-note.com/img/1726678192-LAjbgvkGP4xNyVo2fe7zFqDJ.png?width=1200)
デプロイされるとTransaction hashが発行されるので、BaseScanで確認してみました。
https://basescan.org/tx/0xba53f5ff92c14414de46ab47a28a2bc778d24e1855a84faf3478ef6e3d2ef8b2
![](https://assets.st-note.com/img/1726677544-N54rlxMSBDqbFUCJwegyQKuI.png?width=1200)
To: の項目にコントラクトアドレスが表示されていますので、クリックして飛んでみます。
![](https://assets.st-note.com/img/1726677589-N2qtEuQ6UmTPALinJ8sxWaHD.png?width=1200)
Contractタブに行くとRead ContractとWrite Contractがあります。
Write Contract
まさに、
・数字をセットする関数
・数字を+1する関数
が存在します(当初と順番は逆ですが)
![](https://assets.st-note.com/img/1726677699-ndxCiQHc49VvGMKa3OPSIjJW.png)
Connect to Web3でMetamaskに接続できるので、setNumberで「5」をセットしてみました。
![](https://assets.st-note.com/img/1726677880-rnFutOPXGWLIo5ADwji60HcU.png?width=1200)
今度はincrementを実行してみました。
Read Contract
setNumberで「5」をセットし、incrementしたので「6」がnumberに入っているはずです。
確認できました(ページ再読み込みをしないと反映されませんでした)。
![](https://assets.st-note.com/img/1726678084-1uiP3qQACSOI8EfLUHpYht5n.png)
(foundryでコントラクトを実行)
setNumber
cast send <contract_address> "setNumber(uint256)" <number> --rpc-url <my_rpc_url> --private-key <my_private_key>
<contract_address>は今回の場合は0x48B4e9051ecC1a4464063eDaaF736856E8616C70
<number>は任意の数字(例えば7)
increment
cast send <contract_address> "increment()" --rpc-url <my_rpc_url> --private-key <my_private_key>