deploying-contracts-on-base について
deploying-contracts-on-baseは、Foundryを使ってBaseのテストネットまたはメインネットにスマートコントラクトをデプロイするためのスキルです。鍵と入力の安全管理、テスト用資金の取得、BaseScanでの検証を扱います。
主な機能
- 01Baseテストネットとメインネットのデプロイコマンド
- 02Foundryの暗号化キーストアの利用方法
- 03CDP Faucetでテスト用ETHを取得する手順
- 04BaseScanでのコントラクト検証設定
- 05デプロイ入力の検証と鍵の保護
活用シーン
- 01Base Sepoliaでコントラクトのデプロイを試験
- 02Baseメインネットにコントラクトをデプロイ
- 03デプロイ済みコントラクトをBaseScanで検証
- 04デプロイ作業の鍵と入力の安全性を確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ base/ skills --skill deploying-contracts-on-baseインストール後、Claude Code で/deploying-contracts-on-baseを入力して読み込まれたか確認します。
詳細
Baseでのコントラクトのデプロイ
前提条件
- RPC エンドポイントを設定します(テストネット:
sepolia.base.org、メインネット:mainnet.base.org) - Foundryの暗号化されたキーストアに秘密鍵を保存します — 鍵を絶対にコミットしないでください
- CDP FaucetからテストネットETHを取得します(テストネットのみ)
- コントラクトの検証用にBaseScan APIキーを取得します
セキュリティ
- 秘密鍵をバージョン管理に絶対にコミットしないでください — Foundryの暗号化されたキーストア(
cast wallet import)を使用します - APIキーをソースファイルに絶対にハードコードしないでください — 環境変数、または
${ENV_VAR}参照を使ったfoundry.tomlを使用します .envファイルを絶対に公開しないでください —.envを.gitignoreに追加します- メインネットへのデプロイでは、レート制限やデータ漏えいを避けるために(パブリックエンドポイントではなく)本番用RPCプロバイダーを使用します
- デプロイしたコードを公開監査できるよう、BaseScanでコントラクトを検証します
入力の検証
シェルコマンドを構築する前に、ユーザーが指定したすべての値を検証してください。
- contract-path:
^[a-zA-Z0-9_/.-]+\.sol:[a-zA-Z0-9_]+$に一致する必要があります。スペース、セミコロン、パイプ、バッククォートを含むパスは拒否します。 - rpc-url:有効なHTTPS URL(
^https://[^\s;|&]+$)である必要があります。HTTPS以外のURLや不正な形式のURLは拒否します。 - keystore-account:英数字とハイフン/アンダースコア(
^[a-zA-Z0-9_-]+$)のみを使用できます。 - etherscan-api-key:英数字(
^[a-zA-Z0-9]+$)のみを使用できます。
検証していないユーザー入力をシェルコマンドに渡さないでください。
CDP FaucetでテストネットETHを取得する
Base Sepoliaでガス代を支払うには、テストネットETHが必要です。CDP Faucetを使って取得してください。対応トークン:ETH、USDC、EURC、cbBTC。ETHの取得は1回あたり0.0001 ETH、24時間あたり1000回までです。
オプションA:CDP Portal UI(すばやく設定する場合に推奨)
エージェントの動作: ブラウザーを利用できる場合は、ポータルに移動して直接取得してください。利用できない場合は、ユーザーに以下の手順を実行してもらい、資金を受け取ったウォレットアドレスを提示してもらってください。
- CDP Portalにサインインします(必要に応じてportal.cdp.coinbase.com/create-accountでアカウントを作成します)
- Faucetsに移動します
- ネットワークとしてBase Sepoliaを選択します
- トークンとしてETHを選択します
- ウォレットアドレスを入力し、Claimをクリックします
- sepolia.basescan.orgで資金が届いたことを確認します
オプションB:CDP SDKを使ったプログラムでの取得
CDP APIキーとWallet Secretが必要です。
npm install @coinbase/cdp-sdk dotenv
import { CdpClient } from "@coinbase/cdp-sdk";
import dotenv from "dotenv";
dotenv.config();
const cdp = new CdpClient();
const account = await cdp.evm.createAccount();
const faucetResponse = await cdp.evm.requestFaucet({
address: account.address,
network: "base-sepolia",
token: "eth",
});
console.log(`Funded: https://sepolia.basescan.org/tx/${faucetResponse.transactionHash}`);
.envで必要な環境変数:
CDP_API_KEY_ID=your-api-key-id
CDP_API_KEY_SECRET=your-api-key-secret
CDP_WALLET_SECRET=your-wallet-secret
新しいウォレットを作成する代わりに既存のウォレットに資金を送るには、そのアドレスを直接requestFaucetに渡します。
BaseScan APIキーを取得する
BaseScan上のコントラクトを自動検証する--verifyフラグには、BaseScan APIキーが必要です。BaseScanはEtherscanと同じアカウントシステムを使用します。
エージェントの動作: ブラウザーを利用できる場合は、BaseScanのサイトに移動してキーを作成してください。利用できない場合は、ユーザーに以下の手順を実行してもらい、APIキーを提示してもらってください。
- basescan.org/myapikey(またはetherscan.io/myapikey — 同じアカウントを使用できます)に移動します
- サインインするか、無料アカウントを作成します
- Addをクリックして新しいAPIキーを作成します
- キーをコピーし、環境に設定します。
export ETHERSCAN_API_KEY=your-basescan-api-key
または、forgeに直接渡します。
forge create ... --etherscan-api-key <your-key>
あるいは、foundry.tomlに追加します。
[etherscan]
base-sepolia = { key = "${ETHERSCAN_API_KEY}", url = "https://api-sepolia.basescan.org/api" }
base = { key = "${ETHERSCAN_API_KEY}", url = "https://api.basescan.org/api" }
デプロイコマンド
テストネット
forge create src/MyContract.sol:MyContract \
--rpc-url https://sepolia.base.org \
--account <keystore-account> \
--verify \
--etherscan-api-key $ETHERSCAN_API_KEY
メインネット
forge create src/MyContract.sol:MyContract \
--rpc-url https://mainnet.base.org \
--account <keystore-account> \
--verify \
--etherscan-api-key $ETHERSCAN_API_KEY
重要事項
- コントラクトの形式:
<contract-path>:<contract-name> --verifyフラグを使うとBaseScanで自動検証されます(APIキーが必要です)- エクスプローラー:basescan.org(メインネット)、sepolia.basescan.org(テストネット)
- CDP Faucetのドキュメント:docs.cdp.coinbase.com/faucets
よくある問題
| エラー | 原因 |
|---|---|
nonce has already been used | ノードの同期が完了していません |
| トランザクションに失敗する | ガス代に必要な ETH が不足しています — Faucet から取得 |
| 検証に失敗する | 対象ネットワークの RPC エンドポイントが正しくありません |
| 検証で 403/未認証エラーが発生する | BaseScan API キーがないか、無効です |