Публикация Создание приложения на основе блокчейна с помощью Plutus впервые появилась на Coinpedia Fintech News

Введение

Блокчейн вносит вклад в различные отрасли промышленности посредством своих децентрализованных и прозрачных решений. Достижения в области разработки оказали преобразующее воздействие на разработчиков и сообщества. Преимущества блокчейна выходят за рамки децентрализации. Он экономит время, необходимое для транзакции, и не требует сторонней проверки, что снижает риски мошенничества и кибератак. Для разработчика ценно понимание того, как создавать приложения на основе блокчейна, особенно при использовании таких мощных инструментов, как Plutus. Plutus — это платформа смарт-контрактов на блокчейне Cardano. Он предлагает разработчикам надежную структуру для создания безопасных и эффективных децентрализованных приложений (DApps).

Что такое Кардано?

Cardano Платформа блокчейна, запущенная Чарльзом Хоскинсоном (соучредителем Ethereum) в 2017 году. Cardano — это платформа третьего поколения, часто рассматриваемая как альтернатива Ethereum, платформе второго поколения. Она использует механизм доказательства доли владения, который более эффективен, чем традиционные. Cardano имеет собственную криптовалюту ADA, названную в честь Ады Лавлейс. Она имеет два отдельных слоя: один обрабатывает транзакции и счета, а другой используется для управления смарт-контрактами и вычислениями. Cardano стремится создать платформу блокчейна, которая будет более безопасной, масштабируемой и адаптируемой, чем ее предшественники, и которая используется в различных приложениях, включая управление цепочками поставок, цифровую проверку личности и финансовые услуги на развивающихся рынках.

Плутон

Plutus — это язык программирования, используемый для написания смарт-контрактов на основе Cardano. Plutus основан на Haskell, который является функциональным языком. Как разработчику, вам не нужно писать ядро ​​Plutus, а все скрипты будут сгенерированы плагином компилятора Haskell. Plutus поддерживает формальную проверку, которая позволяет доказать правильность программы с помощью математики. Таким образом, повышается безопасность и снижается вероятность возникновения ошибок в смарт-контракте.

Plutus изначально интегрирован в блокчейн Cardano, что позволяет разработчикам напрямую взаимодействовать с реестром и инфраструктурой Cardano. Это помогает вам создавать и развертывать смарт-контракты, которые напрямую взаимодействуют с экосистемой Cardano. Plutus имеет инструменты, которые помогают вам моделировать смарт-контракты без полного узла Cardano и экспериментировать перед развертыванием в основной сети. Plutus хорошо подходит для разработчиков, которые хотят создавать надежные и высокопроизводительные децентрализованные приложения.

Аудитория

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

Настройка среды разработки

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

1. Установка Плутуса

Загрузите Plutus из официального репозитория: 

git клон https://github.com/input-output-hk/plutus-apps.gitcd plutus-appsnix-shell

Проверьте установку с помощью: plutus -v

2. Выбор IDE

При разработке приложений с помощью Plutus наличие правильной IDE имеет решающее значение. Plutus основан на Haskell, поэтому рекомендуется иметь IDE, поддерживающую Haskell.Два популярных варианта для разработки Plutus — это Visual Studio Code (VS Code) и Plutus Playground. Вот расширенное руководство по настройке и использованию этих IDE для разработки Plutus.

Visual Studio Code: VS Code — очень гибкий и универсальный редактор кода, который поддерживает почти все языки и имеет очень полезные расширения. Поэтому это любимый редактор разработчиков для работы. VSCode имеет открытый исходный код и предоставляет широкий спектр инструментов и функций для завершения кода.

Шаги по настройке VSCode:

  • Скачайте VSCode с официального сайта (в соответствии с кодировкой вашей операционной системы)

  • Установить программное обеспечение

  • Plutus построен на Haskell, поэтому вам необходимо установить платформу Haskell, которая включает в себя компилятор Glasgow Haskell (GHC) и cabal (инструмент сборки для Haskell).

  • Скачать Хаскелл

  • Установите расширения Haskell в VS Code (Haskero, Haskell Syntax Higlighting и т. д.)

  • Настройте расширения и установите дополнительные расширения

  • Поскольку вы уже установили Plutus, вы готовы к работе!

Plutus Playground: Plutus Playground — это онлайн-редактор на основе веб-технологий, специально предназначенный для смарт-контрактов Plutus. Поэтому нет необходимости в установке, и он идеально подходит для новичков, чтобы обрести уверенность в кодировании.

Вы можете зайти на сайт Plutus Playground и просто начать!

Обе среды можно эффективно использовать для разработки Plutus, и вы можете обнаружить, что их объединение — использование VS Code для крупных проектов и Plutus Playground для быстрого тестирования и создания прототипов — обеспечивает лучшее из обоих миров.

3. Установка необходимых библиотек

Используйте cabal для установки необходимых библиотек для разработки Plutus.

Понимание концепций блокчейна с помощью Plutus  

Блокчейн — это распределенная и продвинутая база данных, которая хранит записи транзакций в виде блоков. Каждый из блоков должен быть связан с другим с использованием криптографических принципов. Для защиты блоков используются надежные механизмы, благодаря которым невозможно изменить какие-либо записи валют раньше времени и не затронув последующие блоки.

Блокчейн состоит из трех основных компонентов:

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

  • Транзакции: Транзакция — это передача данных от одного субъекта к другому в блокчейне. В Plutus транзакции пишутся на Haskell и включают в себя входные и выходные UTXO (Unspent Transaction Outputs).

  • Цепочки: в Plutus цепочка поддерживает порядок транзакций и гарантирует их неизменность после подтверждения.

В следующем фрагменте кода мы можем увидеть структуру блока в Plutus:

Каждый компонент блока упоминается вместе с его типом данных.

  • Индекс — это целое число, которое указывает положение блока.

  • Временная метка — это время создания блока.

  • Транзакции — это строка или список всех транзакций, включенных в определенный блок.

  • Хэш — это уникальный шаблон и основной ключ для идентификации блока.

  • Предыдущий хэш относится к непрерывности и является хешем последнего блока.

В этом фрагменте кода мы можем увидеть структуру транзакций в Plutus:

Механизмы децентрализации, неизменности и консенсуса:

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

Децентрализация: Децентрализация — это свойство, при котором ни одна организация не контролирует базу данных Blockchain, что делает сбой системы и предвзятость практически невозможными. Каждое устройство-участник (узел) поддерживает копию блокчейна, обеспечивая прозрачность и препятствуя централизованному сбою или манипуляции.

Неизменяемость: После того, как данные записаны в блокчейн, их нельзя изменить, не изменив все последующие блоки. Это делается с помощью криптографического хеширования. Следовательно, все изменения, сделанные однажды, не могут быть отменены, что делает их неизменяемыми.

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

Создание простого блокчейна с помощью Plutus

Блок — это примитивная единица любого блокчейна. В этом фрагменте кода мы определили тип данных блока вместе с его компонентами.

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

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

Если вам понадобится помощь, обратитесь к коду ниже!

Реализация механизмов консенсуса в Plutus

Cardano использует механизм PoS, хотя изначально он принял Proof of Work. Plutus разработан для совместимости с протоколом Ouroboros PoS от Cardano, предлагая масштабируемость, энергоэффективность и безопасность для децентрализованных приложений (DApps).

Вот обзор алгоритмов консенсуса, которые могут работать с Plutus.

  • Ouroboros: Ouroboros — это механизм Proof of stake, с которым Plutus в высокой степени совместим, и он зависит от доли ADA, которую валидаторы готовы взять для проверки нового блока. Контракты Plutus беспрепятственно взаимодействуют с протоколом Ouroboros, гарантируя, что выполнение смарт-контрактов остается безопасным и энергоэффективным.

  • Proof of Work: PoW — самый древний механизм, широко используемый во всех старых криптовалютах. Его все еще можно реализовать на бумаге в случае Plutus. Это было бы более полезно при рассмотрении изолированных сценариев, таких как образовательные и экспериментальные цели.

  • Делегированное доказательство работы и устойчивость к византийским ошибкам: эти механизмы не совсем совместимы с Cardano, но теоретически могут быть реализованы на Plutus.

В этом разделе мы рассмотрим, как можно использовать Proof of Work в Plutus.

В Proof of Work майнерам нужно соревноваться по времени, чтобы решить криптографическую головоломку и стать валидаторами новой монеты. В этом коде функция Proof of Work ищет nonce, который в сочетании с хешем предыдущего блока создает хеш с определенным количеством начальных нулей. Это базовая реализация PoW, где уровень сложности определяет, насколько сложно найти действительный nonce.

После завершения внедрения Proof of Work вам необходимо обновить блокчейн, чтобы подтвердить добытое доказательство.

Вот пример фрагмента кода:

Эта функция гарантирует, что новый блок добавляется в блокчейн только в том случае, если его доказательство является действительным, что сохраняет целостность цепочки.

Создание простого API блокчейна с помощью Plutus

В этой главе вы узнаете, как создать простой API для взаимодействия с приложением блокчейна, созданным с использованием Plutus. Этот API позволит вам добавлять блоки и просматривать блокчейн через HTTP-запросы.

Шаги по созданию API:

  • Настройте среду для API: установите Haskel (что уже сделано), затем установите Servant с помощью Cabal

  • Загрузите все необходимые библиотеки:

    • Слуга: Для создания API

    • Aeson для кодирования и декодирования JSON: cabal install aeson plutus-core

    • Plutus для интеграции всего кода и логики

Чтобы начать с создания API, нам нужно сначала добавить новый блок и удалить текущее состояние блокчейна. Оба эти шага были выполнены в предыдущих главах.

Теперь вы можете перейти к определению конечных точек:

{-# LANGUAGE DataKinds #-}{-# LANGUAGE TypeOperators #-}module BlockchainAPI whereimport Servantimport Control.Monad.IO.Class (liftIO) — Определите тип блока (см. Главу 3)data Block = Block  { index        :: Int  , timestamp    :: String  , dataField    :: String  , previousHash :: String  , hash         :: String  } deriving (Show, Eq) — Блокчейн — это просто список блоковtype Blockchain = [Block] — Определите тип APItype BlockchainAPI = «addBlock» :> ReqBody ‘[JSON] Block :> Post ‘[JSON] Blockchain:<|> “chain” :> Get ‘[JSON] Blockchain— Заполнитель для блокчейна, изначально начинающийся только с блока генезисаgenesisBlock = Block 0 “2024-09-12 00:00:00” “Блок генезиса” “0” “some_hash”initialBlockchain:: BlockchaininitialBlockchain = [genesisBlock]–– Обработчики для конечных точек APIaddBlockHandler :: Blockchain -> Block -> Handler BlockchainaddBlockHandler blockchain newBlock = dolet newBlockchain = blockchain ++ [newBlock]    liftIO $ putStrLn “Блок добавлен!”    return newBlockchain — Обработчик для извлечения chainviewChainHandler :: Blockchain -> Handler BlockchainviewChainHandler blockchain = return blockchain–Основная точка входа для запуска APIapp :: Applicationapp = serve (Proxy :: Proxy BlockchainAPI) (blockchainServer initialBlockchain)

Объяснение приведенного выше кода:

  • Блок определяется аналогично предыдущим главам.

  • Библиотека Servant используется для определения структуры API. Существует два метода определения конечных точек API: GET и POST, что означает извлечение и добавление блокчейна соответственно.

  • Мы также определили обработчики (addBlockHandler) для обработки новых добавляемых блоков и viewChainHandler) для просмотра другого блока.

  • В конце находится основная функция, которая является сердцем кода, связывает все воедино и запускает сервер API.

После определения API у вас есть два метода для добавления конечных точек и получения информации о конечных точках блокчейна.

Ура!! Вы успешно реализовали этот подраздел, теперь вы можете работать с API с помощью cabal и готовы перейти к следующей части.

Запуск и тестирование приложения

После создания API блокчейна пришло время его протестировать. Мы будем использовать Postman или curl для взаимодействия с API и проверки его корректной работы.

Шаги по запуску и тестированию приложения:

  • Скомпилируйте программу и запустите ее: cabal build cabal run

  • Запустите сервер: API должен быть доступен по адресу http://localhost:8080.

  • Тестирование и добавление конечных точек блока

{  “index”: 1,  “timestamp”: “2024-09-12 12:30:00”,  “dataField”: “Это мой новый блок”,  “previousHash”: “some_hash”,  “hash”: “new_block_hash”}

Посмотреть блокчейн

curl http://localhost:8080/chain

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

Живой пример создания приложения на основе блокчейна с помощью Plutus

Приведенный выше фрагмент кода представляет собой пошаговое выполнение:

  • Шаг 1: Создайте тип данных Block с необходимыми атрибутами, используя синтаксис Plutus.

  • Шаг 2: Реализуйте метод calculate_hash.

  • Шаг 3: Определите тип данных Blockchain и инициализируйте его с помощью генезис-блока.

  • Шаг 4: Реализуйте методы для добавления новых блоков и извлечения последнего блока с помощью Plutus.

  • Шаг 5: Добавьте функционал Proof of Work к типу данных Block и обновите тип данных Blockchain.

  • Шаг 6: Настройте среду API для обработки запросов с использованием Plutus.

  • Шаг 7: Протестируйте приложение, создав новый блок и проверив блокчейн с помощью Postman или Curl.

Поздравляем! Вы дошли до конца модуля и изучили все основы Plutus.

Когда вы погружаетесь в разработку блокчейна с Plutus, вы не просто пишете код — вы создаете основу децентрализованных систем, которые могут переопределить отрасли. Продолжайте учиться и счастливого кодирования!!

Также ознакомьтесь с: Как спроектировать, разработать и внедрить собственную криптовалюту: пошаговое руководство