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.
Vous pouvez également importer votre clé privée existante dans la KeyChain en utilisant soit un Buffer…
… ou une chaîne sérialisée Avalanche fonctionne aussi:
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.
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 newAddress1 = myKeychain.makeKey(); //returns a Buffer for the address
let mypk = bintools.avaDeserialize("24jUJ9vZexUM6expyMcT48LBx27k1m7xpraoV62oSQAHdziao5"); //returns a Buffer
let newAddress2 = myKeychain.importKey(mypk); //returns a Buffer for the address
let mypk = "24jUJ9vZexUM6expyMcT48LBx27k1m7xpraoV62oSQAHdziao5";
let newAddress2 = myKeychain.importKey(mypk); //returns a Buffer for the address
let addresses = myKeychain.getAddresses(); //returns an array of Buffers for the addresses
let addressStrings = myKeychain.getAddressStrings(); //returns an array of strings for the addresses
let exists = myKeychain.hasKey(newAddress1); //returns true if the address is managed
let keypair = myKeychain.getKey(newAddress1); //returns the KeyPair class
let address = keypair.getAddress(); //returns Buffer
let addressString = keypair.getAddressString(); //returns string
let pubk = keypair.getPublicKey(); //returns Buffer
let pubkstr = keypair.getPublicKeyString(); //returns a CB58 encoded string
let privk = keypair.getPrivateKey(); //returns Buffer
let privkstr = keypair.getPrivateKeyString(); //returns a CB58 encoded string
keypair.generateKey(); //creates a new random KeyPair
let mypk = "24jUJ9vZexUM6expyMcT48LBx27k1m7xpraoV62oSQAHdziao5";
let successul = keypair.importKey(mypk); //returns boolean if private key imported successfully
let message = Buffer.from("Wubalubadubdub");
let signature = keypair.sign(message); //returns a Buffer with the signature
let signerPubk = keypair.recover(message, signature);
let isValid = keypair.verify(message, signature); //returns a boolean