Foundry または Hardhat によるコントラクトのデプロイ

Foundry または Hardhat 2 を使用して EVM ネットワークに Hello.sol をデプロイし、Chain ID を検証して、トランザクションレシートとコントラクトの応答を確認します。

ネットワークの選択

対象チェーンの統合ガイド(対応チェーン 経由でアクセス)に従って network.mjs を作成し、RPC_URL と CHAIN_ID をエクスポートします。チェーンガイドは GET /v1/chains から Chain ID とメソッドポリシーを読み取り、ガストークン、個別のブロードキャスト用 RPC が必要かどうか、およびチェーン固有のデプロイ設定について説明しています。

以下のツールのいずれかを選択してください。どちらもコンストラクタ引数のない同じ小規模なコントラクトをデプロイします。

選択したネットワークのネイティブガストークンをデプロイヤーアドレスに供給してください。ローカル環境で DEPLOYER_PRIVATE_KEY を安全に設定し、絶対にコミットしないでください。以下のコマンドはトランザクションをブロードキャストし、ガスを消費します。

コンストラクタ引数のない Hello.sol を作成します:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
contract Hello {
    event Ping(address indexed sender);
    function ping() external { emit Ping(msg.sender); }
    function hello() external pure returns (string memory) {
        return "hello";
    }
}

Foundry

初期化された Foundry プロジェクトで、コントラクトを src/Hello.sol に配置し、次の foundry.toml を使用します:

[profile.default]
src = "src"
out = "out"
libs = ["lib"]
solc_version = "0.8.24"
evm_version = "paris"

[rpc_endpoints]
target = "${RPC_URL}"
: "${RPC_URL:?Set RPC_URL}" "${CHAIN_ID:?Set CHAIN_ID}" "${DEPLOYER_PRIVATE_KEY:?Set deployer key}"
test "$(cast chain-id --rpc-url "$RPC_URL")" = "$CHAIN_ID" || exit 1
forge build
forge create src/Hello.sol:Hello --rpc-url target \
  --chain "$CHAIN_ID" --private-key "$DEPLOYER_PRIVATE_KEY" --broadcast

トランザクションハッシュとデプロイされたアドレスを保存しておきます。cast receipt "$TX_HASH" --rpc-url "$RPC_URL" を使用して取り込み状況とステータスを確認し、cast call "$CONTRACT_ADDRESS" "hello()(string)" --rpc-url "$RPC_URL" でコントラクトを読み取ります。デプロイの出力からこれら 2 つの変数を設定してください。

Hardhat 2 と ethers 6

独立した CommonJS プロジェクト(npm init -y)で、npm install --save-dev hardhat@2 @nomicfoundation/hardhat-ethers@3 ethers@6 をインストールします。同じコントラクトを contracts/Hello.sol に配置し、これを hardhat.config.cjs として保存します:

require('@nomicfoundation/hardhat-ethers');
const { RPC_URL, CHAIN_ID, DEPLOYER_PRIVATE_KEY } = process.env;
if (!RPC_URL || !/^[1-9][0-9]*$/.test(CHAIN_ID ?? '') || !DEPLOYER_PRIVATE_KEY) {
  throw new Error('Set RPC_URL, CHAIN_ID and DEPLOYER_PRIVATE_KEY');
}
module.exports = {
  solidity: { version: '0.8.24', settings: { evmVersion: 'paris' } },
  networks: {
    target: { url: RPC_URL, chainId: Number(CHAIN_ID), accounts: [DEPLOYER_PRIVATE_KEY] },
  },
};

scripts ディレクトリを作成し、scripts/deploy.cjs として保存します:

const { ethers } = require('hardhat');
async function main() {
  const contract = await ethers.deployContract('Hello');
  console.log(contract.deploymentTransaction().hash);
  await contract.waitForDeployment();
  console.log(await contract.getAddress());
}
main().catch(error => { console.error(error); process.exitCode = 1; });
npx hardhat compile
npx hardhat run scripts/deploy.cjs --network target

ネットワークの chainId は RPC に対してチェックされます。Hardhat 2 ネットワーク設定 および Foundry 設定(アクセス日:2026-10-07)を参照してください。

イベントの読み取り

LOG_ADDRESS をデプロイされたアドレスに設定します。ping() を呼び出した後、対象チェーンのガイドにあるイベント読み取り方法(チェーンの /v1/chains における ws フィールドに応じて、WebSocket 購読または HTTP チャンクポーリング)に従って Ping イベントを読み取ります。

最終更新:

このページの目次