Passer au contenu principal

Documentation Index

Fetch the complete documentation index at: https://docs.blockradar.co/llms.txt

Use this file to discover all available pages before exploring further.

Swap et Bridge
En résumé
L’API Swap de Blockradar vous permet d’échanger des actifs sur la même chaîne (swap) ou de transférer des actifs entre différentes chaînes (bridge) via un endpoint unifié unique.

Prérequis

Avant d’utiliser l’API Swap, assurez-vous de disposer des éléments suivants :
1

Clé d'API

Obtenez votre clé d’API depuis le Dashboard Blockradar. Rendez-vous dans Developers pour en générer une.
2

Wallet créée

Créez une wallet via l’API Create Wallet ou depuis le dashboard. Vous aurez besoin du walletId pour les opérations de swap.
3

IDs des actifs

Récupérez l’assetId de vos actifs source et destination depuis Assets dans le dashboard ou via l’API Get Assets.
4

Solde suffisant

Vérifiez que votre wallet dispose d’un solde suffisant de l’actif source pour couvrir le montant du swap ainsi que les frais de réseau.

Fonctionnement

Blockradar détermine automatiquement si votre transaction est un swap ou un bridge en fonction de votre sélection d’actifs :

Swap

Échangez différents actifs sur la même blockchain.Exemple : USDC → USDT sur Base

Bridge

Déplacez des actifs entre blockchains différentes.Exemple : USDC sur BSC → USDC sur Optimism
Vous n’avez pas besoin de préciser s’il s’agit d’un swap ou d’un bridge — l’API gère cela automatiquement à partir des fromAssetId et toAssetId que vous fournissez.

Actifs et chaînes pris en charge

L’API Swap prend en charge les principales stablecoins sur les chaînes compatibles avec Blockradar :
StablecoinDescription
USDTTether USD
USDCUSD Coin
DAIDai Stablecoin
BUSDBinance USD
cNGNStablecoin Naira
EURCEuro Coin
IDRXStablecoin indonésien
JPYCStablecoin yen japonais
La disponibilité des actifs varie selon la chaîne. Utilisez toujours l’API Get Assets pour récupérer la liste actualisée des actifs pris en charge et leurs valeurs assetId pour vos chaînes cibles.
Consultez la rubrique Intégrations pour la liste complète des réseaux et stablecoins pris en charge.

Master Wallet vs Child Address

L’API Swap est disponible à deux niveaux :

Master Wallet

Exécutez des swaps directement depuis votre master wallet. Idéal pour les opérations de trésorerie.

Child Address

Exécutez des swaps depuis des child addresses individuelles. Parfait pour les opérations spécifiques à un utilisateur.

Endpoints

OpérationMaster WalletChild Address
Obtenir un devisPOST /v1/wallets/{walletId}/swaps/quotePOST /v1/wallets/{walletId}/addresses/{addressId}/swaps/quote
ExécuterPOST /v1/wallets/{walletId}/swaps/executePOST /v1/wallets/{walletId}/addresses/{addressId}/swaps/execute

Étape 1 : Obtenir un devis

Demandez toujours un devis avant d’exécuter un swap afin de présenter aux utilisateurs le résultat attendu.

Paramètres de la requête

ParamètreTypeRequisDescription
fromAssetIdstringOuiL’asset ID de départ du swap
toAssetIdstringOuiL’asset ID de destination du swap
amountstringOuiLe montant à échanger
orderstringNonPréférence de devis : FASTEST, CHEAPEST, RECOMMENDED, NO_SLIPPAGE
recipientAddressstringNonAdresse de wallet externe (pour envoyer vers des wallets non Blockradar)

Exemple de devis

curl --request POST \
  --url https://api.blockradar.co/v1/wallets/{walletId}/swaps/quote \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '{
    "fromAssetId": "asset_usdc_base_mainnet",
    "toAssetId": "asset_usdt_bsc_mainnet",
    "amount": "100",
    "order": "RECOMMENDED"
  }'

Réponse du devis

{
  "message": "Swap quote fetched successfully",
  "statusCode": 200,
  "data": {
    "amount": "99.45",
    "minAmount": "98.95",
    "rate": "0.9945",
    "impact": "0.12",
    "slippage": "0.5",
    "networkFee": "0.002",
    "networkFeeInUSD": "0.15",
    "estimatedArrivalTime": 180
  }
}

Comprendre les champs du devis

ChampDescription
amountMontant estimé que vous recevrez après le swap
minAmountMontant minimum garanti (en tenant compte du slippage)
rateTaux de change effectif (toAmount / fromAmount)
impactPourcentage d’impact sur le prix
slippagePourcentage maximal de variation de prix autorisée
networkFeeFrais de gas exprimés en unités du token natif
networkFeeInUSDFrais de gas convertis en USD
estimatedArrivalTimeTemps estimé de finalisation en secondes
Affichez toujours au minimum : montant à recevoir, temps d’arrivée estimé et frais avant que l’utilisateur ne confirme le swap.

Étape 2 : Exécuter le Swap

Une fois que l’utilisateur a confirmé le devis, exécutez le swap.

Paramètres de la requête

ParamètreTypeRequisDescription
fromAssetIdstringOuiL’asset ID de départ du swap
toAssetIdstringOuiL’asset ID de destination du swap
amountstringOuiLe montant à échanger
orderstringNonPréférence de devis : FASTEST, CHEAPEST, RECOMMENDED, NO_SLIPPAGE
recipientAddressstringNonAdresse de wallet externe (pour envoyer vers des wallets non Blockradar)
referencestringNonVotre identifiant interne de suivi
metadataobjectNonDonnées personnalisées transmises via les webhooks

Exemple d’exécution

curl --request POST \
  --url https://api.blockradar.co/v1/wallets/{walletId}/swaps/execute \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '{
    "fromAssetId": "asset_usdc_base_mainnet",
    "toAssetId": "asset_usdt_bsc_mainnet",
    "amount": "100",
    "order": "RECOMMENDED",
    "reference": "swap-order-12345",
    "metadata": {
      "userId": "user_abc123",
      "orderId": "order_xyz789"
    }
  }'

Réponse de l’exécution

{
  "message": "Swap transaction created successfully",
  "statusCode": 200,
  "data": {
    "id": "swap-uuid-123",
    "type": "SWAP",
    "status": "PENDING",
    "fromAsset": {
      "symbol": "USDC",
      "amount": "100",
      "blockchain": "base"
    },
    "toAsset": {
      "symbol": "USDT",
      "amount": "99.45",
      "blockchain": "bsc"
    },
    "reference": "swap-order-12345",
    "metadata": {
      "userId": "user_abc123",
      "orderId": "order_xyz789"
    },
    "createdAt": "2024-01-15T10:30:00Z"
  }
}
Les opérations de swap sont asynchrones. La réponse initiale indique le statut PENDING. Écoutez le webhook swap.success ou swap.failed pour confirmer la finalisation.

Types d’ordres

Choisissez le type d’ordre adapté à votre cas d’usage :
Type d’ordreDescriptionIdéal pour
FASTESTPrivilégie la vitesse au détriment du coûtTransactions sensibles au temps
CHEAPESTMinimise les fraisOpérations sensibles au coût
RECOMMENDEDApproche équilibrée (par défaut)La plupart des cas
NO_SLIPPAGEMontant exact ou échecExigences de montant précis

Événements Webhook

Suivez la finalisation des swaps via les webhooks :
ÉvénementDescription
swap.successSwap effectué avec succès
swap.failedSwap en échec

Charge utile du Webhook

{
  "event": "swap.success",
  "data": {
    "id": "swap-uuid-123",
    "type": "SWAP",
    "status": "SUCCESS",
    "fromAsset": {
      "symbol": "USDC",
      "amount": "100",
      "blockchain": "base",
      "hash": "0xabc..."
    },
    "toAsset": {
      "symbol": "USDT",
      "amount": "99.45",
      "blockchain": "bsc",
      "hash": "0xdef..."
    },
    "reference": "swap-order-12345",
    "metadata": {
      "userId": "user_abc123",
      "orderId": "order_xyz789"
    },
    "completedAt": "2024-01-15T10:33:00Z"
  }
}

Exemple de flux complet

Voici une implémentation complète illustrant le flux devis → confirmation → exécution :
async function executeSwap(walletId, fromAssetId, toAssetId, amount) {
  const apiKey = process.env.BLOCKRADAR_API_KEY;
  const baseUrl = 'https://api.blockradar.co/v1';

  // Step 1: Get quote
  const quote = await fetch(
    `${baseUrl}/wallets/${walletId}/swaps/quote`,
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'x-api-key': apiKey
      },
      body: JSON.stringify({
        fromAssetId,
        toAssetId,
        amount,
        order: 'RECOMMENDED'
      })
    }
  ).then(r => r.json());

  // Step 2: Display quote to user
  console.log(`You will receive: ${quote.data.amount}`);
  console.log(`Minimum amount: ${quote.data.minAmount}`);
  console.log(`Network fee: $${quote.data.networkFeeInUSD}`);
  console.log(`Estimated time: ${quote.data.estimatedArrivalTime}s`);

  // Step 3: Execute swap (after user confirmation)
  const swap = await fetch(
    `${baseUrl}/wallets/${walletId}/swaps/execute`,
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'x-api-key': apiKey
      },
      body: JSON.stringify({
        fromAssetId,
        toAssetId,
        amount,
        order: 'RECOMMENDED',
        reference: `swap-${Date.now()}`
      })
    }
  ).then(r => r.json());

  console.log('Swap initiated:', swap.data.id);
  console.log('Status:', swap.data.status);

  // Step 4: Listen for webhook to confirm completion
  return swap.data;
}

// Usage
executeSwap(
  'wallet-uuid',
  'asset_usdc_base_mainnet',
  'asset_usdt_bsc_mainnet',
  '100'
);

Réponses d’erreur

{
  "message": "Insufficient balance for swap",
  "statusCode": 400,
  "error": "INSUFFICIENT_BALANCE",
  "data": {
    "required": "100",
    "available": "50.25",
    "asset": "USDC"
  }
}
{
  "message": "Asset not found",
  "statusCode": 404,
  "error": "ASSET_NOT_FOUND",
  "data": {
    "assetId": "invalid_asset_id"
  }
}
{
  "message": "No swap route available for this pair",
  "statusCode": 400,
  "error": "NO_ROUTE_AVAILABLE",
  "data": {
    "fromAsset": "USDC",
    "toAsset": "CUSTOM_TOKEN"
  }
}
{
  "message": "Amount below minimum swap threshold",
  "statusCode": 400,
  "error": "AMOUNT_TOO_LOW",
  "data": {
    "minimum": "10",
    "provided": "1"
  }
}
{
  "message": "Price moved beyond slippage tolerance",
  "statusCode": 400,
  "error": "SLIPPAGE_EXCEEDED",
  "data": {
    "expectedAmount": "99.45",
    "actualAmount": "97.00",
    "slippageTolerance": "0.5%"
  }
}

Bonnes pratiques

Expérience utilisateur

  • Affichez toujours les devis : montrez le montant, les frais et le temps estimé avant l’exécution
  • Gérez le slippage : informez les utilisateurs des variations possibles de prix
  • Affichez la progression : utilisez les webhooks pour informer les utilisateurs du statut du swap

Sécurité

  • Validez les montants : assurez-vous que les montants de swap se situent dans des plages acceptables
  • Utilisez des références : suivez les swaps avec des identifiants de référence uniques
  • Surveillez les webhooks : vérifiez toujours la finalisation du swap via les webhooks

Performance

  • Mettez en cache les asset IDs : stockez les asset IDs localement pour éviter des requêtes répétées
  • Utilisez les types d’ordres appropriés : choisissez FASTEST pour les opérations sensibles au temps et CHEAPEST pour celles sensibles au coût
  • Implémentez des nouvelles tentatives : gérez les défaillances transitoires avec un backoff exponentiel

Référence de l’API

EndpointDescription
Master Wallet Get QuoteObtenir un devis de swap depuis la master wallet
Master Wallet ExecuteExécuter un swap depuis la master wallet
Child Address Get QuoteObtenir un devis de swap depuis une child address
Child Address ExecuteExécuter un swap depuis une child address

Support

L’API Swap fournit une interface unifiée pour les swaps sur la même chaîne et les bridges entre chaînes. Commencez par de petits montants de test sur les testnets avant de passer en production.