Maison >Périphériques technologiques >Industrie informatique >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
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. 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:
<code class="language-solidity">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; } }</code>
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:
<code class="language-solidity">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; } }</code>
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:
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
:
<code class="language-javascript">// 从 Storage.json 文件中获取 Storage 合约数据 var Storage = artifacts.require("./Storage.sol"); // JavaScript 导出 module.exports = function(deployer) { // deployer 是 Truffle 用于将合约部署到网络的包装器 // 将合约部署到网络 deployer.deploy(Storage); }</code>
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!