Рубрики
Uncategorized

Автоматизация разработки интеллектуального контракта с Docker

Умные контракты не самые простые вещи для работы. Процесс настройки для начала разработки … Tagged с блокчейном, DevOps, Docker, Tulciory.

Умные контракты не самые простые вещи для работы. Процесс настройки для начала разработки включает в себя кучу громоздких, подверженных ошибкам шагов, которые сами по себе приводят к часам времени разработчика.

Вам нужно настроить:

  • Локальная сеть 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»