Умные контракты не самые простые вещи для работы. Процесс настройки для начала разработки включает в себя кучу громоздких, подверженных ошибкам шагов, которые сами по себе приводят к часам времени разработчика.
Вам нужно настроить:
- Локальная сеть TestRPC для тестирования.
- Treufle + Web3 Среда для общения и развертывания узлов.
- Сбор квитанций, журналов и т. Д.
- Контрактная подготовка и подготовка к постановке. И куча других вещей.
По этой причине мы создадим автоматический маршрут, чтобы упростить нашу жизнь, которая подготовит вашу сборку, запуск и тестирование в считанные минуты. Для демонстрационных целей мы будем использовать шаблон проекта Metacoin от Trufflebox.
В конце этой статьи у вас будет автоматическая настройка Docker, которая поможет вам:
- Запустите интеллектуальные контрактные тесты с помощью TestRPC.
- Выполните развертывания в выбранной вами сети.
- Легко получить обновленные файлы миграции в вашей локальной системе.
- Помогите собрать журналы данных для будущей оценки
Убедитесь, что вы установили узел, NPM, Docker и Docker-Compose, чтобы следовать за ним, так что давайте начнем. Во -первых, давайте создадим каталог проекта и инициируем некоторые файлы:
mkdir dockerized-smart-contracts && cd dockerized-smart-contracts npm init mkdir src && cd src
Теперь в пределах SRC
Папка, мы получим нашу первичную репоштатную репо. Мы будем использовать простой проект, такой как Metacoin для демонстрационных целей. трюфель Unbox Metacoin
Если вы хотите получить один из проектов Truffle Suite Box, вам нужно будет установить трюфель в вашей локальной системе. После загрузки трюфера Project Repo, нам нужно инициировать Package.json
В пределах SRC
папка.
npm init
Теперь давайте заполним src/package.json
.
Сценарии — это некоторые стандартные команды, которые мы регулярно используем для разработки в нашей экосистеме смарт -контракта. Чтобы узнать более подробно, что делает каждая из этих трюфельных команд. Вы можете проверить трюфельные документы. Для Linting я добавил Solhint, который также является популярным Linter.
{ "name": "truffle-metacoin-smart-contracts", "version": "0.1.0", "description": "A smart contract demo project", "scripts": { "test":"truffle test", "compile": "truffle compile", "networks": "truffle networks", "lint": "solhint -f table contracts/**/*.sol", "lint-auto-fix": "prettier --write contracts/**/*.sol", "coverage": "truffle run coverage", "eslint-auto-fix": "./node_modules/.bin/eslint --fix .", "deploy": "sh ./scripts/test-contract.sh", "deploy-rinkeby":"sh ./scripts/deploy-rinkeby.sh", "deploy-mainnet":"sh ./scripts/deploy-mainnet.sh" }, "engines": { "node": "12.0.0", "npm": "6.9.0" }, "devDependencies": { "chai": "^4.2.0", "dotenv": "^6.2.0", "eslint": "^5.16.0", "ganache-cli": "^6.9.1", "prettier": "^2.0.5", "prettier-plugin-solidity": "^1.0.0-alpha.56", "solhint": "^3.2.0", "solhint-plugin-prettier": "0.0.4", "solidity-coverage": "^0.7.7", "standard": "^12.0.1", "truffle": "^5.0.30", "@truffle/hdwallet-provider": "^1.0.0-web3one.5" } }
Нам нужно создать несколько сценариев для развертывания сети и ведения журнала. Эти сценарии могут быть изменены в зависимости от требований к развертыванию и сети.
mkdir logs mkdir scripts && cd scripts touch test-contract.sh deploy-rinkeby.sh
Теперь внутри Test-Contract.sh
Мы напишем сценарий для тестирования контрактов. Это создаст файл журнала с сегодняшней датой и всей стенограммой развертывания.
LOG_FILE=./logs/$(date "+%Y-%m-%d")-test-log.txt echo "[ TIMESTAMP: $(date "+%H:%M-%S")" ]>>$LOG_FILE truffle test | tee -a $LOG_FILE echo "----------------------------------------------------------------------------------------------------------" >> $LOG_FILE
Пока все хорошо, мы можем также написать соответствующие сценарии для развертывания в другие сети и зарегистрировать их результаты. Теперь самое интересное, что начинается, мы начнем процесс Docker сейчас.
Давайте вернемся к нашему /Dockerized-Smart-Contracts
каталог, где у нас был первый package.json
. Мы создадим файл DockerFile и Docker-Compose для вашего проекта Smart-Contract в SRC.
touch Dockerfile.test docker-compose.yml
Теперь внутри файла Docker мы определим слои для нашего Smart Contract Repo. Этот DockerFile создаст изображение для контрактного проекта и по умолчанию запустит сценарий «развертывания», когда мы запускаем контейнер из этого изображения.
FROM mhart/alpine-node:12 RUN apk add --no-cache make gcc g++ python RUN apk add --update tzdata #Change it to your timezone. This'll come handy to monitor logfiles. ENV TZ=Asia/Kolkata # Creating Relevant directories. # We decide to name our project directory as "smart-contracts" WORKDIR /smart-contracts RUN mkdir logs logs/test-network logs/main-network logs/test # Copy the package.json & lock file & install the relevant packages COPY src/package.json /smart-contracts/package.json COPY src/package-lock.json /smart-contracts/package-lock.json RUN npm install # Add smart-contract relevant code to directory COPY src/ /smart-contracts/ # Give executable permission to scripts. RUN chmod +x ./scripts/*.sh ENTRYPOINT ["npm", "run"] CMD ["deploy"]
Теперь давайте настроим наш Docker-Compose.yml Настройка Compose поможет нам объединить отдельные контейнерные ссылки и зависимости контейнера.
version: '3' services: # Ganache-cli ganache: image: trufflesuite/ganache-cli # Smart contract source smart-contracts: build: context: . dockerfile: Dockerfile.test # The .env file should be set with necessary wallet keys and node information env_file: - ./.env depends_on: - ganache # For bind mounts, make sure to add your absolute path location on your system. volumes: # Mount build folder - /home/user/dockerize-smart-contracts/src/build:/smart-contracts/build/ # Mount log files - /home/user/dockerize-smart-contracts/logs:/smart-contracts/logs/
Потрясающе, теперь добавим несколько сценариев в нашем ./dockerize-smart-contracts/package.json
файл. Это основные сценарии, которые мы выполним, чтобы настроить наши беговые контейнеры через Docker-Compose.
... "scripts"{ "setup": "docker-compose up --no-start --build", "start": "docker-compose run smart-contracts test && dokcer-compose up --build -d ganache", "stop": "docker-compose stop", } ...
Теперь давайте сначала подготовимся к настройке проекта Smart-Contract.
npm run setup
За этим следует запустить контейнеры и развернуть контракты в сети Test Ganache с:
npm run start.
Экземпляр контейнера с интеллектуальными конструкциями начнется вместе с контейнером Ganache и выполняет тестовые случаи, определенные в SRC/Test. Так же, как это, мы готовы к тому, что наш трубопровод для умного контракта.
Проверьте шаблон Repo Github здесь, чтобы узнать гораздо больше функций. Настройка поможет облегчить ваше путешествие в мире Дапп. До следующего раза живи долго и процветайте. 🖖
Первоначально опубликовано: https://hackernoon.com/automating-smart-contract-development-with-docker-5w5735ou
Оригинал: «https://dev.to/tirtha/automating-smart-contract-development-with-docker-32em»