В первые дни разработки умных контрактов (около 2016 года) нужно было написать умные контракты в вашем любимом текстовом редакторе и развернуть их, напрямую вызвав solc
и solc
.
Чтобы сделать этот процесс немного более удобным для пользователя, было сделать сценарии bash, которые могли бы сначала скомпилировать, а затем развернуть контракт… что было лучше, но все еще довольно элементарно — проблема со сценариями, конечно, заключается в отсутствии стандартизации и субоптимальный опыт сценариев bash.
Ответ пришел в двух разных вариантах — трюфель и Embark — с трюфелем, являющимся наиболее популярным из двух (и тот, который мы обсудим в этой статье).
Чтобы понять причины, стоящие за трюфелем, мы должны понять проблемы, которые он пытается решить, которые подробно описаны ниже.
компиляция
Несколько версий компилятора solc
должны поддерживаться одновременно, с четким указанием, какая из них используется.
Среды
Контракты должны иметь среды разработки, интеграции и производства, каждая из которых имеет собственный адрес узла Ethereum, учетные записи и т. Д.
тестирование
Контракты должны быть проверяемыми. Важность тестирования программного обеспечения невозможно переоценить. Для умных контрактов важность бесконечно важнее. Так. Тестовое задание. Ваш. Контракты!
конфигурация
Ваши среды разработки, интеграции и производства должны быть инкапсулированы в файл конфигурации, чтобы они могли быть переданы товарищам по команде и использованы повторно.
Интеграция с Web3js
Web3.js — это JavaScript-инфраструктура, позволяющая упростить взаимодействие с интеллектуальными контрактами из веб-приложений Truffle делает еще один шаг вперед и включает интерфейс Web3.js из консоли Truffle, поэтому вы можете вызывать веб-функции, находясь в режиме разработки вне браузера.
Установка трюфеля
Лучший способ установить Truffle — использовать Node Package Manager (npm). После настройки NPM на вашем компьютере, установите Truffle, открыв терминал и напечатав это:
npm install -g truffle
Примечание: префикс sudo
может потребоваться на компьютерах с Linux.
Начиная
После установки Truffle лучший способ понять, как он работает, — это запустить демонстрационный проект Truffle под названием «MetaCoin».
Откройте приложение терминала (буквально Terminal в Linux и macOS или Git Bash, Powershell, Cygwin или аналогичное в Windows) и расположитесь в папке, где вы хотите инициализировать проект.
Затем выполните следующее:
mkdir MetaCoin cd MetaCoin truffle unbox metacoin
Вы должны увидеть результат примерно так:
Downloading... Unpacking... Setting up... Unbox successful. Sweet! Commands: Compile contracts: truffle compile Migrate contracts: truffle migrate Test contracts: truffle test
Если вы получаете какие-то ошибки, возможно, вы используете другую версию Truffle. Версия, для которой написано это руководство, — Truffle v4.1.5
, но инструкции должны оставаться актуальными как минимум для нескольких версий.
Структура трюфельного проекта
Ваша папка Truffle должна выглядеть примерно так:
. ├── contracts │ ├── ConvertLib.sol │ ├── MetaCoin.sol │ └── Migrations.sol ├── migrations │ ├── 1_initial_migration.js │ └── 2_deploy_contracts.js ├── test │ ├── TestMetacoin.sol │ └── metacoin.js ├── truffle-config.js └── truffle.js
Папка контрактов
Это папка, в которую вы положите все свои умные контракты.
В вашей папке контрактов также есть файл Migrations.sol
, который является специальным файлом — но об этом в следующем разделе.
Когда Truffle скомпилирует проект, он пройдет через папку contracts
и скомпилирует все совместимые файлы. На данный момент наиболее часто используемые файлы — это файлы Solidity с расширением .sol
.
В будущем это может привести к переходу на Vyper или SolidityX (оба лучше для разработки умных контрактов, но пока меньше используются).
Папка миграции
Что такое миграция трюфелей? По сути, это скрипт, который определяет, как контракты будут развернуты в блокчейне.
Зачем нам нужны миграции?
Поскольку ваш проект становится все более и более сложным, сложность ваших развертываний становится все более и более сложной соответственно.
Давайте возьмем пример:
- У вас есть умные контракты
One
,Two
иThree
- Интеллектуальный контракт
Three
содержит ссылку на интеллектуальный контрактOne
и требует адрес контрактаTwo
в его конструкторе.
Этот пример требует, чтобы контракты были не только развернуты последовательно, но и чтобы они перекрестно ссылались друг на друга. Короче говоря, миграция позволяет нам автоматизировать этот процесс.
Примерный обзор того, как вы это сделаете, будет следующим:
var One = artifacts.require("One"); var Two = artifacts.require("Two"); var Three = artifacts.require("Three"); module.exports = function(deployer) { deployer.deploy(One).then(function() { deployer.deploy(Two).then(function() { deployer.deploy(Three, One.address); }) }); };
Помимо этого, миграция позволяет вам делать много других интересных вещей, таких как:
- установить максимальный газ для развертываний
- изменить адрес развертывания
- развернуть библиотеки
- вызывать произвольные контрактные функции
Начальная миграция
Как вы заметили в своем проекте MetaCoin
, у вас есть файл с именем 1_initial_migration.js
. Этот файл выполняет развертывание контракта Migrations.sol
на блокчейне.
Обычно вам не нужно ничего делать с этим файлом после его инициализации, поэтому мы не будем заострять на этом внимание.
Тестовая папка
Как я уже сказал: ВЫ! ДОЛЖЕН! ТЕСТОВОЕ ЗАДАНИЕ! УМНЫЙ! КОНТРАКТЫ! Нет но, нет, если нет, вы должны это сделать.
Но если вы собираетесь это сделать, было бы здорово иметь автоматический инструмент, который позволит вам сделать это без проблем.
Truffle позволяет это с помощью встроенной среды тестирования. Это позволяет вам писать тесты либо в Solidity, либо в JavaScript.
Примеры в проекте MetaCoin говорят сами за себя, поэтому мы не будем вдаваться в подробности.
Ключ в том, что если вы пишете тесты Solidity, вы импортируете свои контракты в тесты с помощью директивы import
Solidity:
import "../contracts/MetaCoin.sol";
И если вы пишете их на JavaScript, вы импортируете их с помощью вспомогательной функции artifacts.require()
:
var MetaCoin = artifacts.require("./MetaCoin.sol");
Файл конфигурации
Файл конфигурации называется либо truffle.js
либо truffle.js
truffle-config.js
. В большинстве случаев он будет называться truffle.js
, но есть запасной вариант из-за странных правил приоритета команд на компьютерах с Windows.
Просто знайте, что когда вы видите truffle.js
или truffle.js
truffle-config.js
, это одно и то же. (Кроме того, не используйте CMD на Windows; PowerShell значительно лучше.)
Файл конфигурации определяет пару вещей, подробно описанных ниже.
Среды
Разработка, TestNet, Live (Производство). Вы можете определить адрес примечания network_id
, network_id
, максимальное количество газа для развертывания, цену на газ, которую вы готовы заплатить.
Структура проекта
Вы можете изменить место, где файлы собраны и расположены, но это не обязательно или даже не рекомендуется.
Версия и настройки компилятора
Исправьте версию solc
и установите параметры -O
(оптимизация).
Управление пакетами
- Трюфель может работать с EthPM (менеджером пакетов Ethereum), но он все еще очень сомнительный.
- Вы можете установить зависимости для использования EthPM в вашем проекте Truffle.
Описание Проекта
Кто сделал проект, как называется проект, контактные адреса и т. Д.
Лицензия
Используйте GPLv3 .
Выполнение кода
Чтобы скомпилировать ваши контракты, запустите:
truffle compile
Чтобы запустить миграцию, вы можете просто использовать это:
truffle migrate
Или вы можете сделать это, указав среду:
truffle migrate --network live
Для проверки ваших контрактов запустите это:
truffle test
Или вы можете запустить определенный тест, выполнив это:
truffle test ./path/to/FileTest.sol
Вывод
Трюфель — очень удобный инструмент, который немного облегчает разработку в этой новой экосистеме. Он направлен на то, чтобы превратить стандарты и общие практики из остального мира разработки в маленький уголок экспериментов с блокчейном.
Это краткое руководство продемонстрировало и объяснило основы, но чтобы по-настоящему понять Трюфель, вам нужно глубже погрузиться в эксперименты и поэкспериментировать с реальными проектами. Это то, что мы будем изучать в блокчейне SitePoint. Далее мы более подробно рассмотрим тестирование умных контрактов и миграцию Truffle .