Les migrations de la truffe expliquées
Migration de la truffe: un outil puissant pour le déploiement automatisé de contrats intelligents
Les migrations sont un moyen pour les développeurs d'automatiser le déploiement des données et sa structure de support. Ils sont très utiles pour gérer le déploiement de nouvelles versions logicielles et ne se limitent pas au développement de la blockchain.
La migration de truffes nous permet de "pousser" des contrats intelligents vers la blockchain Ethereum (local, testnet ou mainnet) et de définir les étapes nécessaires pour connecter le contrat et remplir les données initiales du contrat.
L'avantage réel de la migration de la truffe est de gérer les adresses contractuelles sur la blockchain. Ce travail généralement fastidieux est presque complètement abstrait par la truffe.
Points clés
- La migration des truffes est essentielle pour automatiser le déploiement de contrats intelligents vers la blockchain Ethereum, qui permet aux développeurs de gérer efficacement les adresses et les interactions des contrats.
- Ce processus consiste à créer des scripts de migration à l'aide de JavaScript, ce qui aide à déployer en douceur les contrats et à gérer leurs dépendances.
- Il est crucial d'utiliser
truffle compile
pour compiler des contrats pour générer des artefacts qui facilitent l'interaction entre le contrat et la blockchain avant d'exécuter la migration. - Les développeurs peuvent utiliser une seule commande pour gérer plusieurs contrats et leurs interdépendances, améliorant ainsi l'évolutivité et la maintenabilité des applications de blockchain.
Précautions
Assurez-vous que le cadre de truffes et la CLI de Ganache sont installés.
débutant
Tout d'abord, sélectionnez un dossier de projet et exécutez truffle init
. Vous devriez obtenir une sortie comme ceci:
<code>Downloading... Unpacking... Setting up... Unbox successful. Sweet! Commands: Compile: truffle compile Migrate: truffle migrate Test contracts: truffle test</code>
Cette commande crée un projet de truffes de base dans votre répertoire. La structure du répertoire est la suivante:
<code>. ├── contracts │ └── Migrations.sol ├── migrations │ └── 1_initial_migration.js ├── test ├── truffle-config.js └── truffle.js</code>
Tout d'abord, dans le répertoire contracts
, créez un nouveau fichier nommé Storage.sol
avec le contenu suivant:
pragma solidity ^0.4.21; contract Storage { mapping (string => string) private _store; function addData(string key, string value) public { require(bytes(_store[key]).length == 0); _store[key] = value; } function removeData(string key) public returns (string) { require(bytes(_store[key]).length != 0); string prev = _store[key]; delete _store[key]; return prev; } function changeData(string key, string newValue) public { require(bytes(_store[key]).length != 0); _store[key] = newValue; } }
Migration initiale
Vous avez peut-être remarqué que deux fichiers sont créés lors de l'exécution truffle init
: Migrations.sol
et 1_initial_migration.js
.
Les fichiers de migration initiaux nécessitent rarement des modifications. Leur rôle est essentiellement de suivre les adresses sur la blockchain.
Le fichier Migrations.sol
peut être écrit comme vous le souhaitez, mais il doit se conformer à l'interface fixe créée par la commande truffle init
. Vous pouvez faire des migrations avancées dans ces fichiers, mais comme je l'ai dit, cela est rarement nécessaire.
1_initial_migration.js
. Son objectif est simplement de pousser le fichier Migrations.sol
vers la blockchain cible.
Migrer les données
Afin de déployer des contrats intelligents à la blockchain Ethereum, vous devez d'abord écrire le fichier de migration. Tout d'abord, dans votre répertoire migrations
, créez un fichier nommé 2_deploy_contracts.js
. Votre structure de projet devrait maintenant ressembler à ceci:
<code>Downloading... Unpacking... Setting up... Unbox successful. Sweet! Commands: Compile: truffle compile Migrate: truffle migrate Test contracts: truffle test</code>
Afin de déployer des contrats intelligents en utilisant la migration, nous devons d'abord accéder à leurs artefacts . Ces fichiers décrivent l'adresse du contrat, le réseau où le contrat a été déployé et les fonctions du contrat.
Alors, d'où viennent toutes ces données?
Dans votre répertoire de projet, exécutez truffle compile
. Si tout se passe bien, vous devriez obtenir une sortie comme ceci:
<code>. ├── contracts │ └── Migrations.sol ├── migrations │ └── 1_initial_migration.js ├── test ├── truffle-config.js └── truffle.js</code>
Selon la version du compilateur, vous pouvez recevoir des avertissements, mais tant qu'il n'y a pas d'erreurs, vous pouvez continuer.
Vérifiez maintenant à nouveau votre structure de répertoire de projet:
pragma solidity ^0.4.21; contract Storage { mapping (string => string) private _store; function addData(string key, string value) public { require(bytes(_store[key]).length == 0); _store[key] = value; } function removeData(string key) public returns (string) { require(bytes(_store[key]).length != 0); string prev = _store[key]; delete _store[key]; return prev; } function changeData(string key, string newValue) public { require(bytes(_store[key]).length != 0); _store[key] = newValue; } }
Notez qu'il existe maintenant un dossier build
contenant deux fichiers - Migrations.json
et Storage.json
- qui correspondent aux fichiers de contrat intelligents dans le répertoire contracts
.
Ces fichiers * .json contiennent des descriptions de leurs contrats intelligents respectifs. Les descriptions incluent:
- Nom du contrat
- Contrat ABI (Interface binaire d'application - une liste de toutes les fonctions de contrat intelligent, ainsi que leurs paramètres et valeurs de retour)
- Contrat Bytecode (Données de contrat compilées)
- Contrat déployé bytecode (la dernière version de ByteCode déployé sur la blockchain)
- Version du compilateur du contrat du compilateur
- La liste des réseaux de contrats déployés et l'adresse de chaque contrat sur le réseau.
Ce fichier permet à Truffle de créer des wrappers JavaScript pour communiquer avec des contrats intelligents. Par exemple, lorsque vous appelez contract.address
dans le code JavaScript, le cadre de truffes lit l'adresse du fichier * .json et implémente une conversion facile entre la version contractuelle et le réseau.
Écriture de fichiers de migration
Avec ces connaissances, écrivons le premier fichier de migration. Dans le fichier 2_deploy_contracts.js
, écrivez ce qui suit:
<code>. ├── contracts │ ├── Migrations.sol │ └── Storage.sol ├── migrations │ ├── 1_initial_migration.js │ └── 2_deploy_contracts.js ├── test ├── truffle-config.js └── truffle.js</code>
La rédaction d'un fichier de migration est aussi simple. Pour exécuter le script de migration, exécutez la commande suivante dans le terminal:
<code>Compiling ./contracts/Migrations.sol... Compiling ./contracts/Storage.sol... Writing artifacts to ./build/contracts</code>
Vous devriez recevoir un message d'erreur:
<code>. ├── build │ └── contracts │ ├── Migrations.json │ └── Storage.json ├── contracts │ ├── Migrations.sol │ └── Storage.sol ├── migrations │ ├── 1_initial_migration.js │ └── 2_deploy_contracts.js ├── test ├── truffle-config.js └── truffle.js</code>
Cela signifie que la truffe ne peut pas trouver le réseau auquel vous souhaitez déployer.
Pour utiliser la blockchain Ethereum simulée, exécutez ganache-cli
dans l'onglet New Terminal. Vous devriez obtenir une sortie comme ceci: (la sortie est omise, la même que le texte d'origine)
Cela signifie que vous avez lancé une blockchain privée qui fonctionne sur LocalHost: 8545. Maintenant, configurons la truffe pour déployer sur le réseau.
Mettez ce qui suit dans le fichier truffle.js
:
// 从 Storage.json 文件中获取 Storage 合约数据 var Storage = artifacts.require("./Storage.sol"); // JavaScript 导出 module.exports = function(deployer) { // deployer 是 Truffle 用于将合约部署到网络的包装器 // 将合约部署到网络 deployer.deploy(Storage); }
Cela signifie simplement que vous déployez votre contrat sur un réseau exécuté sur localhost: 8545.
Exécutez maintenant truffle migrate
. Vous devriez obtenir une sortie comme ceci: (la sortie est omise, la même que le texte d'origine)
truffes migre votre contrat vers le réseau et sauve des artefacts. Dans le répertoire build
, dans le fichier Storage.json
, vérifiez que cela est correct en vérifiant l'objet networks
. Vous devriez voir quelque chose comme ceci: (le contenu est omis, le même que le texte d'origine)
... (Le contenu ultérieur est le même que le texte d'origine, y compris le traitement de plusieurs contrats, réseaux, comptes, bibliothèques, ainsi que le résumé final et la FAQ, qui ne seront pas répétés ici.)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds











Ce programme pilote, une collaboration entre le CNCF (Cloud Native Computing Foundation), Ampere Computing, Equinix Metal et ACTUTIE, rationalise ARM64 CI / CD pour les projets GitHub CNCF. L'initiative répond aux problèmes de sécurité et aux performances LIM

Ce tutoriel vous guide dans la création d'un pipeline de traitement d'image sans serveur à l'aide de services AWS. Nous allons créer un frontend Next.js déployé sur un cluster ECS Fargate, en interagissant avec une passerelle API, des fonctions lambda, des seaux S3 et DynamoDB. Ème

Restez informé des dernières tendances technologiques avec ces meilleurs bulletins de développeur! Cette liste organisée offre quelque chose pour tout le monde, des amateurs d'IA aux développeurs assaisonnés du backend et du frontend. Choisissez vos favoris et gagnez du temps à la recherche de rel

Puzzles CI / CD et solutions pour les logiciels open source dans l'architecture ARM64 Le déploiement de logiciels open source sur l'architecture ARM64 nécessite un environnement CI / CD puissant. Cependant, il existe une différence entre les niveaux de soutien des architectures de processeur ARM64 et traditionnelles x86, qui sont souvent désavantagées. Les développeurs de composants d'infrastructure pour plusieurs architectures ont certaines attentes pour leur environnement de travail: Cohérence: les outils et méthodes utilisés sur les plateformes sont cohérents, évitant la nécessité de modifier le processus de développement en raison de l'adoption de plateformes moins populaires. Performances: La plate-forme et le mécanisme de support ont de bonnes performances pour garantir que les scénarios de déploiement ne sont pas affectés par une vitesse insuffisante lors de la prise en charge de plusieurs plates-formes. Couverture de test: efficacité, conformité et

Le développement de logiciels de télécommunications personnalisés est sans aucun doute un investissement considérable. Cependant, à long terme, vous pouvez réaliser qu'un tel projet peut être plus rentable car il peut augmenter votre productivité comme toute solution prête à l'emploi sur le marché. Comprendre les avantages les plus importants de la construction d'un système de télécommunications personnalisé. Obtenez les fonctionnalités exactes dont vous avez besoin Il y a deux problèmes potentiels avec le logiciel de télécommunications standard que vous pouvez acheter. Certaines manquent de fonctionnalités utiles qui peuvent améliorer considérablement votre productivité. Parfois, vous pouvez les améliorer avec une certaine intégration externe, mais cela ne suffit pas toujours pour les rendre excellents. D'autres logiciels ont trop de fonctions et sont trop compliqués à utiliser. Vous n'en utilisez probablement pas (jamais!). Un grand nombre de fonctionnalités ajoute généralement au prix. En fonction de vos besoins
