Maison >Périphériques technologiques >Industrie informatique >Les migrations de la truffe expliquées

Les migrations de la truffe expliquées

Lisa Kudrow
Lisa Kudroworiginal
2025-02-16 10:47:13380parcourir

Truffle Migrations Explained

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:

<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.

Il en va de même pour les fichiers

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:

  • 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:

<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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn