В эти дни я играл с Convector, фреймворком javascript для разработки смарт-контрактов и блокчейнов. Честно говоря, спасибо WoldSibu за то, что он принес такой отличный инструмент в мир javascript.

Я не буду вдаваться в подробности того, как работает конвектор, но настоятельно рекомендую вам проверить это здесь 😉.

У Convector есть набор руководств на своем веб-сайте, в которых вы узнаете, как использовать фреймворк. Я заметил, что одна из них - создать собственный бэкэнд для предоставления API-интерфейсов с помощью NodeJS, в частности, с помощью Express.

Мне было интересно, могу ли я использовать другую платформу NodeJS вместо Express ?? Является ли это возможным?? 🤔 Ответ ДА! Это просто Javascript. Таааак Мы собираемся использовать NestJS в этом уроке.

Но что такое NestJS? На их веб-сайте он определен как прогрессивный фреймворк Node.js для создания эффективных, надежных и масштабируемых серверных приложений. Одна из замечательных вещей заключается в том, что он очень похож на Angular, следует тем же шаблонам и имеет схожие функции, такие как поставщики, каналы, модули.

📝 Прежде чем мы начнем

  • Установите Node 8 (версия, рекомендованная документацией)
  • Установить докер
  • Прежде чем продолжить, прочтите Учебник по смарт-контракту на сайте конвектора.

⏰ Слишком много разговоров, приятель!

Мы собираемся использовать пример, приведенный в back-end руководстве, в качестве нашего базового проекта, а затем перенести приложение Express на NestJS. Разветвите репо здесь.

🛠 Настройка

Пожалуйста, выполните следующий порядок, иначе вы можете столкнуться с некоторыми странными ошибками:

  1. Установите Hurley, который поможет нам настроить тестовую сеть
    npm i -g @worldsibu/hurley
  2. Запустите rm -rf ./packages/server, чтобы удалить приложение Express
  3. Установите CLI NestJS, запустив npm install -g @nestjs/cli
  4. Переместить в папку package запустить nest new server. Это поможет вам создать проект NestJS.
  5. Доступ к папке на сервере cd server
  6. Установите dotenv для обработки переменных среды
    npm i dotenv --save-dev
  7. Вернитесь в корень проекта и установите пакеты смарт-контрактов, которые будут использоваться NestJS
    npx lerna add participant-cc --scope server --no-bootstrap
    npx lerna add person-cc --scope server --no-bootstrap
  8. Чтобы избежать конфликтов ввода, добавьте флаг skipLibCheck в файлы root и server tsconfig. (Существует проблема между Jest, используемым NestJS, и Mocha, используемым Convector)

9. И наконец npm install

Если npx не работает, обновите версию NPM или просто установите lerna глобально, запустив npm install -g lerna и запустите ту же команду без npx.

👷🏻‍♂️ Что мы будем строить?

Мы собираемся повторно использовать два смарт-контракта, которые были созданы в учебнике по смарт-контрактам, и выставить их через конечные точки с помощью NestJS.

Вот краткое объяснение того, что это делается в учебнике по смарт-контракту:

  1. В блокчейне есть три структуры данных: Участники сети, Атрибут и Человек.
  2. Каждая структура данных определяется как:
  • Участники сети: это компании, которые присваивают атрибуты сети. Они несут ответственность за то, что сообщают пользователям, и их можно идентифицировать в сети.
  • Атрибут: это утверждение, которое участник сети удостоверяет для лица.
  • Человек: это люди, представленные в сети. У них есть назначенные атрибуты, и они могут просто запрашивать их по мере необходимости для сертификации перед третьей стороной.

3. Деловые правила

  • Создание человека должно быть обязанностью только одной организации - правительства.
  • Каждая организация (участник сети) должна иметь возможность выдавать или сертифицировать атрибуты.
  • Каждая организация (участник сети) должна иметь возможность проверять / запрашивать атрибуты у человека.
  • Одного идентификатора должно быть достаточно, чтобы запросить всю информацию, относящуюся к одному человеку и его атрибутам.
  • Только организация, которая сертифицирует атрибут, может его редактировать.

Поток должен выглядеть так:

  • Правительство может «записать» нового человека.
  • Правительство может добавить этому человеку некоторые атрибуты по умолчанию.
  • Затем другие организации могут приступить к выдаче атрибутов (профессия, страховой статус, опыт работы).
  • Каждое изменение выданных атрибутов будет очевидным. Изменения атрибутов может вносить только организация, которая их выпустила.

Определение и бизнес-правила взяты из учебника.

Давайте взглянем на следующий пример, чтобы лучше понять:

Предположим, что участник сети - правительство, человек - вы, а атрибут вашего сертификата. Правительство отвечает за регистрацию вашего дня рождения и выдает свидетельство о рождении, которое вы храните. Но по какой-то причине ваше имя содержит опечатку (извините 😂) в свидетельстве и только окружной суд (другой участник сети, который не является правительством ) могу помочь тебе. Окружной суд может исправить ваше имя, но не создать другое лицо.

👨🏻‍💻 Код Код

Мы уже запускаем проект NestJS, следующим шагом будет создание модуля, контроллера и службы для каждого смарт-контракта.

Начнем с логики participant. Чтобы сгенерировать запуск модуля:

nest generate module participant

Эта команда создаст модуль participant и автоматически зарегистрирует его в модуле приложения.

Каждая команда, запускаемая с помощью Nest CLI, будет автоматически регистрировать функцию (поставщик, модуль, канал и т. Д.) В модуле области, если он существует, в противном случае он будет добавлен в модуль приложения.

Чтобы создать контроллер:

nest generate controller participant

Давайте проделаем то же самое с person, но на этот раз мы собираемся создать службу для этого модуля:

nest generate module person

nest generate controller person

nest generate service person

и создайте в папке src два файла: env.ts и convector.ts:

Ваша папка src должна выглядеть так

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

Скопируйте и вставьте в соответствующий файл

Контроллер-участник

Персональная служба

Персональный контролер

⚙️ Запустите Конвектор и проверьте

Давайте запустим те же команды, что и в бэкэнд-руководстве:

  1. Убедитесь, что Docker запущен.
  2. Заходим в корень и запускаем:

3. Протестируйте конечные точки.

4. Выполните несколько транзакций.

Результат:

Заключение

Конвектор - отличный инструмент для создания смарт-контрактов с использованием javascript, это еще один вариант на панели веб-разработчиков. Мне приятно, что он не привязан к фреймворку NodeJS. С другой стороны, NestJS - это очень надежный фреймворк, вдохновленный Angular, позволяющий разработчикам Front-end легко переходить на серверную часть.

Полный пример можно найти здесь

Я веб-разработчик, фанат javascript 🤓 и хорошей еды 🍕, но все еще изучаю блокчейн. Любые предложения будут приняты. Следуй за мной на: