Что такое миграция трюфелей?

Как написано в документах Truffle :

  

Миграции - это файлы Javascript, которые помогают вам развернуть контракты на   Сеть Ethereum. Эти файлы отвечают за   задач развертывания, и они написаны в предположении, что ваш   потребности в развертывании со временем будут меняться. По мере развития вашего проекта,   вы создадите новые сценарии миграции, чтобы продолжить эту эволюцию на   blockchain. Запись ранее выполненных миграций записывается   on-chain через специальный контракт Migrations, подробно описанный ниже.

Но что это значит? Каковы варианты использования миграций?

Я также пытаюсь понять файл Migrations.sol , который указан в учебнике Трюфель :

contract Migrations {
  address public owner;
  uint public last_completed_migration;

  modifier restricted() {
    if (msg.sender == owner) _
  }

  function Migrations() {
    owner = msg.sender;
  }

  function setCompleted(uint completed) restricted {
    last_completed_migration = completed;
  }

  function upgrade(address new_address) restricted {
    Migrations upgraded = Migrations(new_address);
    upgraded.setCompleted(last_completed_migration);
  }
}
17 голосов | спросил takeshi 25 AM000000100000005931 2016, 10:15:59

2 ответа


13

Контракт Migrations хранит (в last_completed_migration) номер, который соответствует последнему примененному сценарию миграции, найденному в папке migrations , Развертывание этого контракта Migrations всегда является первым таким шагом в любом случае. Стандарт нумерации x_script_name.js, с x, начинающийся с 1. Контракты с реальным мясом обычно бывают в сценариях, начинающихся с 2_....

Итак, поскольку этот контракт Migrations хранит номер последнего применяемого сценария развертывания, Truffle не будет запускать эти сценарии снова. С другой стороны, в будущем вашему приложению может потребоваться изменение измененного или нового контракта. Чтобы это произошло, вы создаете новый скрипт с увеличенным числом, описывающим шаги, которые должны выполняться. Затем, опять же, после того, как они будут выполняться один раз, они больше не будут запускаться.

И да, последние две строки являются истинными. Посмотрите http://solidity.readthedocs.io/en/latest/contracts .html # create-контракты внутри contract OwnedToken {.

ответил Xavier Leprêtre B9lab 25 PM00000020000001331 2016, 14:17:13
1

Вот пример реального использования трюфельных миграций.

У меня есть контракт на хранение и контракт на интерфейс. Интерфейс должен знать, где находится хранилище, и хранилище должно предоставить разрешения для интерфейса.

Итак, во второй миграции (первая из них зарезервирована для домашней уборки Трюфеля) Я развертываю хранилище:

var MEStorage = artifacts.require("./MEStorage.sol");

module.exports = function(deployer) {
  deployer.deploy(MEStorage);
};

И в третьем я получаю адрес хранилища и развертываю интерфейс с этим адресом в качестве параметра. И после того, как у меня есть адрес интерфейса, я предоставляю ему разрешения в хранилище:

var MEInterface = artifacts.require("./MEInterface.sol");
var MEStorage = artifacts.require("./MEStorage.sol");

module.exports = function(deployer) {
  deployer.deploy(MEInterface, MEStorage.address).then(() => {
    MEStorage.deployed().then(storageInstance => {
        return storageInstance.setPermissions(MEInterface.address, 2);
        // 2 - is FULL access
    });
  });
};

Вот видео , объясняющее этот вариант использования и статья о шаблоне хранения Я использую.

ответил takeshi 2 AMpMon, 02 Apr 2018 10:11:16 +030011Monday 2018, 10:11:16

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132