AvalancheJS est livré avec son propre KeyChain AVM. Cette KeyChain est utilisée dans les fonctions de l'API, ce qui leur permet de se connecter à l'aide des clés qu'elle a enregistrées. La première étape de ce processus consiste à créer une instance d'AvalancheJS connectée à notre point de terminaison Avalanche Platform de choix.
import { Avalanche, BinTools, Buffer, BN } from "avalanche"let bintools =BinTools.getInstance();let myNetworkID =12345; //default is 3, we want to override that for our local networklet myBlockchainID ="GJABrZ9A6UQFpwjPU8MDxDd8vuyRoDVeDAXc694wJ5t3zEkhU"; // The X-Chain blockchainID on this networklet ava =newavalanche.Avalanche("localhost",9650,"http", myNetworkID, myBlockchainID);let xchain =ava.XChain(); //returns a reference to the X-Chain used by AvalancheJS
Accéder au KeyChain
Le KeyChain est accessible via la X-Chain et peut être référencé directement ou via une variable de référence.
let myKeychain =xchain.keyChain();
Cela expose l'instance de la classe AVMKeyChain qui est créée lorsque l'API X-Chain est créée. À l'heure actuelle, cela prend en charge la courbe secp256k1 pour les paires de clés ECDSA.
Création de key pairs sur la X-Chain
Le KeyChain a la capacité de créer de nouveaux KeyPairs pour vous et de renvoyer l'adresse associée à la paire de clés.
let newAddress1 =myKeychain.makeKey(); //returns a Buffer for the address
Vous pouvez également importer votre clé privée existante dans la KeyChain en utilisant soit un Buffer…
let mypk =bintools.avaDeserialize("24jUJ9vZexUM6expyMcT48LBx27k1m7xpraoV62oSQAHdziao5"); //returns a Bufferlet newAddress2 =myKeychain.importKey(mypk); //returns a Buffer for the address
… ou une chaîne sérialisée Avalanche fonctionne aussi:
let mypk ="24jUJ9vZexUM6expyMcT48LBx27k1m7xpraoV62oSQAHdziao5";let newAddress2 =myKeychain.importKey(mypk); //returns a Buffer for the address
Travailler avec keychains
Les KeyChains de la X-Chain disposent de capacités de gestion de clés standardisées. Les fonctions suivantes sont disponibles sur tout KeyChain qui implémente cette interface.
let addresses =myKeychain.getAddresses(); //returns an array of Buffers for the addresseslet addressStrings =myKeychain.getAddressStrings(); //returns an array of strings for the addresseslet exists =myKeychain.hasKey(newAddress1); //returns true if the address is managedlet keypair =myKeychain.getKey(newAddress1); //returns the KeyPair class
Travailler avec keypairs
Le KeyPair de la X-Chain dispose de la fonctionnalité KeyPair standardisée. Les opérations suivantes sont disponibles sur n'importe quel KeyPair qui implémente cette interface.
let address =keypair.getAddress(); //returns Bufferlet addressString =keypair.getAddressString(); //returns stringlet pubk =keypair.getPublicKey(); //returns Bufferlet pubkstr =keypair.getPublicKeyString(); //returns a CB58 encoded stringlet privk =keypair.getPrivateKey(); //returns Bufferlet privkstr =keypair.getPrivateKeyString(); //returns a CB58 encoded stringkeypair.generateKey(); //creates a new random KeyPairlet mypk ="24jUJ9vZexUM6expyMcT48LBx27k1m7xpraoV62oSQAHdziao5";let successul =keypair.importKey(mypk); //returns boolean if private key imported successfullylet message =Buffer.from("Wubalubadubdub");let signature =keypair.sign(message); //returns a Buffer with the signaturelet signerPubk =keypair.recover(message, signature);let isValid =keypair.verify(message, signature); //returns a boolean