alchemy-cli

Par projectopensea · opensea-skill

Utilisez l'Alchemy CLI (`@alchemy/cli`) pour les requêtes blockchain en direct, l'administration et l'automatisation locale via EVM JSON-RPC, Token, Transfers, Prices, Portfolio, Simulation, Solana RPC/DAS/gRPC, Sui gRPC, Webhooks et la gestion d'applications. Chemin d'exécution privilégié lorsque le CLI est installé localement. Pour les données de marketplace NFT, les listings ou le fulfillment Seaport, utilisez `opensea-api` / `opensea-marketplace`. Pour le code d'application en production, utilisez `alchemy-api` (avec clé API) ou `alchemy-agentic-gateway` (sans clé).

npx skills add https://github.com/projectopensea/opensea-skill --skill alchemy-cli

Alchemy CLI

Utilisez la Alchemy CLI (@alchemy/cli) pour des requêtes blockchain en direct, des tâches d'administration et de l'automation locale depuis le terminal. La CLI mappe chaque produit Alchemy (Node JSON-RPC, Token, NFT, Transfers, Prices, Portfolio, Simulation, Solana, Webhooks, Apps) à des invocations alchemy <command> avec sortie JSON structurée.

Quand utiliser cette skill (scope_in)

Utilisez alchemy-cli quand tous les critères suivants sont vrais :

  • L'utilisateur veut du travail agent en direct — requêtes en direct, analyse, tâches d'administration ou automation locale que l'agent exécute maintenant dans cette session
  • @alchemy/cli est installé localement, ou la CLI et un serveur MCP sont disponibles, ou aucun n'est disponible (auquel cas installez la CLI — voir Install)

La CLI est le chemin d'exécution local de secours préféré pour le travail agent en direct. En cas de doute entre CLI et MCP, préférez la CLI.

Quand NE PAS utiliser cette skill (scope_out, handoff)

Situation Utilisez cette skill à la place
Données NFT/token, recherche, statistiques de collection opensea-api
Acheter/vendre NFTs, listes, offres, exécution Seaport opensea-marketplace
Échanges de tokens ERC20 opensea-swaps
Configuration de signature de portefeuille opensea-wallet
Construire/enregistrer/gater des outils agent IA opensea-tool-sdk
MCP est déjà intégré dans votre client et la CLI n'est pas installée localement alchemy-mcp
Construire du code applicatif qui s'exécute en dehors de cette session agent, avec une clé API Alchemy alchemy-api
Construire du code applicatif sans clé API, ou en tant qu'agent autonome qui doit se financer lui-même, ou vous voulez explicitement x402/MPP alchemy-agentic-gateway

Ne pas utiliser cette skill pour écrire du code applicatif de production — les commandes CLI sont pour le travail agent en direct, pas pour être embarquées dans un logiciel livré.

Install

npm i -g @alchemy/cli

Si la CLI n'est pas installée et que l'utilisateur veut du travail agent en direct, installez-la. Ne revenez pas à des appels curl/HTTP bruts — ce chemin est couvert par alchemy-api.

Bootstrap

Exécutez ceci au début de chaque session pour obtenir le contrat de commande complet (chaque commande, flag, méthode d'authentification, code d'erreur et exemple) :

alchemy --json --no-interactive agent-prompt

Règles d'exécution

  • TOUJOURS passer --json --no-interactive sur chaque commande
  • Parser stdout en JSON sur le code de sortie 0
  • Parser stderr en JSON sur un code de sortie non zéro
  • NE JAMAIS exécuter alchemy seul sans --json --no-interactive
  • NE JAMAIS utiliser curl ou HTTP brut quand une commande alchemy CLI existe pour la tâche — c'est le chemin alchemy-api (clé API), pas cette skill
  • NE JAMAIS utiliser la CLI pour générer du code applicatif de production ; handoff à alchemy-api ou alchemy-agentic-gateway pour du code livré

Preflight

Avant la première commande, exécutez les deux vérifications :

alchemy --json --no-interactive setup status
alchemy --json --no-interactive gas

setup status retourne {"complete": true, "satisfiedBy": "<source>"} si une authentification est configurée. Ne vous fiez pas à complete: true seul — il existe un faux positif connu où setup status reporte complete: true avec satisfiedBy: "auth_token", mais les commandes RPC échouent toujours avec AUTH_REQUIRED car aucune clé API n'a été dérivée du token d'auth.

gas est un test de smoke RPC léger qui détecte ceci. S'il retourne {"gasPrice": "0x...", ...}, RPC est correctement configuré. S'il retourne {"error": {"code": "AUTH_REQUIRED", ...}}, exécutez alchemy auth login (qui récupère et enregistre la clé API) ou alchemy config set api-key <key>, puis relancez gas pour confirmer.

Si setup status reporte complete: false, suivez d'abord les nextCommands dans la réponse, puis exécutez gas pour vérifier.

Configuration de l'authentification

La façon la plus rapide de s'authentifier est via une connexion navigateur :

alchemy auth login

Ceci ouvre un navigateur pour s'authentifier avec votre compte Alchemy et configure automatiquement la CLI avec vos identifiants.

Pour vérifier le statut d'authentification : alchemy auth status Pour se déconnecter : alchemy auth logout

Méthodes d'authentification alternatives

Méthode Commande config Variable d'env Utilisée par
Connexion navigateur alchemy auth login -- Toutes les commandes (dérive clé API + clé d'accès depuis votre compte)
Clé API alchemy config set api-key <key> ALCHEMY_API_KEY balance, tx, receipt, block, gas, logs, rpc, trace, debug, tokens, nfts, transfers, prices, portfolio, simulate, bundler, gas-manager, solana
Clé d'accès alchemy config set access-key <key> ALCHEMY_ACCESS_KEY apps (tous les sous-commandes incl. configured-networks)
Clé webhook alchemy config set webhook-api-key <key> ALCHEMY_WEBHOOK_API_KEY webhooks
Portefeuille x402 alchemy wallet generate puis alchemy config set x402 true ALCHEMY_WALLET_KEY balance, tx, block, rpc, trace, debug, tokens, nfts, transfers

alchemy network list et alchemy version / update-check ne nécessitent pas d'authentification.

Sélectionner une app par défaut

De nombreux sous-commandes apps (et les flux contrôlés par clé d'accès) opèrent sur une « app par défaut ». Si vous voyez APP_REQUIRED dans une réponse d'erreur, définissez-en une :

alchemy --json --no-interactive apps select <id>
# ou de manière équivalente
alchemy --json --no-interactive config set app <id>

Obtenez les clés API/accès sur dashboard.alchemy.com.

Correspondance tâche-commande

Node (EVM)

Tâche Commande
Solde ETH alchemy balance <address>
Détails de transaction alchemy tx <hash>
Reçu de transaction alchemy receipt <hash>
Détails du bloc alchemy block <number\|latest>
Prix du gas alchemy gas
Logs d'événements alchemy logs --address <addr> --from-block <n> --to-block <n>
JSON-RPC brut alchemy rpc <method> [params...]
Méthodes trace alchemy trace <method> [params...]
Méthodes debug alchemy debug <method> [params...]

Données

Tâche Commande
Soldes ERC-20 alchemy tokens balances <address>
Soldes ERC-20 (formatés) alchemy tokens balances <address> --metadata
Métadonnées de token alchemy tokens metadata <contract>
Tolérance de token alchemy tokens allowance --owner <addr> --spender <addr> --contract <addr>
Lister les NFTs possédés alchemy nfts <address> [--limit <n>] [--page-key <key>]
Métadonnées de NFT alchemy nfts metadata --contract <addr> --token-id <id>
Métadonnées de contrat NFT alchemy nfts contract <address>
Historique de transfert alchemy transfers <address> --category erc20,erc721,erc1155,external,internal,specialnft [--from-block <n>] [--to-block <n>] [--max-count <n>] [--page-key <key>]
Prix spot par symbole alchemy prices symbol ETH,USDC
Prix spot par adresse alchemy prices address --addresses '<json>'
Prix historiques alchemy prices historical --body '<json>'
Portfolio de tokens multi-réseaux alchemy portfolio tokens --body '<json>'
Soldes de tokens par paires adresse/réseau alchemy portfolio token-balances --body '<json>'
Portfolio de NFTs multi-réseaux alchemy portfolio nfts --body '<json>'
Contrats de NFT par paires adresse/réseau alchemy portfolio nft-contracts --body '<json>'
Simuler une seule tx (deltas d'actifs) alchemy simulate asset-changes --tx '<json>' [--block-tag <tag>]
Simuler une seule tx (trace d'exécution) alchemy simulate execution --tx '<json>' [--block-tag <tag>]
Simuler un bundle (deltas d'actifs) alchemy simulate asset-changes-bundle --txs '<json-array>' [--block-tag <tag>]
Simuler un bundle (trace d'exécution) alchemy simulate execution-bundle --txs '<json-array>' [--block-tag <tag>]

Solana

Tâche Commande
JSON-RPC Solana alchemy solana rpc <method> [params...]
Solana DAS (NFTs/actifs) alchemy solana das <method> '<json>'

Webhooks

Tâche Commande
Lister les webhooks alchemy webhooks list
Créer un webhook alchemy webhooks create --body '<json>' [--dry-run]
Mettre à jour un webhook alchemy webhooks update --body '<json>' [--dry-run]
Supprimer un webhook alchemy webhooks delete <id> [--yes] [--dry-run]
Obtenir les adresses du webhook d'activité d'adresse alchemy webhooks addresses <id>
Obtenir les filtres du webhook d'activité NFT alchemy webhooks nft-filters <id>

Abstraction de compte (ERC-4337)

Tâche Commande
Envoyer une UserOperation alchemy bundler send-user-operation --user-op '<json>' --entry-point <addr>
Estimer le gas UserOperation alchemy bundler estimate-user-operation-gas --user-op '<json>' --entry-point <addr> [--state-override '<json>']
Obtenir le reçu UserOperation alchemy bundler get-user-operation-receipt --user-op-hash <hash>
Demander des données gas + paymaster alchemy gas-manager request-gas-and-paymaster --body '<json>'
Demander un devis de token paymaster alchemy gas-manager request-paymaster-token-quote --body '<json>'

Portefeuille (x402)

Tâche Commande
Générer un nouveau portefeuille alchemy wallet generate
Importer un portefeuille à partir d'un fichier clé alchemy wallet import <path>
Afficher l'adresse du portefeuille localement configuré alchemy wallet address

Gestion d'app

Tâche Commande
Lister les apps alchemy apps list [--cursor <c>] [--limit <n>] [--all] [--search <q>] [--id <appId>]
Obtenir les détails d'une app alchemy apps get <id>
Créer une app alchemy apps create --name "My App" --networks eth-mainnet [--description <desc>] [--products <ids>] [--dry-run]
Mettre à jour les métadonnées d'une app alchemy apps update <id> --name "New Name" [--description <desc>] [--dry-run]
Mettre à jour la liste blanche de réseau d'une app alchemy apps networks <id> --networks eth-mainnet,base-mainnet [--dry-run]
Mettre à jour la liste blanche d'adresse d'une app alchemy apps address-allowlist <id> --addresses 0xAA,0xBB [--dry-run]
Mettre à jour la liste blanche d'origine d'une app alchemy apps origin-allowlist <id> --origins https://a.com,https://b.com [--dry-run]
Mettre à jour la liste blanche IP d'une app alchemy apps ip-allowlist <id> --ips 1.2.3.4,5.6.7.8 [--dry-run]
Supprimer une app alchemy apps delete <id> [--yes] [--dry-run]
Sélectionner l'app par défaut alchemy apps select <id> (équivalent à alchemy config set app <id>)
Lister les réseaux configurés pour une app alchemy apps configured-networks [--app-id <id>]
Lister les identifiants de chaîne Admin API (pour apps create/update) alchemy apps chains
Lister tous les slugs de réseau RPC (pour --network) alchemy network list [--mainnet-only] [--testnet-only] [--search <term>]

Administration CLI

Tâche Commande
Vérifier les mises à jour de CLI alchemy update-check
Afficher la configuration alchemy config list
Réinitialiser la configuration alchemy config reset --yes
Version de la CLI alchemy version

Flags globaux

Flag Description
--json Forcer la sortie JSON (activée automatiquement en pipe)
--no-interactive Désactiver les prompts et REPL
-n, --network <network> Cibler le réseau (défaut : eth-mainnet, env : ALCHEMY_NETWORK)
--api-key <key> Remplacer la clé API par commande (env : ALCHEMY_API_KEY)
--access-key <key> Remplacer la clé d'accès par commande (env : ALCHEMY_ACCESS_KEY)
--x402 Utiliser l'authentification gateway basée sur portefeuille x402 pour cette commande
--wallet-key-file <path> Chemin du fichier clé privée du portefeuille (pour x402)
--timeout <ms> Timeout des requêtes en millisecondes
-q, --quiet Supprimer la sortie non essentielle
--verbose Enregistrer les détails requête/réponse sur stderr
--debug Activer les diagnostics de debug
--no-color Désactiver la sortie en couleur
--reveal Afficher les secrets en texte brut (à utiliser avec prudence ; destiné aux flux de révélation explicite)

Gestion des erreurs

Les erreurs retournent du JSON structuré sur stderr. Chaque erreur a un code, un exitCode (1–9), un booléen retryable, et un indice recovery. Codes clés (depuis agent-prompt) :

Code Exit Retryable Récupération
AUTH_REQUIRED 3 Non Exécutez alchemy auth login, ou définissez ALCHEMY_API_KEY / alchemy config set api-key <key>
INVALID_API_KEY 3 Non Vérifiez la clé API ; définissez-en une valide avec alchemy config set api-key <key>
ACCESS_KEY_REQUIRED 3 Non Définissez ALCHEMY_ACCESS_KEY ou exécutez alchemy config set access-key <key>
INVALID_ACCESS_KEY 3 Non Vérifiez la clé d'accès sur dashboard.alchemy.com
APP_REQUIRED 3 Non Sélectionnez une app par défaut : alchemy apps select <id> (ou alchemy config set app <id>)
NETWORK_NOT_ENABLED 3 Non Activez le réseau cible pour votre app sur dashboard.alchemy.com
SETUP_REQUIRED 3 Non Exécutez alchemy --json setup status et suivez nextCommands
PAYMENT_REQUIRED 9 Non Financez le portefeuille x402 ou basculez vers l'authentification par clé API
RATE_LIMITED 5 Oui Attendez et relancez avec backoff ; envisagez de mettre à niveau votre plan
NETWORK_ERROR 6 Oui Vérifiez la connexion et relancez
RPC_ERROR 7 Non Vérifiez la méthode, les paramètres et le réseau ; vérifiez que la clé API a accès
ADMIN_API_ERROR 8 Non Vérifiez le message d'erreur ; vérifiez les permissions de la clé d'accès
NOT_FOUND 4 Non Vérifiez que l'identifiant de ressource (adresse, hash, id) est correct
INVALID_ARGS 2 Non Vérifiez l'utilisation de la commande via alchemy --json help <command>
INTERNAL_ERROR 1 Non Erreur inattendue ; relancez ou signalez un bug

Obtenez la liste canonique complète à tout moment avec alchemy --json --no-interactive agent-prompt.

Handoff vers d'autres skills

L'utilisateur veut... Handoff vers
Intégrer Alchemy dans du code applicatif qui se livre en production, avec une clé API alchemy-api
Intégrer Alchemy dans du code applicatif sans clé API, ou pay-per-request en tant qu'agent autonome alchemy-agentic-gateway
Exécuter du travail en direct mais la CLI n'est pas installée et il préfère ne pas l'installer (MCP est intégré) alchemy-mcp

Pontage vers le flux alchemy-api (extraire une clé API)

Si l'utilisateur commence un projet de code app et $ALCHEMY_API_KEY n'est pas défini dans son shell, utilisez la CLI pour récupérer une clé depuis son compte Alchemy, persistez-la au .env du projet pour qu'elle survive entre les sessions de terminal, et exportez-la pour le shell actuel pour que l'agent puisse l'utiliser immédiatement.

Sécurité : NE JAMAIS afficher, imprimer ou autrement présenter la valeur de clé API extraite dans la sortie de conversation. Référencez-la uniquement comme $ALCHEMY_API_KEY après exportation. Traitez-la comme un mot de passe.

# 1. Essayez de lire une clé mise en cache depuis la configuration CLI (lecture seule, sûr non-interactif).
KEY="$(alchemy --no-interactive --json --reveal config get api-key 2>/dev/null | jq -r .value)"

# 2. Si vide/null, exécutez le flux interactif.
#    Note : auth login ouvre un navigateur et apps select affiche un sélecteur, donc NE PASSEZ PAS
#    --no-interactive ici. Si vous connaissez déjà l'id d'app, passez-le
#    explicitement pour ignorer le sélecteur : `alchemy --no-interactive --json apps select <id>`.
if [ -z "$KEY" ] || [ "$KEY" = "null" ]; then
  alchemy auth login              # ouvre le navigateur ; configure les identifiants du compte
  alchemy --json apps select      # sélecteur interactif (omettez --no-interactive pour qu'il se rende)
  KEY="$(alchemy --no-interactive --json --reveal config get api-key | jq -r .value)"
fi

# 3. Persistez au .env du projet (pratique standard — survit aux redémarrages de terminal
#    et est chargé par dotenv / les chargeurs d'env du framework au runtime).
#    Utilisez .env.local si le framework du projet l'attend (ex Next.js).
ENV_FILE=".env"
touch "$ENV_FILE"
if grep -q '^ALCHEMY_API_KEY=' "$ENV_FILE"; then
  sed -i.bak "s|^ALCHEMY_API_KEY=.*|ALCHEMY_API_KEY=$KEY|" "$ENV_FILE" && rm "$ENV_FILE.bak"
else
  echo "ALCHEMY_API_KEY=$KEY" >> "$ENV_FILE"
fi
grep -qxF "$ENV_FILE" .gitignore 2>/dev/null || echo "$ENV_FILE" >> .gitignore

# 4. Exportez vers le shell actuel pour que l'agent puisse appeler l'API immédiatement.
export ALCHEMY_API_KEY="$KEY"

Handoff vers la skill alchemy-api une fois que .env a la clé et que ALCHEMY_API_KEY est exportée.

Liens officiels

Skills similaires