deploying-contracts-on-base

Déploie des smart contracts sur Base en utilisant Foundry. Couvre les commandes `forge create`, la vérification de contrats, la configuration du faucet testnet via CDP, et la configuration de la clé API BaseScan. À utiliser lors du déploiement de contrats Solidity sur Base Mainnet ou le testnet Sepolia. Couvre des formulations telles que « deploy contract to Base », « forge create on Base », « verify contract on BaseScan », « get testnet ETH », « Base Sepolia faucet », « how do I deploy to Base » ou « publish my contract ».

npx skills add https://github.com/base/skills --skill deploying-contracts-on-base

Déployer des contrats sur Base

Prérequis

  1. Configurer le point de terminaison RPC (testnet : sepolia.base.org, mainnet : mainnet.base.org)
  2. Stocker les clés privées dans le keystore chiffré de Foundry — ne jamais committer les clés
  3. Obtenir du ETH testnet depuis la faucet CDP (testnet uniquement)
  4. Obtenir une clé API BaseScan pour la vérification des contrats

Sécurité

  • Ne jamais committer les clés privées dans le contrôle de version — utiliser le keystore chiffré de Foundry (cast wallet import)
  • Ne jamais coder en dur les clés API dans les fichiers source — utiliser des variables d'environnement ou foundry.toml avec des références ${ENV_VAR}
  • Ne jamais exposer les fichiers .env — ajouter .env à .gitignore
  • Utiliser des fournisseurs RPC de production (pas des points de terminaison publics) pour les déploiements mainnet afin d'éviter les limites de débit et les fuites de données
  • Vérifier les contrats sur BaseScan pour permettre un audit public du code déployé

Validation des entrées

Avant de construire des commandes shell, valider toutes les valeurs fournies par l'utilisateur :

  • contract-path : Doit correspondre à ^[a-zA-Z0-9_/.-]+\.sol:[a-zA-Z0-9_]+$. Rejeter les chemins avec espaces, points-virgules, pipes ou backticks.
  • rpc-url : Doit être une URL HTTPS valide (^https://[^\s;|&]+$). Rejeter les URLs non-HTTPS ou malformées.
  • keystore-account : Doit être alphanumérique avec tirets/traits de soulignement (^[a-zA-Z0-9_-]+$).
  • etherscan-api-key : Doit être alphanumérique (^[a-zA-Z0-9]+$).

Ne pas passer d'entrée utilisateur non validée dans les commandes shell.

Obtenir du ETH testnet via la faucet CDP

ETH testnet est nécessaire pour payer le gaz sur Base Sepolia. Utiliser la faucet CDP pour le réclamer. Tokens supportés : ETH, USDC, EURC, cbBTC. Les réclamations ETH sont limitées à 0,0001 ETH par réclamation, 1000 réclamations par 24 heures.

Option A : Interface du portail CDP (recommandée pour une configuration rapide)

Comportement de l'agent : Si vous avez accès au navigateur, naviguer vers le portail et réclamer directement. Sinon, demander à l'utilisateur de compléter ces étapes et fournir l'adresse du portefeuille financé.

  1. Se connecter au portail CDP (créer un compte sur portal.cdp.coinbase.com/create-account si nécessaire)
  2. Aller à Faucets
  3. Sélectionner le réseau Base Sepolia
  4. Sélectionner le token ETH
  5. Entrer l'adresse du portefeuille et cliquer sur Claim
  6. Vérifier sur sepolia.basescan.org que les fonds sont arrivés

Option B : Programmation via SDK CDP

Nécessite une clé API CDP et un secret de portefeuille.

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}`);

Variables d'environnement nécessaires dans .env :

CDP_API_KEY_ID=your-api-key-id
CDP_API_KEY_SECRET=your-api-key-secret
CDP_WALLET_SECRET=your-wallet-secret

Pour financer un portefeuille existant au lieu d'en créer un nouveau, passer son adresse directement à requestFaucet.

Obtenir une clé API BaseScan

Une clé API BaseScan est nécessaire pour que le drapeau --verify vérifie automatiquement les contrats sur BaseScan. BaseScan utilise le même système de compte qu'Etherscan.

Comportement de l'agent : Si vous avez accès au navigateur, naviguer vers le site BaseScan et créer la clé. Sinon, demander à l'utilisateur de compléter ces étapes et fournir la clé API.

  1. Aller à basescan.org/myapikey (ou etherscan.io/myapikey — le même compte fonctionne)
  2. Se connecter ou créer un compte gratuit
  3. Cliquer sur Add pour créer une nouvelle clé API
  4. Copier la clé et la définir dans votre environnement :
export ETHERSCAN_API_KEY=your-basescan-api-key

Sinon, la passer directement à forge :

forge create ... --etherscan-api-key <your-key>

Ou l'ajouter à 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" }

Commandes de déploiement

Testnet

forge create src/MyContract.sol:MyContract \
  --rpc-url https://sepolia.base.org \
  --account <keystore-account> \
  --verify \
  --etherscan-api-key $ETHERSCAN_API_KEY

Mainnet

forge create src/MyContract.sol:MyContract \
  --rpc-url https://mainnet.base.org \
  --account <keystore-account> \
  --verify \
  --etherscan-api-key $ETHERSCAN_API_KEY

Points clés

  • Format du contrat : <contract-path>:<contract-name>
  • Le drapeau --verify vérifie automatiquement sur BaseScan (nécessite une clé API)
  • Explorateurs : basescan.org (mainnet), sepolia.basescan.org (testnet)
  • Docs faucet CDP : docs.cdp.coinbase.com/faucets

Problèmes courants

Erreur Cause
nonce has already been used Synchronisation du nœud incomplète
La transaction échoue ETH insuffisant pour le gaz — réclamer depuis la faucet
La vérification échoue Mauvais point de terminaison RPC pour le réseau cible
Vérification 403/unauthorized Clé API BaseScan manquante ou invalide

Skills similaires