Avalanche Francophone
  • Documentation du développeur
  • Apprendre
    • Aperçu de la plateforme
      • Staking
      • Frais de transaction
    • Les bases de la blockchain
    • FAQ
    • Forum
    • Communauté
  • Créer
  • Pour commencer: exécuter un nœud Avalanche
  • Notes de version
    • Alertes par email
    • Notes de mise à jour d'AvalancheGo
    • Notes de mise à jour d'Ortelius
  • Tutoriels
    • Plateforme
      • Créer une nouvelle blockchain
      • Créer un Réseau Local Testnet
      • Créer un sous-réseau (subnet)
      • Créer une Machine Virtuelle (VM)
      • Configurez votre Ledger Nano S avec Avalanche
      • Transférer de l'AVAX entre la X-Chain et la C-Chain
      • Transférer de l'AVAX entre la X-Chain et la P-Chain
    • Nœuds et mise en jeu
      • Ajouter un validateur
      • Maintenir un nœud Avalanche
      • Exécutez un nœud Avalanche et devenez validateur
      • Exécuter un nœud Avalanche avec Oracle VM VirtualBox
      • Exécutez un nœud Avalanche avec un Raspberry Pi 4
      • Exécutez un nœud Avalanche et faites une mise en jeu avec le portefeuille
      • Exécuter un nœud Avalanche avec OVH
      • Exécuter un nœud Avalanche avec Amazon Web Services (AWS)
      • Exécuter un nœud Avalanche avec Microsoft Azure
      • Exécuter un nœud Avalanche sous Linux à l'aide du script d'installation
      • Configuration du monitoring des nœuds
      • Mise en jeu d'AVAX, en validant ou délégant via le portefeuille Avalanche
      • Déléguer à un nœud
      • Sécurisation d'un serveur VPS
      • Mettez à niveau votre nœud AvalancheGo
    • Contrats intelligents
      • Déployer un contrat intelligent en utilisant Remix et MetaMask
      • Utilisation de Truffle avec la C-Chain d'Avalanche
    • Actifs Numériques Intelligents
      • Créer un token ERC-20
      • Créer un actif à capitalisation fixe
      • Créer un actif à capitalisation variable
      • Création d'un NFT - Partie 1
      • Créez des NFT avec le portefeuille Avalanche
      • Utilisez les Wrapped AVAX (WAVAX) sur Avalanche
  • AvalancheGo APIs
    • Émettre des appels d'API
    • Platform API (P-Chain)
    • EVM API (C-Chain)
    • AVM API (X-Chain)
    • Appels d'API obsolètes
    • API Admin
    • API Auth
    • API Health
    • API Info
    • API IPC
    • API Keystore
    • API Metrics
    • API Timestamp
  • Outils
    • AvalancheJS
      • Créer un actif sur la X-Chain
      • Management des clés sur la X-Chain
      • Envoyer un actif sur la X-Chain
      • API
    • Avash
    • Ortelius
  • Références
    • AVM Transaction Format
    • Command Line Interface
    • Coreth Atomic Transaction Format
    • Cryptographic Primitives
    • Network Protocol
    • Serialization Primitives
    • Platform Transaction Format
  • Papiers
Propulsé par GitBook
Sur cette page
  • Obtenir l'ensemble UTXO
  • Dépenser les UTXOs
  • Obtenez le statut de la transaction
  • Vérifiez les résultats

Cet article vous a-t-il été utile ?

  1. Outils
  2. AvalancheJS

Envoyer un actif sur la X-Chain

Envoyer un actif de la X-Chain vers un récipient unique

Cet exemple envoie un élément de la X-Chain à un seul destinataire. La première étape de ce processus consiste à créer une instance d'Avalanche connectée à notre point de terminaison Avalanche Platform de choix.

import {
    Avalanche,
    BinTools,
    Buffer,
    BN
  } from "avalanche" 

let myNetworkID = 1; //default is 3, we want to override that for our local network
let myBlockchainID = "GJABrZ9A6UQFpwjPU8MDxDd8vuyRoDVeDAXc694wJ5t3zEkhU"; // The X-Chain blockchainID on this network
let avax = new avalanche.Avalanche("localhost", 9650, "http", myNetworkID, myBlockchainID);
let xchain = avax.XChain(); //returns a reference to the X-Chain used by AvalancheJS

Nous supposons également que le KeyStore contient une liste d'adresses utilisées dans cette transaction.

Obtenir l'ensemble UTXO

La X-Chain stocke tous les soldes disponibles dans une banque de données appelée Sorties de transaction non dépensées (UTXO). Un ensemble UTXO est la liste unique des sorties produites par les transactions, les adresses qui peuvent dépenser ces sorties et d'autres variables telles que les temps de verrouillage (un horodatage après lequel la sortie peut être dépensée) et les seuils (combien de signataires sont nécessaires pour dépenser la sortie ).

Dans le cas de cet exemple, nous allons créer une transaction simple qui dépense une quantité de pièces disponibles et l'envoie à une seule adresse sans aucune restriction. La gestion des UTXO sera pour la plupart abstraite.

Cependant, nous devons obtenir l'ensemble UTXO pour les adresses que nous gérons.

let myAddresses = xchain.keyChain().getAddresses(); //returns an array of addresses the KeyChain manages
let addressStrings = xchain.keyChain().getAddressStrings(); //returns an array of addresses the KeyChain manages as strings
let utxos = await xchain.getUTXOs(myAddresses);

Dépenser les UTXOs

La fonction d'assistance buildBaseTx () envoie un seul type d'actif. Nous avons un assetID particulier dont nous voulons envoyer les pièces à une adresse de destinataire. C'est un atout imaginaire pour cet exemple que nous pensons avoir 400 pièces. Vérifions que nous avons les fonds disponibles pour la transaction.

let assetid = "23wKfz3viWLmjWo2UZ7xWegjvnZFenGAVkouwQCeB9ubPXodG6"; //avaSerialized string
let mybalance = utxos.getBalance(myAddresses, assetid); //returns 400 as a BN

Nous avons 400 pièces! Nous allons maintenant envoyer 100 de ces pièces à l'adresse de notre ami.

let sendAmount = new BN(100); //amounts are in BN format
let friendsAddress = "X-avax1k26jvfdzyukms95puxcceyzsa3lzwf5ftt0fjk"; // address format is Bech32

//The below returns a UnsignedTx
//Parameters sent are (in order of appearance):
//   * The UTXO Set
//   * The amount being sent as a BN
//   * An array of addresses to send the funds
//   * An array of addresses sending the funds
//   * An array of addresses any leftover funds are sent
//   * The AssetID of the funds being sent
let unsignedTx = await xchain.buildBaseTx(utxos, sendAmount, [friendsAddress], addressStrings, addressStrings, assetid);
let signedTx = xchain.signTx(unsignedTx);
let txid = await xchain.issueTx(signedTx);

Et la transaction est envoyée !

Obtenez le statut de la transaction

Maintenant que nous avons envoyé la transaction au réseau, il faut quelques secondes pour déterminer si la transaction a abouti. Nous pouvons obtenir un statut mis à jour sur la transaction en utilisant le TxID via la X-Chain.

// returns one of: "Accepted", "Processing", "Unknown", and "Rejected"
let status = await xchain.getTxStatus(txid);

Les statuts peuvent être l'un des suivants: “Accepted”, “Processing”, “Unknown”, and “Rejected”:

  • “Accepted” indique que la transaction a été acceptée comme valide par le réseau et exécutée.

  • “Processing” indique que la transaction fait l'objet d'un vote.

  • “Unknown” indique que le nœud ne sait rien de la transaction, ce qui indique que le nœud ne l'a pas.

  • “Rejected” iindique que le nœud connaît la transaction, mais qu'elle est en conflit avec une transaction acceptée.

Vérifiez les résultats

La transaction est finalement revenue comme "Accepted", mettons maintenant à jour l'UTXOSet et vérifions que le solde de la transaction est comme prévu.

Remarque: dans un réseau réel, le solde n'est pas garanti pour correspondre à ce scénario. Les frais de transaction ou les dépenses supplémentaires peuvent faire varier le solde. Aux fins de cet exemple, nous n'assumons aucun de ces cas.

let updatedUTXOs = await xchain.getUTXOs();
let newBalance = updatedUTXOs.getBalance(myAddresses, assetid);
if(newBalance.toNumber() != mybalance.sub(sendAmount).toNumber()){
    throw Error("heyyy these should equal!");
}
PrécédentManagement des clés sur la X-ChainSuivantAPI

Dernière mise à jour il y a 4 ans

Cet article vous a-t-il été utile ?