Дата-контракты - это мощный инструмент, который уже широко используется в сфере сервисов данных Web2 благодаря своим многочисленным преимуществам для пользователей и разработчиков. Они представляют собой относительно простые JSON-схемы, определяющие структуру данных, которые может хранить dapp.
В Web3 все уже знают о смарт-контрактах - революционной инновации Ethereum, которая популяризировала концепцию dapp. Однако мало кто знает о новом дополнении к смарт-контрактам созданном для Dash Platform, которое сделает разработку dapp более доступной для широких масс: дата-контракты.
Их использование в Dash Platform позволяет воспользоваться их традиционными преимуществами и одновременно дать Web2 разработчикам возможность хранить данные своих приложений на децентрализованной Web3 платформе без необходимости изучать язык смарт-контрактов, например Solidity, сделав это, просто используя уже знакомые им структуры.
Помимо повышения доступности и удобства работы с данными, дата-контракты позволяют реализовать целый ряд других полезных функций, таких как удобное индексирование, версионирование и интегрированная документация. В конечном счете они будут способствовать развитию разнообразной экосистемы dapps на базе Dash и широкому распространению криптовалют в целом.
Эта статья посвящена выходу dashpay.io - веб-приложения, с помощью которого пользователи могут автоматически генерировать дата-контракт на основе описания их предполагаемого dapp с использованием искусственного интеллекта.
Приложение
На высоком уровне дата-контракт 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 должна определять как минимум один тип документа, который может быть представлен в дата-контракте. Они требуют наличия трех полей: type
, properties
и 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.
Дополнительные сведения об архитектуре
Индексы
В дата-контракте, представленном ранее, определены три индекса: price
, quantity
и priceAndQuantity
. При передаче документа в дата-контракт полный сериализованный документ попадает в primary index
, который является поддеревом с ключом в дереве "nft", а ссылки на документ автоматически вставляются в три поддерева secondary index
. Это показано на диаграмме ниже, где сплошные линии представляют собой реальные отношения между родителями и потомками в дереве, а пунктирные линии указывают на узел, в котором хранится корневой хэш этого дерева.
Дерево документов контракта
В структуре GroveDB Dash Platform все дата-контракты и соответствующие им документы хранятся в дереве Contract Documents, которое является поддеревом корневого дерева. На диаграмме ниже показан путь от корневого дерева к дереву документов типа "nft", показанному на диаграмме выше.
Узнать больше о проекте Dash можно на сайте https://www.dash.org/ru/
KonstantinSerov
Похоже, статья - реклама
zapp Автор
Статья описывает новый тип децентрализованной платформы и помогает начать с ним работу тем, кто заинтересуется этой темой. Ничего делать, а тем более покупать - не предлагается :))