> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Interface de Swap Personnalisée

> Utilisez la boîte à outils Helius AI pour construire une interface de swap personnalisée Solana.

## Introduction

Ce guide vous accompagne dans un flux de développement assisté par IA pour construire une interface de swap de tokens sur Solana. Sa caractéristique principale est un panneau qui affiche les paires les plus échangées de l'utilisateur et lui permet d'en sélectionner une d'un seul clic. Cela en fait une expérience personnalisée.

Chaque section montre les invites exactes qui ont été utilisées, ce que le modèle a produit comme sortie, et comment nous avons utilisé la [boîte à outils Helius AI](/docs/fr/agents/overview).

Ce guide présente les technologies suivantes :

* Intégration du portefeuille [Phantom](/docs/fr/agents/skills/phantom)
* [DFlow](/docs/fr/agents/skills/dflow) pour les devis et les swaps
* [Helius Sender](/docs/fr/sending-transactions/sender) pour l'envoi rapide de transactions
* [Transactions Améliorées de Helius](/docs/fr/enhanced-transactions/overview) pour l'analyse des transactions

## Résultat final

<Frame caption="Interface de swap personnalisée avec panneau de paires récentes">
  <img src="https://mintcdn.com/helius/8LUYXnaXO1N9za28/images/personalized-swap-ui/00-final-result.png?fit=max&auto=format&n=8LUYXnaXO1N9za28&q=85&s=0715a87a899d34a6d22ca8badd570f54" alt="Interface de swap personnalisée avec panneau de paires récentes" width="1846" height="1102" data-path="images/personalized-swap-ui/00-final-result.png" />
</Frame>

## Configuration

Avant de commencer, installez le [plugin Helius Claude Code](/docs/fr/agents/claude-code-plugin). Dans Claude Code, exécutez ceci comme deux commandes distinctes :

```
/plugin marketplace add helius-labs/core-ai
```

```
/plugin install helius@helius-labs
```

Dans ce guide, nous utiliserons le modèle Opus 4.6. Veuillez changer si nécessaire.

<Warning>
  Ce guide est conçu comme une démonstration. La sortie des grands modèles de langage (LLM) est intrinsèquement aléatoire, donc même si vous utilisez exactement les mêmes invites que dans ce guide, vos résultats peuvent différer.
</Warning>

## Invite initiale

Utilisez cette invite pour définir l'interface utilisateur complète et le comportement en une seule fois :

<CardGroup cols={1}>
  <Card title="Prompt" icon="terminal">
    Construisez une interface de swap de token personnalisée pour Solana.

    Ajoutez une interface de swap de token dans le style habituel : une boîte centrée avec deux sélecteurs de tokens et un bouton de swap.

    À sa droite, affichez une liste de paires de tokens que l'utilisateur peut choisir directement. Affichez le logo de chaque token à côté de son nom.

    Pour calculer la liste, faites ceci : Après qu'un utilisateur se connecte avec son portefeuille, examinez son historique de swaps et extrayez les 10 dernières paires échangées qu'il a utilisées. Triez-les par fréquence de swaps.
  </Card>
</CardGroup>

Cette invite établit :

* La disposition de base (boîte de swap + rail de paires récentes)
* La règle de personnalisation (historique du portefeuille)
* La stratégie de classement (fréquence d'utilisation récente)

Dans notre cas, le modèle a proposé ceci :

> Laissez-moi mettre en place le projet. Je vais créer une application Vite + React + TypeScript avec connexion au portefeuille Phantom, swaps DFlow via Helius Sender, et historique des swaps de l'API Helius Wallet.

C'est une pile technologique raisonnable :

* Vite + React + TypeScript pour une interface moderne et sûre en termes de typage
* Phantom pour la connexion et la signature de portefeuille
* DFlow pour les meilleures devises
* API Helius pour l'historique de portefeuille
* Helius Sender pour l'envoi de transactions

Le modèle nous a demandé d'ajouter un fichier `.env` avec notre clé API Helius. Après l'avoir fait, nous avons démarré l'application avec `npm run dev` :

<Frame caption="Version initiale de l'application">
  <img src="https://mintcdn.com/helius/8LUYXnaXO1N9za28/images/personalized-swap-ui/01-wallet-disconnected.png?fit=max&auto=format&n=8LUYXnaXO1N9za28&q=85&s=fec8e905c49cbbbb33a84e46e4f4805e" alt="Version initiale de l'application" width="1860" height="1116" data-path="images/personalized-swap-ui/01-wallet-disconnected.png" />
</Frame>

## Paires récentes manquantes

Après avoir connecté notre portefeuille, nous avons constaté que le panneau des paires récentes manquait certaines paires échangées récemment. Nous avons donc demandé à l'agent d'enquêter :

<CardGroup cols={1}>
  <Card title="Prompt" icon="terminal">
    Il ne montre pas Bonk / SOL en tant que paire récente même s'il y a des swaps récents. Pouvez-vous vérifier pourquoi ?

    2BnyMbNYLjYorNwbPjhUBHSQBTbCTjuqouQwZiYY6auh
  </Card>
</CardGroup>

Pour résoudre ce problème, l'agent devait connaître l'historique des transactions du portefeuille donné. Comme nous n'avons fourni que l'adresse du portefeuille, il a décidé d'utiliser directement deux outils [Helius MCP](/docs/fr/agents/mcp) pour obtenir ces informations : `getTransactionHistory` et `parseTransactions`.

Cela lui a permis d'identifier rapidement le bug :

> Le code repose uniquement sur events.swap au lieu d'analyser les transferts réels de tokens.

> Laissez-moi corriger l'extraction de l'historique des swaps pour utiliser directement tokenTransfers et nativeTransfers.

Ainsi, il a résolu le problème en modifiant la méthode de détection des paires échangées : Nous vérifions maintenant simplement quels tokens ont été transférés vers et depuis le portefeuille lors d'une transaction.

Nous voyons maintenant toutes nos paires échangées dans l'application :

<Frame caption="Toutes les paires échangées montrées">
  <img src="https://mintcdn.com/helius/8LUYXnaXO1N9za28/images/personalized-swap-ui/02-connected-recent-pairs.png?fit=max&auto=format&n=8LUYXnaXO1N9za28&q=85&s=520f3dd879dd02c76735153532ab58c5" alt="Toutes les paires échangées montrées" width="1856" height="1120" data-path="images/personalized-swap-ui/02-connected-recent-pairs.png" />
</Frame>

## Affinement de l'interface utilisateur

Bien que le design général de l'application soit déjà bon, la disposition de l'interface de swap nécessite encore quelques ajustements :

<CardGroup cols={1}>
  <Card title="Prompt" icon="terminal">
    Corrigez la conception de la boîte de sélection de tokens :

    Placez le sélecteur de tokens à droite.

    Rendez la largeur du champ de saisie pour le montant flexible afin qu'il s'intègre parfaitement dans la boîte.
  </Card>
</CardGroup>

L'agent a rapidement mis en œuvre ces changements d'interface utilisateur :

<Frame caption="Nouvelle disposition pour la boîte de sélection de tokens">
  <img src="https://mintcdn.com/helius/8LUYXnaXO1N9za28/images/personalized-swap-ui/09-ui-changes.png?fit=max&auto=format&n=8LUYXnaXO1N9za28&q=85&s=13ae436bff4826283a5747e321b3a8ce" alt="Nouvelle disposition pour la boîte de sélection de tokens" width="1844" height="1062" data-path="images/personalized-swap-ui/09-ui-changes.png" />
</Frame>

## Affichage des devises

Actuellement, les montants des tokens dans l'interface de swap doivent être définis manuellement. Cela signifie que l'utilisateur ne voit pas combien de tokens il recevra en retour.

Il serait utile de remplir automatiquement le champ du montant de token avec une devise récente de DFlow.

<CardGroup cols={1}>
  <Card title="Prompt" icon="terminal">
    Lorsque l'utilisateur a saisi un montant pour un token, obtenez une devise et affichez le montant de sortie pour l'autre token.
  </Card>
</CardGroup>

Pour implémenter cela, l'agent a utilisé sa compétence [DFlow](/docs/fr/agents/skills/dflow) pour trouver le bon point de terminaison pour récupérer les devises.

L'interface de swap récupère maintenant dynamiquement et affiche le montant de sortie coté :

<Frame caption="Aperçu des devises montrant le montant de sortie dans le champ de réception">
  <img src="https://mintcdn.com/helius/8LUYXnaXO1N9za28/images/personalized-swap-ui/03-quote-visible.png?fit=max&auto=format&n=8LUYXnaXO1N9za28&q=85&s=701d58c30da16de84814cf87ce486c92" alt="Aperçu des devises montrant le montant de sortie dans le champ de réception" width="1846" height="1102" data-path="images/personalized-swap-ui/03-quote-visible.png" />
</Frame>

## Ajouter des informations sur le swap

Une fois qu'un swap est effectué, l'utilisateur n'a aucun moyen de le vérifier sur la chaîne. Ajoutons cela à l'interface utilisateur :

<CardGroup cols={1}>
  <Card title="Prompt" icon="terminal">
    Veuillez imprimer la signature complète de la transaction une fois le swap réussi. Liez-la également à un explorateur.
  </Card>
</CardGroup>

Pour les tests, nous effectuons un swap d'essai :

<Frame caption="Popup de confirmation de portefeuille lors de la signature de swap">
  <img src="https://mintcdn.com/helius/8LUYXnaXO1N9za28/images/personalized-swap-ui/05-wallet-confirmation.png?fit=max&auto=format&n=8LUYXnaXO1N9za28&q=85&s=8d289e4583b5f33a24581999f66fd3e0" alt="Popup de confirmation de portefeuille lors de la signature de swap" width="1852" height="1180" data-path="images/personalized-swap-ui/05-wallet-confirmation.png" />
</Frame>

Maintenant, l'information est affichée dans l'interface utilisateur :

<Frame caption="Sortie de swap réussie avec signature complète et lien vers explorateur">
  <img src="https://mintcdn.com/helius/8LUYXnaXO1N9za28/images/personalized-swap-ui/08-send-successful.png?fit=max&auto=format&n=8LUYXnaXO1N9za28&q=85&s=d1264eb7e065b4fa6c0e8505216c6c9e" alt="Sortie de swap réussie avec signature complète et lien vers explorateur" width="1856" height="1192" data-path="images/personalized-swap-ui/08-send-successful.png" />
</Frame>
