В эти дни я играл с Convector, фреймворком javascript для разработки смарт-контрактов и блокчейнов. Честно говоря, спасибо WoldSibu за то, что он принес такой отличный инструмент в мир javascript.
Я не буду вдаваться в подробности того, как работает конвектор, но настоятельно рекомендую вам проверить это здесь 😉.
У Convector есть набор руководств на своем веб-сайте, в которых вы узнаете, как использовать фреймворк. Я заметил, что одна из них - создать собственный бэкэнд для предоставления API-интерфейсов с помощью NodeJS, в частности, с помощью Express.
Мне было интересно, могу ли я использовать другую платформу NodeJS вместо Express ?? Является ли это возможным?? 🤔 Ответ ДА! Это просто Javascript. Таааак Мы собираемся использовать NestJS в этом уроке.
Но что такое NestJS? На их веб-сайте он определен как прогрессивный фреймворк Node.js для создания эффективных, надежных и масштабируемых серверных приложений. Одна из замечательных вещей заключается в том, что он очень похож на Angular, следует тем же шаблонам и имеет схожие функции, такие как поставщики, каналы, модули.
📝 Прежде чем мы начнем
- Установите Node 8 (версия, рекомендованная документацией)
- Установить докер
- Прежде чем продолжить, прочтите Учебник по смарт-контракту на сайте конвектора.
⏰ Слишком много разговоров, приятель!
Мы собираемся использовать пример, приведенный в back-end руководстве, в качестве нашего базового проекта, а затем перенести приложение Express на NestJS. Разветвите репо здесь.
🛠 Настройка
Пожалуйста, выполните следующий порядок, иначе вы можете столкнуться с некоторыми странными ошибками:
- Установите Hurley, который поможет нам настроить тестовую сеть
npm i -g @worldsibu/hurley
- Запустите
rm -rf ./packages/server
, чтобы удалить приложение Express - Установите CLI NestJS, запустив
npm install -g @nestjs/cli
- Переместить в папку
package
запуститьnest new server
. Это поможет вам создать проект NestJS. - Доступ к папке на сервере
cd server
- Установите
dotenv
для обработки переменных средыnpm i dotenv --save-dev
- Вернитесь в корень проекта и установите пакеты смарт-контрактов, которые будут использоваться NestJS
npx lerna add participant-cc --scope server --no-bootstrap
npx lerna add person-cc --scope server --no-bootstrap - Чтобы избежать конфликтов ввода, добавьте флаг
skipLibCheck
в файлы root и servertsconfig
. (Существует проблема между Jest, используемым NestJS, и Mocha, используемым Convector)
9. И наконец npm install
Если npx не работает, обновите версию NPM или просто установите lerna глобально, запустив npm install -g lerna и запустите ту же команду без npx.
👷🏻♂️ Что мы будем строить?
Мы собираемся повторно использовать два смарт-контракта, которые были созданы в учебнике по смарт-контрактам, и выставить их через конечные точки с помощью NestJS.
Вот краткое объяснение того, что это делается в учебнике по смарт-контракту:
- В блокчейне есть три структуры данных: Участники сети, Атрибут и Человек.
- Каждая структура данных определяется как:
- Участники сети: это компании, которые присваивают атрибуты сети. Они несут ответственность за то, что сообщают пользователям, и их можно идентифицировать в сети.
- Атрибут: это утверждение, которое участник сети удостоверяет для лица.
- Человек: это люди, представленные в сети. У них есть назначенные атрибуты, и они могут просто запрашивать их по мере необходимости для сертификации перед третьей стороной.
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 должна выглядеть так
Теперь нам нужно начать перенос логики. Весь код, связанный с коммуникацией с конвектором и любыми другими тяжелыми вычислениями для наших служб, и контроллеры будут отвечать за раскрытие конечных точек и передачу данных службам.
Скопируйте и вставьте в соответствующий файл
Контроллер-участник
Персональная служба
Персональный контролер
⚙️ Запустите Конвектор и проверьте
Давайте запустим те же команды, что и в бэкэнд-руководстве:
- Убедитесь, что Docker запущен.
- Заходим в корень и запускаем:
3. Протестируйте конечные точки.
4. Выполните несколько транзакций.
Результат:
Заключение
Конвектор - отличный инструмент для создания смарт-контрактов с использованием javascript, это еще один вариант на панели веб-разработчиков. Мне приятно, что он не привязан к фреймворку NodeJS. С другой стороны, NestJS - это очень надежный фреймворк, вдохновленный Angular, позволяющий разработчикам Front-end легко переходить на серверную часть.
Полный пример можно найти здесь
Я веб-разработчик, фанат javascript 🤓 и хорошей еды 🍕, но все еще изучаю блокчейн. Любые предложения будут приняты. Следуй за мной на: