本文へスキップ
このページは英語からの機械翻訳を使用しており、誤りや不明瞭な表現が含まれている可能性があります。最も正確な情報については、オリジナルの英語版をご覧ください。頻繁な更新のため、一部のコンテンツはオリジナルの英語になっている可能性があります。Crowdinでの取り組みに参加して、このページの翻訳改善にご協力ください。 (Crowdin translation page, Contributing guide)

Foundryを使用してスマートコントラクトをデプロイする

はじめに

FoundryはRustで書かれたスマートコントラクト開発フレームワークで、開発者はコマンドラインからsolidityスクリプトを使ってコントラクトの管理とコンパイル、テストの実行、コントラクトのデプロイ、ネットワークとのやり取りができる。

Foundryは、高速でモジュール化されたスマート・コントラクト開発を可能にする4つの主要CLIツールで構成されている:

  • Forge: Forgeを使ってスマートコントラクトのデプロイ、テスト、コンパイルができる。
  • Cast:CastはEVMスマートコントラクトとのやり取りを簡単にするものであり、 チェーンデータの取得、トランザクションの送信などが含まれる。 これには、チェーンデータの取得、トランザクションの送信などが含まれる。
  • Anvil:ローカルノードをスピンアップする必要がありますか? AnvilはFoundryが提供するローカルノード環境である。 AnvilはFoundryが提供するローカルノード環境である。
  • Chisel:高速で便利で冗長なsolidity REPL。

このガイドでは、次のことを説明する:

  • 簡単な鋳造プロジェクトを立ち上げる。
  • Foundryを使用してスマート・コントラクトのサンプルをコンパイルし、テストします。
  • Foundryを使用してスマートコントラクトをKaia Kairosネットワークにデプロイします。
  • キャストとアンビルでメインネットをフォークする。

前提条件

このチュートリアルに従うには、次のことが前提条件となる:

  • コードエディタ: VS Codeなどのソースコードエディタ。
  • MetaMask:コントラクトのデプロイ、トランザクションへの署名、コントラクトとの対話に使用される。
  • RPCエンドポイント:サポートされているエンドポイント・プロバイダーの1つから取得できます。
  • FaucetからKAIAをテスト: 口座に十分なKAIAを入金してください。
  • RustFoundryをインストールする。

開発環境のセットアップ

Foundryのインストールが成功したかどうかを確認するには、以下のコマンドを実行してください:


forge -V

出力

foundryのインストールに成功すると、foundryで使用できるCLIツール(forge、cast、anvil、chisel)にアクセスできるようになります。 次のステップでfoundryプロジェクトをセットアップしてみよう:

**ステップ1新しいプロジェクトを開始するには、以下のコマンドを実行します:


forge init foundry_example

ステップ 2:プロジェクトフォルダに移動します。


cd foundry_example
ls

ファウンドリー・プロジェクトを初期化した後、ディレクトリーには以下が含まれます:

  • src:スマートコントラクトのデフォルトディレクトリ。
  • tests:テスト用のデフォルト・ディレクトリ。
  • foundry.toml:デフォルトのプロジェクト設定ファイル。
  • lib: プロジェクトの依存関係のデフォルト・ディレクトリ。
  • script:solidityスクリプトファイルのデフォルトディレクトリです。

スマート・コントラクトのサンプル

このセクションでは、初期化されたFoundryプロジェクトのサンプル・カウンター契約を使用する。 src/フォルダにあるcounter.solファイルは以下のようになるはずだ:


// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;
contract Counter {
uint256 public number;
function setNumber(uint256 newNumber) public {
number = newNumber;
}
function increment() public {
number++;
}
}

**コード・チュートリアル

これがスマート・コントラクトだ。 行1は、Solidityバージョン0.8.13以上を使用していることを示しています。 4-12行目から**、スマート・コントラクト Counter が作成される。 このコントラクトは、単純にsetNumber関数を使用して新しい数値を格納し、increment関数を呼び出してその数値をインクリメントする。

スマートコントラクトのテスト

Foundry allows us to write tests in solidity as opposed to writing tests in javascript in other smart contract development frameworks. 初期化されたfoundryプロジェクトでは、test/Counter.t.solがsolidityで書かれたテストの例です。 コードは次のようになる: コードは次のようになる:


// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;
import "forge-std/Test.sol";
import "../src/Counter.sol";
contract CounterTest is Test {
Counter public counter;
function setUp() public {
counter = new Counter();
counter.setNumber(0);
}
function testIncrement() public {
counter.increment();
assertEq(counter.number(), 1);
}
function testSetNumber(uint256 x) public {
counter.setNumber(x);
assertEq(counter.number(), x);
}
}

上のコードでは、forge標準ライブラリとCounter.solをインポートしています。

上記のテストは以下のことをチェックする:

  • その数は増えているのか?
  • 数は設定された数と等しいか?

テストがうまくいくかどうかを確認するには、以下のコマンドを実行する:


forge test

出力

テストの書き方や高度なテスト、その他の機能については、Foundryのドキュメントを参照してください。

契約書の作成

このコマンドで契約書をコンパイルする:


forge build

契約の展開

ファウンドリを使用してコントラクトをデプロイするには、RPC URLと、コントラクトをデプロイするアカウントの秘密鍵を提供する必要があります。 ファウンドリを使用してコントラクトをデプロイするには、RPC URLと、コントラクトをデプロイするアカウントの秘密鍵を提供する必要があります。 Kaiaのrpc-providersのリストを見て、あなたのrpc-urlを見つけ、MetaMaskを使ってアカウントを作成してください。

ステップ1: 契約をカイア・カイロス・ネットワークに展開するには、以下のコマンドを実行します。


$ forge create --rpc-url <your_rpc_url> --private-key <your_private_key> src/Counter.sol:Counter


forge create --rpc-url https://public-en-kairos.node.kaia.io --private-key hhdhdhprivatekey hhdhdhud src/Counter.sol:Counter

警告:引数の秘密鍵は、MetaMaskの秘密鍵に置き換えてください。 秘密鍵を公開しないよう、十分注意してください。

出力

ステップ2:Kaiascope を開き、カウンター契約が正常にデプロイされたかチェックする。

ステップ 3:取引ハッシュをコピーして検索フィールドに貼り付け、Enterキーを押します。 最近配備された契約が表示されるはずだ。

契約とのやり取り

スマート・コントラクトのデプロイに成功したら、関数を正しく呼び出して実行したいだろう。 Cast を使って、Kaia Kairos Networkに配備されたコントラクトとやりとりしてみましょう。 スマート・コントラクトのデプロイに成功したら、関数を正しく呼び出して実行したいだろう。 Cast を使って、Kaia Kairos Networkに配備されたコントラクトとやりとりしてみましょう。 このセクションでは、cast call を使って read-only 関数を実行し、cast send を使って write 関数を実行する方法を学びます。

A. cast call:コントラクトに格納されている数字を取得するには、number関数を呼び出します。 以下のコマンドを実行し、その動きを見てみよう。


cast call YOUR_CONTRACT_ADDRESS "number()" --rpc-url RPC-API-ENDPOINT-HERE


cast call 0xe4d576c447733da7ca9197e88d34a74c3c865cff "number()" --rpc-url https://public-en-kairos.node.kaia.io

出力

このデータを16進数で取得してください:


0x0000000000000000000000000000000000000000000000000000000000000000

しかし、希望する結果を得るには、上記の結果をキャストで変換する。 この場合、データは数字なので、10進数に変換すれば結果は0になる:


cast --to-base 0x0000000000000000000000000000000000000000000000000000000000000000 10

出力

B. cast send:カウンターのコントラクトで setNumber 関数を実行するようなトランザクションに署名して発行するには、以下のコマンドを実行する:


cast send --rpc-url=<RPC-URL> <CONTRACT-ADDRESS> “setNumber(uint256)” arg --private-key=<PRIVATE-KEY>


cast send --rpc-url=https://public-en-kairos.node.kaia.io 0xe4d576c447733da7ca9197e88d34a74c3c865cff "setNumber(uint256)" 10 --private-key=<private key>

出力

クロスチェック番号


cast call 0xe4d576c447733da7ca9197e88d34a74c3c865cff "number()" --rpc-url https://public-en-kairos.node.kaia.io

出力

このデータを16進数で取得してください:


0x000000000000000000000000000000000000000000000000000000000000000a

しかし、希望する結果を得るには、上記の結果をキャストで変換する。 しかし、希望する結果を得るには、上記の結果をキャストで変換する。 この場合、データは数字なので、それを基数10に変換して、結果10を得ることができる:


cast --to-base 0x000000000000000000000000000000000000000000000000000000000000000a 10

出力

キャストとアンヴィルによるメインネットのフォーク

Foundryでは、メインネットをローカル開発ネットワーク(Anvil)にフォークすることができる。 Foundryでは、メインネットをローカル開発ネットワーク(Anvil)にフォークすることができる。 また、Castを使って、実際のネットワーク上でコントラクトと対話し、テストすることができます。

はじめに

Now that you have your Foundry project up and running, you can fork the mainnet (cypress) by running the command below:


anvil --fork-url rpc-url


anvil --fork-url https://archive-en.node.kaia.io

出力

このコマンドをうまく実行すると、ターミナルは上の画像のようになる。 10,000トークンと公開鍵、秘密鍵で10アカウントが作成されます。 フォークされたチェーンの RPC サーバーは 127.0.0.1:8545 で待ち受けている。

ネットワークをフォークしたことを確認するには、最新のブロック番号を照会することができる:


curl --data '{"method":"eth_blockNumber","params":[],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545

上記のタスクの結果は、16進数から10進数を使って変換できる。 ネットワークをフォークした時点から最新のブロック番号を取得する必要がある。 これを確認するには、Kaiascopeのブロック番号をクロスリファレンスする。 ネットワークをフォークした時点から最新のブロック番号を取得する必要がある。 これを確認するには、Kaiascopeのブロック番号をクロスリファレンスする。

イラスト

このセクションでは、oUSDC を保持している誰かから Anvil が作成したアカウントに oUSDC トークンを転送する方法について説明します (0x70997970C51812dc3A010C7d01b50e0d17dc79C8 - Bob)

OUSDCを譲渡する。

Kaiascopeに行き、oUSDCトークンの保有者を検索する(ここ)。 ランダムにアカウントを選んでみよう。 この例では、0x8e61241e0525bd45cfc43dd7ba0229b422545bcaを使用する。

契約とアカウントを環境変数としてエクスポートしよう:


export BOB=0x70997970C51812dc3A010C7d01b50e0d17dc79C8
export oUSDC=0x754288077d0ff82af7a5317c7cb8c444d421d103
export oUSDCHolder=0x8e61241e0525bd45cfc43dd7ba0229b422545bca

キャストコールを使ってボブの残高をチェックできる:


cast call $oUSDC \
"balanceOf(address)(uint256)" \
$BOB

出力

同様に、キャスト・コールを使ってoUSDCホルダーの残高をチェックすることもできる:


cast call $oUSDC \
"balanceOf(address)(uint256)" \
$oUSDCHolder

出力

幸運なユーザーからアリスへ、キャスト送信を使ってトークンを転送してみましょう:


cast rpc anvil_impersonateAccount $oUSDCHolder
cast send $oUSDC \
--unlocked \
--from $oUSDCHolder\
"transfer(address,uint256)(bool)" \
$BOB \
1000000
```0000

出力

転送がうまくいったか確認してみよう:


cast call $oUSDC \
"balanceOf(address)(uint256)" \
$BOB

出力


cast call $oUSDC \
"balanceOf(address)(uint256)" \
$oUSDCHolder

出力

ファウンドリーに関するより詳細なガイドについては、ファウンドリードキュメントを参照してください。 ファウンドリーに関するより詳細なガイドについては、ファウンドリードキュメントを参照してください。 また、このガイドのコードの完全な実装はGitHubにあります。

ページを改善してください。