Bridge de Chiliz Chain vers Solana
Pour relier un jeton existant de Chiliz Chain à Solana, vous devez écrire et déployer deux contrats intelligents distincts : un OFT Adapter sur la chaîne où le jeton existe déjà (Chiliz Chain), et un Native OFT sur la chaîne de destination (Solana).
Notez que LayerZero propose son propre QuickStart pour les contrats OFT :
Prérequis
Le pont entre Chiliz Chain (EVM) et Solana (Non-EVM) nécessite un développement sur double pile. Vous devrez mettre en place des environnements et des portefeuilles pour les deux écosystèmes.
Vous aurez donc besoin des environnements suivants :
Pour les interactions avec Chiliz Chain : Node/npx et Hardhat.
Pour les interactions avec Solana : Rustup (les contrats intelligents Solana utilisent le langage de programmation Rust), Solana CLI et le framework Anchor , et le SDK Solana de LayerZero.
Ce guide nécessite ce qui suit :
Une adresse de contrat de jeton sur Chiliz Chain. Vous n’avez pas besoin d’en être propriétaire.
Un portefeuille Web3 pour chaque chaîne (MetaMask ne prend pas en charge les chaînes non EVM) :
Pour Chiliz Chain : portefeuille MetaMask avec la configuration RPC de Chiliz Chain.
Pour Solana : Solflare portefeuille avec configuration de Solana Mainnet. Voici leur guide de configuration.
Assez de jetons de gaz sur chaque chaîne pour payer les déploiements des contrats ainsi que les frais de gaz pour l’envoi des messages.
Sur Chiliz Chain : des jetons CHZ.
Sur Solana : des jetons SOL.
Étape 1 : développement du contrat
Le défi des « Shared Decimals »
Parce que Solana gère les mathématiques des jetons différemment de la Machine Virtuelle Ethereum (EVM), nous devons gérer correctement les décimales :
Chiliz Chain (EVM) : les jetons ERC-20 standard ont généralement 18 décimales de précision.
Solana : les jetons SPL natifs ont généralement 9 décimales de précision.
Si vous envoyez unités de Chiliz vers Solana, le contrat Solana interpréterait mal le montant, ce qui entraînerait une inflation massive du jeton sur la chaîne de destination.
Pour normaliser les calculs, LayerZero utilise une configuration sharedDecimals . Par défaut, le standard OFT LayerZero V2 définit sharedDecimals à 6.
Lorsqu’un utilisateur transfère 1,00 jeton de Chiliz, l’Adapter supprime les 12 décimales les plus basses (en les traitant comme de la « poussière ») pour réduire le nombre à 6 décimales.
Le message est envoyé à travers le pont.
Le programme Solana reçoit le nombre à 6 décimales et le met à l’échelle vers le haut jusqu’à ses 9 décimales locales avant de frapper les jetons.
Préparation de l’ OFTAdapter sur Chiliz Chain
OFTAdapter sur Chiliz ChainIl s’agit d’une étape préparatoire, ne le déployez pas tout de suite ! Vous le déploierez à l’étape 3.
Le OFTAdapter le contrat agit comme un coffre-fort pour votre jeton existant. Lorsque des utilisateurs transfèrent leurs jetons hors de Chiliz Chain, ce contrat verrouille les jetons ERC20 d’origine.
Parce que les OFTAdapter définit sharedDecimals de LayerZero est à 6 par défaut, vous pouvez utiliser l’implémentation standard. Si vous devez un jour modifier cela (par exemple, à 8), vous remplaceriez la sharedDecimals() fonction.
Créez un nouveau fichier nommé ChilizTokenAdapter.sol dans votre dossier contracts :
Comme vous pouvez le voir, ce contrat étend le contrat LayerZero OFT Adapter, ainsi qu’un contrat standard Ownable.sol pour attribuer les clés d’administration. Vous avez besoin des deux afin que vous seul puissiez relier les chaînes en toute sécurité.
Préparation et déploiement du OFT sur Solana
OFT sur SolanaContrairement à Chiliz Chain, Solana n’utilise pas la Machine Virtuelle Ethereum (EVM) ni le langage Solidity. Les contrats intelligents Solana (appelés « Programs ») sont écrits en Rust.
Pour relier votre jeton, vous devez déployer un programme OFT sur Solana. Lorsque ce programme reçoit un message vérifié de votre OFTAdapter déployé sur Chiliz, il frappera le jeton SPL correspondant dans le portefeuille Solana de l’utilisateur.
LayerZero fournit un exemple Anchor prêt à l’emploi afin que vous n’ayez pas à écrire la logique de pont en Rust à partir de zéro.
1. Clonez l’exemple LayerZero OFT Solana :
2. Compilez le programme Rust
Cela générera également votre identifiant unique de programme Solana (équivalent à une adresse de contrat dans l’EVM) :
Une fois la compilation terminée, Anchor générera une nouvelle paire de clés dans target/deploy/oft_solana-keypair.json.
Vous pouvez récupérer votre nouvel identifiant de programme en exécutant :
3. Déployez sur Solana Mainnet
Assurez-vous que votre CLI Solana est configurée pour Mainnet et que votre portefeuille local dispose de suffisamment de $SOL pour le déploiement et le loyer de stockage.
N’oubliez pas de mettre à jour la Anchor.toml et la macro lib.rs macro declare_id! avec ce nouvel identifiant de programme avant de déployer.
4. Initialisez l’OFT et le Mint SPL
Sur Solana, la logique d’un jeton et son registre sont séparés. Vous devez initialiser un nouveau compte Mint (le jeton SPL) et attribuer votre programme OFT nouvellement déployé comme autorité de Mint. Cela garantit que seul le pont LayerZero peut frapper de nouveaux jetons sur Solana.
Le SDK LayerZero fournit des tâches Hardhat/TypeScript pour gérer cette initialisation directement depuis la ligne de commande. Dans votre oft-solana projet, configurez votre Endpoint LayerZero pour Solana (30168) et exécutez le script d’initialisation :
Paramètres cruciaux :
--mint-decimals 9: Définit la précision standard du jeton SPL sur Solana.--shared-decimals 6: Doit correspondre aux décimales partagées que vous avez configurées (ou à la valeur par défaut) sur votre Chiliz ChainOFTAdapter. C’est ce qui garantit que 1 jeton Chiliz = 1 jeton Solana.
Une fois que cette transaction d’initialisation est confirmée sur la blockchain Solana, votre programme OFT natif est entièrement configuré et prêt à être relié à l’OFTAdapter Chiliz !
Étape 2 : configuration LayerZero
Avec votre Adapter Chiliz déployé et votre programme OFT Solana initialisé, vous devez maintenant configurer leur connexion. C’est là que la différence entre les réseaux EVM et non EVM devient très visible.
Format des adresses :
Chiliz Chain (EVM) : utilise des adresses hexadécimales standard de 20 octets (par exemple,
0x123...).Solana : utilise des adresses encodées en Base58 (par exemple,
YourProgramId111111111111111111111111111111).
La messagerie inter-chaînes de LayerZero exige que toutes les adresses de pairs soient formatées en bytes32. Heureusement, l’outillage Hardhat LayerZero V2 gère automatiquement la conversion de Base58 vers Bytes32 pour vous, tant que vous définissez correctement les endpoints dans votre configuration.
Le Générateur de configuration simple est la méthode recommandée pour générer la configuration de câblage, car il automatise le câblage bidirectionnel et applique en coulisses les configurations de sécurité recommandées.
Créez ou mettez à jour votre fichier layerzero.config.ts à la racine de votre projet Hardhat :
La tâche d’assemblage LayerZero lira cela, décodera la chaîne Base58, la complétera à 32 octets et la transmettra en toute sécurité à l’ setPeer fonction.
Étape 3 : flux de déploiement
Avec vos contrats écrits et votre layerzero.config.ts préparé, il est temps de déployer l’OFTAdapter Chiliz. Comme vous avez déjà construit et déployé le programme OFT natif Solana à l’aide d’Anchor à l’étape 1, cette étape se concentre sur le déploiement de la partie EVM du pont à l’aide de Hardhat.
Déploiement du contrat Chiliz OFTAdapter
Dans votre projet Hardhat, créez un script de déploiement dans votre répertoire deploy/ nommé 01_deploy_chiliz_solana_adapter.ts. Ce script transmet l’adresse de votre jeton existant et l’adresse Chiliz Endpoint V2 (EID) au constructeur.
Déploiement de l’OFTAdapter Chiliz
Avant de continuer, assurez-vous que :
vous avez copié l’identifiant de programme Base58 obtenu dans votre
layerzero.config.ts.votre
hardhat.config.tsa l’URL RPC et la clé privée correctement configurées pour le réseau principal Chiliz Chain.
Exécutez la commande suivante dans votre terminal pour déployer l’Adapter EVM :
Une fois le déploiement terminé, Hardhat enregistrera l’adresse du contrat Chiliz dans le deployments/ dossier.
À ce stade, vous avez des contrats actifs à la fois sur Chiliz Chain (EVM) et Solana (SVM), mais ils ne se font pas encore confiance. Il est temps de les faire se rencontrer !
Étape 4 : câblage et pairage
Pour permettre à votre contrat OFTAdapter et à votre programme OFT de communiquer, vous devez les « câbler » ensemble en tant que pairs de confiance.
Parce que nous faisons le pont entre deux Machines Virtuelles totalement différentes (EVM et SVM), la configuration exige une attention particulière.
gas EVM vs Compute Units Solana
Lorsqu’un utilisateur transfère un jeton de Chiliz Chain vers une autre chaîne EVM (comme Base), l’Executor LayerZero a besoin de gas EVM pour appeler lzReceive.
Cependant, lors d’un transfert de Chiliz Chain vers Solana, la chaîne de destination n’utilise pas de gas EVM. Elle utilise des Compute Units et des Lamports (fractions de $SOL). De plus, si un utilisateur transfère des jetons vers un portefeuille Solana qui ne détient pas encore votre jeton, l’Executor doit payer les frais de « rent exemption » de Solana pour créer un Compte de Jeton Associé (ATA) pour lui. Cela nécessite de dépenser de la valeur réelle en $SOL sur la destination.
Pour garantir que l’Executor dispose de suffisamment de Compute Units et de Lamports pour frapper des jetons et créer des ATA sur Solana, vous devez définir ces limites dans votre layerzero.config.ts fichier avant câblage.
Exécutez la commande de câblage automatisée dans votre terminal :
Cela préparera les 6 transactions de configuration requises :
setSendLibrary: Assigne le MessageLib pour les paquets sortants.setReceiveLibrary: Assigne le MessageLib pour les paquets entrants.setConfig: Configure les DVN et l’Executor.setConfig: Configure les DVN pour la vérification entrante.setEnforcedOptions: Garantit des paramètres d’exécution cohérents (crucial pour s’assurer que l’utilisateur paie suffisamment à l’avance pour couvrir les Compute Units Solana et le loyer des Lamports).setPeer: Lie l’EID Solana à votre identifiant de programme Base58 de destination.
La boîte à outils LayerZero V2 automatise le gros du travail : elle décodera l’adresse Solana Base58, la complétera au bytes32 format EVM, et soumettra les setPeer et le setEnforcedOptions transactions aux deux chaînes.
Une fois les transactions de câblage confirmées, votre pont EVM-vers-Solana est opérationnel et sécurisé par des permissions.
Votre jeton est officiellement prêt à franchir la frontière EVM/SVM !
Étape 5 : fonctionnement et tests
Avec votre Adapter Chiliz déployé, votre OFT natif Solana initialisé, et les deux correctement reliés ensemble, votre jeton est officiellement prêt à franchir la frontière EVM/SVM. La dernière étape consiste à exécuter et suivre un transfert de test de Chiliz Chain vers Solana.
1) Envoi du message inter-chaînes vers Solana
La boîte à outils LayerZero V2 inclut une tâche Hardhat pour envoyer des transferts OFT directement depuis la ligne de commande.
Contrairement aux transferts EVM-vers-EVM où votre destination est une chaîne hexadécimale standard, votre destination ici est une adresse de portefeuille Solana Base58. La CLI LayerZero gère automatiquement la conversion de Base58 vers Bytes32 pour la charge utile du message.
Exécutez la commande suivante dans votre terminal :
Que se passe-t-il ici ?
Le script indique les frais inter-chaînes en $CHZ (qui couvrent le gas EVM, les frais du réseau de vérification et les frais de destination Solana).
Il appelle le
send()fonction sur votre Chiliz Adapter.L’Adapter verrouille 10 jetons (18 décimales). Il supprime les 12 décimales les plus basses comme de la « poussière » (les laissant dans votre portefeuille Chiliz) pour réduire la charge utile à 6
sharedDecimals.L’Endpoint LayerZero émet le paquet vers Solana Mainnet.
2) Suivi du paquet sur LayerZero Scan
Comme le pont vers Solana implique une traduction entre deux mécanismes de consensus totalement différents et l’attente de la finalité SVM, un délai asynchrone est normal.
Pour suivre ce parcours en temps réel, cliquez sur le lien LayerZero Scan qui apparaît dans la sortie du CLI.
En savoir plus sur cet outil ici :
Traduction des décimales
L’OFT natif Solana aura automatiquement mis à l’échelle la charge utile à 6 décimales provenant du pont vers les 9 décimales SPL standard, de sorte que votre portefeuille Solana reçoit exactement 10 jetons complets.
4) Résolution des messages bloqués
Si votre transaction est marquée comme confirmée sur Chiliz mais échoue à s’exécuter sur Solana, la cause la plus courante est une erreur de Lamports insuffisants ou de Compute Units.
Si le portefeuille Solana de destination ne disposait pas déjà d’un Compte de Jeton Associé (ATA) pour votre jeton spécifique, l’Executor LayerZero a dû payer les frais de « rent exemption » Solana pour le créer.
Si le
valueparameter (Lamports) dans votreenforcedOptionsétait trop faible pour couvrir ce loyer, ou si legas(Compute Units) était insuffisant, l’Executor refusera de payer de sa poche, et le message restera bloqué.Correctif : vous ne perdez pas vos jetons. Vous pouvez pousser manuellement un message bloqué via l’interface utilisateur LayerZero Scan. Connectez votre portefeuille Solana, cliquez sur le bouton « Force Resume » ou « Execute » sur l’explorateur de blocs, et payez vous-même les frais de destination locaux (Compute Units + loyer ATA en $SOL) pour finaliser la frappe.
Mis à jour
Ce contenu vous a-t-il été utile ?