L'une des principales caractéristiques du réseau Avalanche est la possibilité de créer de nouvelles blockchains. Avalanche prend actuellement en charge la création de nouvelles instances de l'AVM (la machine virtuelle exécutée par X-Chain) et de la VM d'horodatage.
Dans ce tutoriel, nous allons créer une nouvelle instance de l'AVM.
Créer le Subnet
Chaque blockchain est validée par un sous-réseau. Avant de pouvoir créer une blockchain, vous aurez besoin d'un sous-réseau pour la valider. Vous pouvez également utiliser un sous-réseau qui existe déjà, si vous disposez d'un nombre suffisant de ses clés de contrôle.
Le sous-réseau a besoin de validateurs pour valider les blockchains.
Assurez-vous que le sous-réseau qui validera vôtre blockchain contient au moins des validateurs snow-sample-size dedans. (Rappelez-vous que snow-sample-size est l'un des arguments de ligne de commande lors du démarrage d'un nœud. Sa valeur par défaut est 20.)
Chaque blockchain a un état de genèse lors de sa création. Chaque machine virtuelle possède une méthode d'API statique nommée buildGenesis qui prend une représentation JSON de l'état de genèse d'une blockchain et renvoie la représentation octet de cet état. (Ce n'est pas le cas pour certaines VM, comme la VM Platform, car nous interdisons la création de nouvelles instances.)
{"genesisData": {"assetAlias1": { // Each object defines an asset"name": "human readable name","symbol":"AVAL", // Symbol is between 0 and 4 characters"initialState": {"fixedCap" : [ // Choose the asset type. { // Can be "fixedCap", "variableCap""amount":1000, // At genesis, address A has"address":"A" // 1000 units of asset }, {"amount":5000, // At genesis, address B has"address":"B" // 1000 units of asset }, ... // Can have many initial holders ] } },"assetAliasCanBeAnythingUnique": { // Asset alias can be used in place of assetID in calls"name": "human readable name", // names need not be unique"symbol": "AVAL", // symbols need not be unique"initialState": {"variableCap" : [ // No units of the asset exist at genesis {"minters": [ // The signature of A or B can mint more of"A", // the asset."B" ],"threshold":1 }, {"minters": [ // The signatures of 2 of A, B and C can mint"A", // more of the asset"B","C" ],"threshold":2 }, ... // Can have many minter sets ] } }, ... // Can list more assets }}
Pour créer la représentation octet de cet état de genèse, appelez avm.buildGenesis. Votre appel doit ressembler à celui ci-dessous. Notez que cet appel est effectué vers le point de terminaison d'API statique d'AVM, / ext / vm / avm.
Créons maintenant la nouvelle blockchain. Pour ce faire, nous appelons platform.createBlockchain. Votre appel doit ressembler à celui ci-dessous. Vous devez remplacer subnetID par le sous-réseau qui validera vôtre blockchain et fournir un username qui contrôle un nombre suffisant de clés de contrôle du sous-réseau. Pour rappel, vous pouvez connaître le seuil et les clés de contrôle d’un sous-réseau en appelant platform.getSubnet.
Après quelques secondes, la transaction de création de notre blockchain aurait dû être acceptée et la blockchain devrait exister (en supposant que la demande était bien formée, etc.)
Pour vérifier, appelez platform.getBlockchains. Cela renvoie une liste de toutes les blockchains existantes.
Vous pouvez interagir avec cette nouvelle instance de l'AVM presque de la même manière que vous interagiriez avec la X-Chain. Il y a deux petites différences:
Le point de terminaison API de votre blockchain est 127.0.0.1:9650/ext/bc/zpFTwJwzPh3b9N6Ahccy4fXdJFHJJdhGah5z731J6ZspcYKpK.
Les adresses sont précédées de zpFTwJwzPh3b9N6Ahccy4fXdJFHJJdhGah5z731J6ZspcYKpK- plutôt que X-.
Dans les données de genèse, nous avons spécifié que l'adresse 8UeduLccQuSmYiY3fGQEyotM9uXxoHoQQ a 100 000 unités de l'actif avec l'alias asset1. Vérifions cela :