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

В Web3 все уже знают о смарт-контрактах - революционной инновации Ethereum, которая популяризировала концепцию dapp. Однако мало кто знает о новом дополнении к смарт-контрактам созданном для Dash Platform, которое сделает разработку dapp более доступной для широких масс: дата-контракты.

Их использование в Dash Platform позволяет воспользоваться их традиционными преимуществами и одновременно дать Web2 разработчикам возможность хранить данные своих приложений на децентрализованной Web3 платформе без необходимости изучать язык смарт-контрактов, например Solidity, сделав это, просто используя уже знакомые им структуры.

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

Эта статья посвящена выходу dashpay.io - веб-приложения, с помощью которого пользователи могут автоматически генерировать дата-контракт на основе описания их предполагаемого dapp с использованием искусственного интеллекта.

dashpay.io
dashpay.io

Приложение

На высоком уровне дата-контракт Dash Platform представляет собой схему JSON, определяющую структуру данных, которые будут храниться в dapp.

  • В ней определены допустимые свойства, например "город", "рейтинг" или "кухня", для dapp ресторана.

  • Логика проверки, например "maxLength" для строкового свойства

  • Индексы, создаваемые для свойств

Разработчики должны отправить свои дата-контракты в Dash Platform для проверки на системном уровне, прежде чем пользователи их дата-контрактов смогут отправить документы в дата-контракты для проверки на уровне дата-контракта.

Это гарантирует, что данные, созданные на основе контрактов данных, будут хорошо сочетаться с остальными элементами системы, а разработчики получают контроль над структурой и типами данных, которые могут быть представлены в их дата-контрактах. Таким образом, дата-контракты полезны не только для перехода от Web2 к Web3, но и по ряду других причин:

  • Простота | Все дата-контракты в Dash Platform подчиняются одним и тем же общим принципам и в создаются одном формате, а также очень просты для понимания по сравнению со смарт-контрактами. После получения начального представление о них, взаимодействие с dapp другого разработчика или создание нового дата-контракта, будет интуитивным.

  • Документация | Дата-контракты служат формой документации для dapp. Пользователи могут иметь возможность просмотреть схему контракта и получить базовое представление о том, что и как делает данная программа.

  • Индексирование | Дата-контракты позволяют разработчикам легко индексировать свойства, просто указав их в схеме, в то время как в современных языках смарт-контрактов этот процесс гораздо сложнее и обычно требует создания нескольких структур данных. Данная функциональность стала возможной благодаря GroveDB.

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

  • Интероперабельность | Дата-контракты позволяют проводить валидации, обеспечивающие беспрепятственное взаимодействие между пользовательскими данными, dapp-ами и платформой, что в конечном итоге приводит к повышению качества работы. Кроме того, стандартизируя способ хранения данных в Dash Platform, другие платформы могут легко добиться совместимости в будущем, приняв тот же формат.

  • Версионность | Дата-контракты содержат информацию о версиях, что позволяет обновлять их по мере изменения потребностей dapp, сохраняя при этом обратную совместимость.

Хотя смарт-контракты, являются приоритетным направлением после запуска Dash Platform RC 1, они будут взаимодействовать с дата-контрактами, что позволит расширить спектр возможностей dapp на Dash Platform, ведь также существует много возможностей для использования только дата-контрактов.

Разработчик Dash Incubator - Pshenmic привел несколько примеров, которые лично ему очень нравятся:

  • Персистентность данных Web3 | Если приложение не нуждается в тяжелых операциях чтения/записи, оно может использовать даты-контракты Dash Platform в качестве постоянного хранилища с доказательствами и индексацией. Пользователи могут хранить учетные записи пользователей, настройки или любые другие данные с использованием преимуществ децентрализованной платформы Web3. Dash Platform также предоставляет возможность использования неизменяемого хранилища для тех, кто хочет, кому необходимо хранить фиксированные данные.

  • Чат-комнаты | Пользователи могут размещать, редактировать или удалять сообщения как документы на дата-контракте чата. И в рамках testnet уж существует приложение, которое делает это: Dashshoutout.com

  • Заявки на заказы | Пользователи могут отправить в дата-контракт ресторана документ с желаемыми блюдами. Бэкэнд ресторана сможет принять его и обработать заказ.

  • Репозиторий подписей | Пользователи могут загрузить свои открытые ключи в дата-контракт, и контрагент сможет получить их, не прибегая к централизованному хранению. Например, рассмотрим открытые ключи SSH. Удаленные серверы смогут легко предоставить доступ любому пользователю, используя имя пользователя Identity или DPNS, загруженное в их (или другие) дата-контракты.

  • Оракулы | Растет спрос на криптовалютные платежи для магазинов и других продавцов. Как владелец сайта, вы не хотите заниматься разработкой процессинга платежей, а вместо этого просто делегируете его централизованным API, таким как Coingate. В Dash Platform пользователи могут загрузить в дата-контракт адреса, которые они хотели бы прослушивать (в данном случае адреса клиентов), а бэкенд оракул подхватит их и начнет прослушивать. По мере поступления платежей бэкэнд оракул сможет публиковать данные о транзакциях в платформе. Поскольку все данные публикуются в блокчейне, все является 100% верифицируемым.

Если вам интересно узнать больше о возможных применениях дата-контрактов на платформе Dash, ознакомьтесь со статьей 2021 года - Разработка dApps на блокчейне Dash

Архитектура

Как уже говорилось выше, дата-контракт Dash Platform представляет собой JSON-схему, определяющую структуру данных, которые может хранить dapp. Она определяет допустимые свойства, логику проверки и индексы, создаваемые по этим свойствам.

JSON-схема дата-контракта Dash Platform должна определять как минимум один тип документа, который может быть представлен в дата-контракте. Они требуют наличия трех полей: typeproperties и additionalProperties, а также поддерживают два необязательных поля: indices и required.

Дата-контракт с одним типом документа, nft, в котором используются все пять полей, может выглядеть, например, так:

#JSON
{
"nft": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Name of the NFT token",
"maxLength": 63
},
"description": {
"type": "string",
"description": "Description of the NFT token",
"maxLength": 256
},
"imageUrl": {
"type": "string",
"description": "URL of the image associated with the NFT token",
"maxLength": 2048,
"format": "uri"
},
"imageHash": {
"type": "array",
"description": "SHA256 hash of the bytes of the image specified by tokenImageUrl",
"byteArray": true,
"minItems": 32,
"maxItems": 32
},
"imageFingerprint": {
"type": "array",
"description": "dHash the image specified by tokenImageUrl",
"byteArray": true,
"minItems": 8,
"maxItems": 8
},
"price": {
"type": "number",
"description": "Price of the NFT token in Dash",
"minimum": 0
},
"quantity": {
"type": "integer",
"description": "Number of tokens in circulation",
"minimum": 0
},
"metadata": {
"type": "array",
"description": "Any additional metadata associated with the NFT token",
"byteArray": true,
"minItems": 0,
"maxItems": 2048
}
},
"indices": [
{
"name": "price",
"properties": [
{
"price": "asc"
}
]
},
{
"name": "quantity",
"properties": [
{
"quantity": "asc"
}
]
},
{
"name": "priceAndQuantity",
"properties": [
{
"price": "asc"
},
{
"quantity": "asc"
}
]
}
],
"required": [
"name",
"price",
"quantity"
],
"additionalProperties": false
}
}

Типы документов в Dash Platform являются JSON-объектами и поэтому должны иметь "type":"object" и набор свойств, содержащий по крайней мере одно свойство, и "additionalProperties":false.

Опционально они могут также включать списки indices и required свойств. Приведем пример корректного nft-документа (немного упрощенного), который может быть представлен в вышеуказанном дата-контракте:

#JSON
{
"name": "Dash Cat 001",
"description": "The original Dash Cat. Meow.",
"imageUrl": "https://ipfs.io/ipfs/Qme7ss3ARVgxv6rXqVPiikL…",
"imageHash": [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, …],
"price": 50,
"quantity": 1
}

В данном документе присутствуют все свойства, перечисленные в required поле дата-контракта. additionalProperties (свойства, которые не определены в наборе properties контракта) отсутствуют, а значение каждого свойства соответствует правилам проверки этого свойства (например, длина imageUrl соответствует установленному значению maxLength, равному 2048, и имеет формат URI). Ссылки на этот документ автоматически сохраняются в соответствующих индексах, определенных в indices, а сам документ сериализуется и хранится в первичном индексе контракта.

Системные свойства

Помимо пользовательских свойств, таких как name и price, существует ряд дополнительных системных свойств, которые дата-контракты могут включать в indices. Это $ownerId, $createdAt и $updatedAt. $createdAt и $updatedAt также могут быть включены в список required свойств, поскольку они необязательны при отправке документа на системном уровне, но $ownerId требуется всегда, поэтому его нельзя включать в список required свойств, определяемых пользователем.

В качестве примера можно привести дата-контракты DPNS и Dashpay, в которых используется более одного типа документов.

Также может быть полезно ознакомиться с документацией по дата-контрактам для получения дополнительной информации, и, как всегда, сообщество, готово ответить на вопросы и предложения в Dash Discord.

Наконец, не забудьте заглянуть на dashpay.io (репозиторий на GitHub), где вы можете использовать искусственный интеллект для автоматической генерации дата-контракта на основе описания вашего планируемого dapp, использовать динамическую форму для его доработки и сэкономить время и деньги, проверяя дата-контракт перед отправкой его на Dash Platform.

Дополнительные сведения об архитектуре

Индексы

В дата-контракте, представленном ранее, определены три индекса: pricequantity и priceAndQuantity. При передаче документа в дата-контракт полный сериализованный документ попадает в primary index, который является поддеревом с ключом в дереве "nft", а ссылки на документ автоматически вставляются в три поддерева secondary index. Это показано на диаграмме ниже, где сплошные линии представляют собой реальные отношения между родителями и потомками в дереве, а пунктирные линии указывают на узел, в котором хранится корневой хэш этого дерева.

Структура дерева типов документов в Dash Platform
Структура дерева типов документов в Dash Platform

Дерево документов контракта

В структуре GroveDB Dash Platform все дата-контракты и соответствующие им документы хранятся в дереве Contract Documents, которое является поддеревом корневого дерева. На диаграмме ниже показан путь от корневого дерева к дереву документов типа "nft", показанному на диаграмме выше.

Путь от корневого дерева Dash Platform к дереву типов документа "nft" из графики выше
Путь от корневого дерева Dash Platform к дереву типов документа "nft" из графики выше

Узнать больше о проекте Dash можно на сайте https://www.dash.org/ru/

Комментарии (2)


  1. KonstantinSerov
    14.08.2023 11:42

    Похоже, статья - реклама


    1. zapp Автор
      14.08.2023 11:42

      Статья описывает новый тип децентрализованной платформы и помогает начать с ним работу тем, кто заинтересуется этой темой. Ничего делать, а тем более покупать - не предлагается :))