Cardano Sidechain | Partie 4

SC_Token et test ADA

Qu’est-ce que SC_Token ?

SC_Token est le jeton natif du Sidechain Testnet de Cardano EVM. SC_Token peut être déplacé entre la chaîne principale (Cardano) et la chaîne latérale EVM, et SC_Token doit payer le gaz. Le test SC_Token n’a aucune valeur réelle.

Qu’est-ce que le gaz ?

Le gaz fait référence au coût de calcul nécessaire pour mener à bien une transaction sur le réseau sidechain. Ce gaz est déduit d’une petite fraction de SC_Token lors de la réalisation d’une transaction, du déploiement d’un contrat intelligent ou de la rédaction d’un contrat intelligent.

Comment obtenir SC_Token ?

IO Global maintient un robinet sur https://faucet.sidechain.evmtestnet.iohkdev.io/ à des fins de test. Le robinet distribue le test SC_Token que vous pouvez utiliser pour payer les frais de gaz sur les contrats intelligents que vous exécutez sur le testnet sidechain EVM. Vous pouvez réclamer un test SC_Token toutes les 24 heures. Vous ne pouvez pas échanger les jetons de test SC_Token que vous réclamez du robinet contre un autre jeton, ni les utiliser pour effectuer des achats.

Qu’est-ce que Test Ada ?

Test Ada (tAda) est le jeton natif du réseau de test Cardano dédié (distinct des environnements de test de prévisualisation et de pré-production). tAda est tenu de payer les frais de transaction effectués sur le testnet Cardano. tAda n’a aucune valeur réelle.

Comment obtenir tAda ?

IO Global maintient un robinet sur https://faucet.cardano.evmtestnet.iohkdev.io/basic-faucet à des fins de test.

Transfert de jetons

Ce tutoriel vous montrera comment effectuer un transfert SC_Tokens entre la chaîne principale et une chaîne latérale.

Conditions préalables

  1. Nous utiliserons le sidechain-cli dans ce tutoriel. Téléchargez le binaire et ajoutez-le au chemin de votre shell : https://github.com/input-output-hk/sidechains-tooling/releases .
  2. Téléchargez le fichier binaire de l’outil de conversion bech32 et ajoutez-le au chemin de votre shell : GitHub - input-output-hk/bech32: Haskell implementation of the Bech32 address format (BIP 0173). .
  3. Si vous ne l’avez pas déjà fait, créez et financez vos comptes de chaîne principale et de chaîne secondaire : Créez et financez vos comptes .

Transférer des jetons d’une sidechain vers la chaîne principale

Le transfert SC_Tokens d’une chaîne latérale à la chaîne principale nécessitera une interface avec le contrat intelligent de pont pour verrouiller le montant souhaité SC_Token à réclamer sur la chaîne principale. Dans ce guide, vous utiliserez RemixIDE pour vous interfacer avec le contrat de pont.

Étape 01 - Configurer l’interface du contrat dans RemixIDE

Remarque : Assurez-vous que votre fournisseur Web3 compatible avec Remix est configuré sur le réseau de test sidechain EVM. Par exemple : MetaMask.

  • Dans Remix, accédez à Deploy and Run transactions > sélectionnez Injected Provider (MetaMask) pour l’environnement > Load contract from address (0x696f686b2e6d616d626100000000000000000000)

Votre RemixIDE ressemblera à ceci avec une interface de contrat :

Remix IDE

Étape 02 - Verrouiller SC_Token

La lock fonction du contrat de pont prend l’adresse du destinataire de la chaîne principale, mais l’adresse du destinataire doit être convertie au format bech32 .

  • Convertissez l’adresse de la chaîne principale au format bech32 :

. / bech32 << < addr_test1vpzhx6enc57e75n2ygcgdt7cz2c8akt5rk5qaxy7j6vc3ycgly0wh 6045736b33c53d9f526a223086afd812b07ed9741da80e989e96998893 # Renvoie la conversion

Pour vous assurer que l’adresse est reconnue comme une chaîne HEX, ajoutez simplement 0x au début de l’adresse convertie, par exemple : 0x6045736b33c53d9f526a223086afd812b07ed9741da80e989e96998893

  • Déterminez combien SC_Token vous voulez verrouiller. Le montant SC_Token doit être un multiple de 10^9. Par exemple, 10^9 wei sur la sidechain sera 1 SC_Token sur la chaine principale. Saisissez le montant de SC_Token, en wei, que vous souhaitez verrouiller : par exemple, 1000000000 Wei == 1 SC_Token. Votre Remix devrait ressembler à ceci :

  • Jeton de verrouillage Remix

  • Sélectionnez le lock bouton pour lancer la transaction et suivez les invites de MetaMask pour confirmer et signer la transaction.

Remarque : Si la transaction semble être bloquée, statut “en attente” ou si MetaMask affiche un solde non valide, essayez de réinitialiser MetaMask et soumettez à nouveau la transaction.

  • Pour obtenir le hachage de la transaction ou vérifier que la transaction a réussi, vous pouvez vérifier l’activité de MetaMask ou la console Remix :

  • Console de remixage

  • Vous pouvez également appeler la eth_getTransactionReceipt méthode API. Vous pouvez le demander jusqu’à ce que le reçu soit retourné ou que la transaction expire :

curl - L - X POST - H ‘Content-type:application/json’ - d ’ { “jsonrpc” : “2.0” , “méthode” : “eth_getTransactionReceipt” , “params” : [ INSERT_RAW_TX ] , “identifiant” : 1 } ’ https : // robinet . chaîne latérale . evmtestnet . iohkdev . io / | jq

Étape 03 - Attendez que la transaction soit traitée et obtenez MerkleProof

  • Obtenez le statut actuel de la sidechain en invoquant sidechain_getStatus :

curl - L - X POST - H ‘Content-type:application/json’ - d ’ { “jsonrpc” : “2.0” , “méthode” : “sidechain_getStatus” , “paramètres” : , “identifiant” : 1 } ’ https : // robinet . chaîne latérale . evmtestnet . iohkdev . io / | jq - r

Cela montre à quelle époque et à quelle phase la lock() transaction a eu lieu. Si cela s’est produit pendant epochNsur epochPhase, regular vous pouvez obtenir la preuve Merkle sur epoch N puisque epochPhase passe àhandover. Si cela s’est produit pendant epoch N sur epochPhase closedTransactionBatch ou handover, vous pouvez obtenir la preuve Merkle sur epoch N+1 puisque epochPhase passe à handover.

  • Obtenez l’index de transaction pour l’époque à laquelle la transaction de verrouillage sera traitée en appelant la sidechain_getOutgoingTransactions méthode API :

curl - L - X POST - H ‘Content-type:application/json’ - d ’ { “jsonrpc” : “2.0” , “méthode” : “sidechain_getOutgoingTransactions” , “params” : [ < N ou N + 1 > ] , “identifiant” : 1 } ’ https : // robinet . chaîne latérale . evmtestnet . iohkdev . io / | jq

Exemple de sortie :

{ “jsonrpc” : “2.0” , “résultat” : { “transactions” : [ { “valeur” : “0x1” , “destinataire” : “0x6041e633c6b54572165a1563291c147dadb803667c99fc8c55ff3762fb” , “txIndex” : 0 } ] } , “identifiant” : 1 }

Pour obtenir la merkleProof correspondance entre le destinataire et le montant utilisé pour verrouiller les jetons, procédez comme suit.

  • Attendez que l’epochPhase devienne handover d’epoch Nou N+1 et obtenez la preuve Merkle de votre action de verrouillage en appelant la sidechain_getOutgoingTxMerkleProof méthode API :

curl - L - X POST - H ‘Content-type:application/json’ - d ’ { “jsonrpc” : “2.0” , “méthode” : “sidechain_getOutgoingTxMerkleProof” , “params” : [ < N ou N + 1 > , < txIndex > ] , “identifiant” : 1 } ’ https : // robinet . chaîne latérale . evmtestnet . iohkdev . io / | jq

Exemple:

curl -L -X POST https : // robinet . _ _ _ chaîne latérale . evmtestnet . iohkdev . io / - H ‘Content-type:application/json’ - d ‘{“jsonrpc”: “2.0”, “method”: “sidechain_getOutgoingTxMerkleProof”, “params”: [1295, 1], “id”: 1}’ | jq { “jsonrpc” : “2.0” , “résultat” : { “preuve” : { “octets” : “0xd8799fd8799f0101581d6045736b33c53d9f526a223086afd812b07ed9741da80e989e96998893d8799f5820772485d60f6744cf252f26560413aae 8d28c82a88b1c77eede792f28965f4e79ffff9fd8799f005820ed69142610619b748ec5cd657e418c1c891c3a176900376d12db0b3c406a0a38ffffff” , “infos” : { “transaction” : { “valeur” : “0x1” , “destinataire” : “0x6045736b33c53d9f526a223086afd812b07ed9741da80e989e96998893” , “txIndex” : 1 } , “merkleRootHash” : “0xaacd27079b9c8b8bd17693beccb8997b4b7b1ef97596018d43047a40dab6b021” } } , “sidechainEpoch” : 1295 } , “identifiant” : 1 }

À partir du retour, vous devez obtenir le proof/bytes et supprimer le 0x préfixé. Appelez cette chaîne merkleProof.

Dans l’exemple ci-dessus d8799fd8799... est la preuve de Merkle.

Attendez que l’époque change et que la passation de pouvoir du comité ait eu lieu.

Remarque : Une époque de sidechain correspond à 1 heure ; 30 minutes en regular phase, 15 minutes en closedTxBatch phase et 15 minutes en handover phase.

La passation du comité se produit automatiquement sur les réseaux de test par un service (relais) qui essaie chaque minute de trouver des signatures d’époque, et réussit après le début d’une nouvelle époque et l’obtention des signatures. Sur le réseau principal, le transfert du comité sera effectué par quiconque le souhaite, où il y aura une incitation à le faire. Un bon moyen de vérifier cela est d’attendre d’avoir observé votre transaction dans la liste des signatures à uploader :

curl - L - X POST - H ‘Content-type:application/json’ - d ’ { “jsonrpc” : “2.0” , “méthode” : “sidechain_getSignaturesToUpload” , “params” : [ < limite > ] , “identifiant” : 1 } ’ https : // robinet . chaîne latérale . evmtestnet . iohkdev . io / | jq

Où limit= min(limite, nombre d’époques qui ne sont pas encore relayées). La valeur par défaut est 100, mais vous pouvez la définir sur n’importe quel autre nombre. Normalement, lorsque le transfert se produit à chaque époque, il ne devrait afficher que 0 ou 1 époques (la dernière). Une fois que vous avez identifié qu’il n’y a pas de roothashes en attente dans la liste sous l’époque à laquelle votre verrou a été traité ( N ou N+1), vous pouvez réclamer vos jetons. À présent, l’époque sera N+1 ou N+2, selon la phase dans laquelle vous avez effectué l’opération de verrouillage.

Étape 04 - Réclamer SC_Token

  • Réclamez les jetons en soumettant une transaction sur la chaîne principale avec le que merkleProof vous avez obtenu en utilisant le sidechain-cli . Vous devrez signer la transaction avec votre clé de signature de chaîne principale (ex : payment.skey) :

. / sidechain - revendication cli - sc - jeton \ – sc - evm - url https : / / robinet . chaîne latérale . evmtestnet . iohkdev . io \ –signing - key - file / PATH / TO / payment . _ clé \ – preuve combinée < merkleProof sans 0x >

Exemple de sortie :

{ “endpoint” : “ClaimAct” , “ID de transaction” : “1334b3dab421911af68b9393e5cc4756c46c9ab1ac567a57450597e174351a48” }

Avertissement : Veuillez noter que cette commande peut prendre quelques minutes.

:tada: Félicitations ! À ce stade, vous avez réclamé avec succès votre SC_Token sur la chaîne principale.

Transférer des jetons de la chaîne principale vers une chaîne latérale

Étape 01 - Graver SC_Token

Pour transférer SC_Token de la chaîne principale vers une chaîne latérale, utilisez sidechain-cli pour graver main-chain SC_Token.

. / sidechain - cli burn - sc - jeton \ – paiement du fichier clé de signature . clé \ – sc - evm - url https : / / robinet . chaîne latérale . evmtestnet . iohkdev . io / \ – destinataire ae3dffee97f92db0201d11cb8877c89738353bce \ – montant 10

Avertissement : Veuillez noter que cette commande peut prendre quelques minutes.

Comprendre cette commande :

  • --signing-key-file payment.skey : La génération d’un compte de chaîne principale crée un .skey fichier pour signer les transactions. La commande donne le chemin d’accès à ce fichier.
  • --sc-evm-url https://faucet.sidechain.evmtestnet.iohkdev.io/ : Fournir l’URL de l’API JSON-RPC, ou le point de terminaison, au nœud de réseau sidechain.
  • --recipient ae3dffee97f92db0201d11cb8877c89738353bce : Définit l’adresse de destination sur la sidechain où les jetons SC_Token apparaîtront.
  • –amount 10 : Définit la quantité de SC_Token (sur la chaîne principale) à graver pour SC_Token (sur la chaîne latérale) au taux de conversion de amount x 10^9.

La transaction sera stable sur la chaîne principale dans environ 12 minutes ou 36 blocs. La sidechain l’ajoutera ensuite à un bloc produit et les jetons devraient apparaître dans le solde du compte de la sidechain :

  • Vérifiez SC_Token le solde du jeton à l’aide de l’ API JSON-RPC :

curl -L -X POST https : // robinet . _ _ _ chaîne latérale . evmtestnet . iohkdev . io / - H ‘Content-type:application/json’ - d ’ { “jsonrpc” : “2.0” , “méthode” : “eth_getBalance” , “params” : [ “0xae3dffee97f92db0201d11cb8877c89738353bce” , “dernier” ] , “id” : 1 } ’

Conseil : le solde peut être vérifié sur un portefeuille Web3 compatible configuré sur le réseau testnet sidechain EVM.

:tada: Félicitations ! À ce stade, vous avez réussi à graver votre chaîne principale SC_Token pour une chaîne latérale native SC_Token.

API JSON-RPC

L’interaction avec la sidechain nécessite l’envoi de requêtes à des méthodes d’API JSON-RPC spécifiques. Le réseau de test de la chaîne latérale EVM prend en charge la plupart des points de terminaison API Ethereum JSON-RPC standard, à quelques exceptions près décrites dans la spécification de l’API.

spécification

Le testnet de la chaîne latérale EVM prend en charge la méthode de découverte de service OpenRPCrpc.discover qui renverra le schéma OpenRPC pour l’API JSON-RPC. Vous pouvez facilement valider et prévisualiser le schéma sur OpenRPC Playground .

Si votre produit nécessite une méthode qui n’est pas actuellement implémentée, veuillez contacter l’assistance Input Output Global.

Pas encore mis en œuvre

  • eth_protocolVersion
  • eth_syncing
  • eth_coinbase
  • eth_feeHistory (This is specific to the London hard fork.)
  • eth_newFilter
  • eth_newBlockFilter
  • eth_newPendingTransactionFilter
  • eth_uninstallFilter
  • eth_getFilterChanges
  • eth_getFilterLogs
  • eth_getLogs
  • eth_mining(Il n’y a pas de “minage” dans la sidechain Cardano EVM mais il peut revenir si le nœud est un validateur.)
  • eth_sign
  • eth_signTransaction
  • eth_getTransactionByBlockHashAndIndex
  • eth_getTransactionByBlockNumberAndIndex
  • personal_importRawKey

L’ensemble du module trace/debug

Méthodes non pertinentes

Les méthodes suivantes ne sont pas pertinentes pour la sidechain Cardano EVM car elles sont spécifiques à la preuve de travail. Ils peuvent être implémentés pour renvoyer une valeur fixe si nécessaire.

  • eth_getUncleCountByBlockHash
  • eth_getUncleCountByBlockNumber
  • eth_getWork
  • eth_submitWork
  • eth_hashrate
  • eth_submitHashrate
  • eth_getUncleByBlockHashAndIndex
  • eth_gasPrice

Utiliser web3.js

Cette section montre comment utiliser l’interface Javascript web3 avec le client sidechain Cardano EVM pour le développement d’applications sur le testnet. Vous pouvez également parcourir un exemple de programme qui illustre certains exemples d’appels d’API.

L’interface Ethereum web3.js fournit de nombreux appels d’API documentés. L’interface vous donne un accès complet à une copie du réseau de test sidechain Cardano EVM. Vous pouvez créer un site Web ou un client qui utilise un nœud de sidechain EVM distant pour interagir avec le registre de blockchain décentralisé. L’interface web3.js est également utilisée pour développer des contrats intelligents dans le langage Solidity.

Cet exemple mettra en place un programme Javascript simple pour démontrer le concept. Voir la fin de cette page pour plus d’informations.

Exécution d’un exemple d’application

Suivez ces étapes pour créer et exécuter une application web3.js qui vérifie l’état de la synchronisation et affiche le contenu du dernier bloc.

Configurer la structure du fichier

  1. Assurez-vous que node.js et Yarn sont installés. Il existe de nombreux messages pédagogiques sur Internet.
  2. Créez un nouveau répertoire (son nom n’a pas d’importance) et initialisez-le. Vous pouvez utiliser NPM ou Yarn. NPM et Yarn créent le fichier package.json. En même temps, Yarn crée également yarn.lock, et NPM crée package-lock.json. À partir de maintenant, la démonstration utilisera Yarn.

Sur certains systèmes, vous êtes invité à fournir des informations qui seront ajoutées à package.json. Ces informations seront mises à jour ultérieurement lors de l’installation des bibliothèques web3. Vous pouvez simplement prendre les valeurs par défaut.

Sous Windows :

c : \ > mkdir web3 - exemple c : \ > cd web3 - exemple c : \web3 - exemple > init de fil fil init v1 . 22.10 # suivez les invites

Sous Linux :

utilisateur@nomordinateur : ~ $ cd ~ utilisateur@nomordinateur : ~ $ mkdir web3 - exemple utilisateur@nomordinateur : ~ $ cd web3 - exemple utilisateur@nomordinateur : ~ / web3 - example$ init de fil fil init v1 . 22.10 # suivez les invites

Sur macOS :

NomOrdinateur : ~ utilisateur$ mkdir web3 - exemple NomOrdinateur : ~ utilisateur$ cd web3 - exemple NomOrdinateur : ~ utilisateur$ init de fil fil init v1 . 22.10 # suivez les invites

Installer les bibliothèques web3.js

Les bibliothèques web3.js sont disponibles sous forme de package NPM, vous pouvez donc utiliser NPM ou Yarn pour les installer dans le répertoire que vous venez de créer.

Pour installer à l’aide de Yarn :

fil ajouter web3

Vérifier le contenu de package.json

Comparez votre copie de package.json avec cet exemple. Assurez-vous que toutes les clés et valeurs sont là.

{ “nom” : “exemple-web3” , “version” : “1.0.0” , “main” : “index.js” , “licence” : “MIT” , “dépendances” : { “web3” : “^1.3.6” } , “scripts” : { “start” : “node index.js” } }

Ecrire le Javascript

Sur tous les systèmes, créez un fichier appelé index.js dans le même répertoire que package.json. Modifiez-le pour qu’il ressemble à ceci :

1 const Web3 = nécessite ( ‘web3’ ) 2 3 let web3 = new Web3 ( new Web3 . providers . HttpProvider ( " https://faucet.sidechain.evmtestnet.iohkdev.io/ " ) ) 4 web3 . eth . getBlock ( ‘le plus récent’ ) 5 . alors ( ( réponse ) => { 6 consoles . log ( ‘DERNIER BLOC :’ ) 7 consoles . journal ( réponse ) 8 } ) 9 . catch ( ( erreur ) => console . erreur ( erreur ) ) dix

index.js est le programme Javascript. La ligne 1 fait référence aux bibliothèques web3.js. La ligne 2 établit une connexion entre ce programme et le nœud sidechain Cardano EVM. Le bloc commençant à la ligne 4 récupère le dernier bloc que le client a téléchargé jusqu’à présent.

Testez le programme

Vérifiez que votre connexion au nœud de sidechain EVM sur le testnet de sidechain EVM est toujours active en accédant à l’URL dans votre navigateur.

Accédez au répertoire que vous avez créé et exécutez l’exemple de programme :

début npm

Le résultat devrait ressembler à ceci :

C : \ > C : \ > cd web3 - exemple C : \web3 - exemple > démarrage npm > web3 - exemple@ 1.0 .0 start > indice de nœud . js DERNIER BLOC : { numéro : 18927 , hachage : ‘0xc3b738e5230ea385678e798c44bed3a3e180ab77ff9fbba83957d2998dc56ba6’ , parentHash : ‘0xc7e1b5b5af26534f509fa08a0d689b1d5a42b6623b83527926488d94f820642a’ , nonce : ‘0xb02bc71c3c8453e5’ , sha3Oncles : ‘0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347’ , logsBloom: ‘0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000’, transactionsRoot : ‘0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421’ , stateRoot : ‘0xf4b402fca95bd9791b2a320c61a70666da9655fb49bb61ddbce8d32165e830ed’ , reçusRoot : ‘0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421’ , mineur : ‘0x1Ff7FC39F7F4DC79c5867B9514d0e42607741384’ , difficulté : ‘1746526’ , difficulté totale : ‘29856771326’ , lastCheckpointNumber : ‘0x0’ , extraData : ‘0x6d616e74697362713db2265723a81bc76235c7b0dd283f925151025dc87276e4f3d8d9b88a6a3a0bdaafcc872ce2dac7ff5e6ec03fdce58d98f59c08a2e0 b545a51a69d6632b1c’ , taille : 586 , limite de gaz : 8000000 , gazutilisé : 0 , horodatage : 1621705043 , transactions : , oncles : , signature : ‘62713db2265723a81bc76235c7b0dd283f925151025dc87276e4f3d8d9b88a6a3a0bdaafcc872ce2dac7ff5e6ec03fdce58d98f59c08a2e0b545a51a69d6632 b1c’ , signataire : ‘d8a010f019db37dcaf2e1fb98d4fcbf1f57dbd7e2a7f065e92fbe77dca8b9120d6e79f1617e98fa6134e6af8858ac8f3735b1e70a5708eb14f228080356eb0 a 7’ } C : \web3 - exemple >

Les résultats ci-dessus ont été obtenus sur Windows 10, 64 bits, version 21h2.

Observez les résultats

Les champs affichés sont ceux du dernier bloc synchronisé avec le nœud local.

Plus d’information

Pour plus d’informations sur l’API web3.js, consultez cette page Lire la documentation .

Source : https://docs.cardano.org/cardano-sidechains/example-evm-sidechain/sidechain-token/

1 Like