Смарт-контракты
Бизнес-логику работы платформы Vaultee обеспечивает набор смарт-контрактов опубликованных в блокчейн-сети Vaultee.
Исходный код смарт-контрактов опубликован по ссылке https://github.com/aggregion/agg-dmp-contracts
Работа со смарт-контрактами осуществляется посредством блокчейн-ноды, установленной в контуре клиента. Блокчейн нода содержит полную копию блокчейна и синхронизируется с другими нодами.
Задача blockchain в архитектуре системы - обеспечение безопасного обмена информацией и различного рода разрешениями между инстансами.
Взаимодействия внутри блокчейн-сети носят открытый характер, а авторизация осуществляется на основе цифровых подписей, поэтому защита канала не требуется. Взаимодействие осуществляется по HTTP, поэтому опционально между хостами возможно взаимодействие по HTTPS.
API, по которому ноды взаимодействуют между собой описано по ссылке
Изучить взаимодействие с остальными компонентами системы можно по ссылке, в разделе посвященному Blockchain.
Схема взаимодействия с блокчейном:
С помощью API ноды можно добавлять / изменять / удалять данные в блокчейн в рамках правил, заданных смарт-контрактом. Данные хранятся в смарт-контрактах в виде таблиц.
Описание таблиц смарт-контрактов
Далее описывается формат хранения и получения данных платформой из Блокчейн. Для каждой таблицы приведены табличное обозначение каждого поля и пример сообщения получаемого из Блокчейн платформой в формате json.
Таблица Glossaries (glossaries)
Таблица предназначена для хранения и распространения информации о глоссариях, добавленных в Каталог данных и синхронизированных между всеми инстансами участников обмена данных.
Формат получаемого из Блокчейн сообщения
{
"rows": [{
"id": "zdpycpt3owqm",
"info": {
"sender_org_id": "eqdqmn2uezvy",
"receiver_org_id": "",
"updated_at": "1640002849156",
"bc_version": 3639,
"data": "{\"_id\":\"61923e28785ed80b70c35f10\",
\"isEnabled\":false,
\"bcVersion\":3638,
\"globalId\":\"zdpycpt3owqm\",
\"__v\":0,
\"createdAt\":\"2021-11-15T11:02:00.061Z\",
\"name\":\"Количество звонков в колл центр за первый месяц\",
\"owner\":\"eqdqmn2uezvy\",
\"qualifiedName\":\"Количество звонков в колл центр за первый месяц@Main glossary\",
\"updatedAt\":\"2021-12-16T11:25:53.939Z\",
\"schemaVersion\":1}"
}
}
],
"more": true,
"next_key": "17173184990877455504"
}
Описание полей таблицы
Поле | Пример заполнения | Пояснение |
---|---|---|
rows.$.id | zdpycpt3owqm | Уникальное id записи |
rows.$.info.sender_org_id | eqdqmn2uezvy | Уникальное id отправителя |
rows.$.info.receiver_org_id | Уникальное id получателя | |
rows.$.info.updated_at | 1640002849156 | Дата обновления записи в инстансе партнера |
rows.$.info.bc_version | 3639 | Номер версии записи |
rows.$.info.data._id | 61923e28785ed80b70c35f10 | Уникальный id термина в MongoDB отправителя |
rows.$.info.data.isEnabled | false | Показатель доступности глоссария |
rows.$.info.data.bcVersion | 3638 | Номер версии записи |
rows.$.info.data.globalId | zdpycpt3owqm | Глобальный id госсария |
rows.$.info.data.createdAt | 2021-11-15T11:02:00.061Z | Дата создания записи |
rows.$.info.data.name | Количество звонков в колл центр за первый месяц | Наименование глоссария |
rows.$.info.data.owner | eqdqmn2uezvy | id компании владельца глоссария |
rows.$.info.data.qualifiedName | Количество звонков в колл центр за первый месяц@Main glossary | Уникальное наименование глоссария из инстанса владельца |
rows.$.info.data.updatedAt | 2021-12-16T11:25:53.939Z | Время обновления записи на инстансе владельца |
rows.$.info.data.schemaVersion | 1 | Версия схемы данных |
more | true | Служебный признак API используемый для пагинации |
next_key | 17173184990877455504 | Служебный признак API используемый для пагинации |
Таблица GlossaryTerms (glterms)
Таблица предназначена для хранения и распространения информации о бизнес-терминах, добавленных в Каталог данных и синхронизированных между всеми инстансами участников обмена данных.
Формат получаемого из Блокчейн сообщения
{
"rows": [{
"id": "zkbawqjl3pkg",
"info": {
"sender_org_id": "4rgesy423omv",
"receiver_org_id": "",
"updated_at": "1645460505124",
"bc_version": 2,
"data": "{\"_id\":\"620e3c658c68bd050975d4e6\",\"isEnabled\":false,
\"bcVersion\":1,\"children\":[],\"parents\":[\"agspoqrk4a15\"],
\"synonyms\":[\"agspoqrk4a15\"],\"globalId\":\"zkbawqjl3pkg\",
\"name\":\"БТ стейдж2 run2 11\",\"glossaryGlobalId\":\"4uvd5zh5ovh3\",
\"termType\":\"AtlasGlossaryTerm\",\"owner\":\"4rgesy423omv\",\"published\":true,
\"longDescription\":\"Описание Термина 11\",\"attributeType\":\"static_attribute\",
\"status\":\"blocked\",\"visibilityArea\":\"group_internal\",\"confidentiality\":\"unclassified\",
\"nameEn\":\"bt st2 run2 en 11\",\"subjectArea\":\"run2 Предметная ОБЛАСТЬ 3\",
\"qualifiedName\":\"БТ стейдж2 run2 11@regress\",\"schemaVersion\":1,
\"__v\":0,\"updatedAt\":\"2022-02-17T12:15:33.531Z\",
\"createdAt\":\"2022-02-17T12:15:33.531Z\"}"
}
}
],
"more": true,
"next_key": "18044767394901470496"
}
Описание полей таблицы
Поле | Пример заполнения | Пояснение |
---|---|---|
rows.$.id | zkbawqjl3pkg | Уникальное id записи |
rows.$.info.sender_org_id | 4rgesy423omv | Уникальное id отправителя |
rows.$.info.receiver_org_id | Уникальное id получателя | |
rows.$.info.updated_at | 1645460505124 | Дата обновления записи в инстансе партнера |
rows.$.info.bc_version | 2 | Номер версии записи |
rows.$.info.data._id | 620e3c658c68bd050975d4e6 | Уникальный id термина в MongoDB отправителя |
rows.$.info.data.isEnabled | false | Показатель доступности термина |
rows.$.info.data.bcVersion | 1 | Номер версии записи |
rows.$.info.data.children | Массив дочерних терминов | |
rows.$.info.data.parents.0 | agspoqrk4a15 | Массив родительских терминов |
rows.$.info.data.synonyms.0 | agspoqrk4a15 | Массив синонимов |
rows.$.info.data.globalId | zkbawqjl3pkg | Глобальный id термина |
rows.$.info.data.name | БТ стейдж2 run2 11 | Наименование термина |
rows.$.info.data.glossaryGlobalId | 4uvd5zh5ovh3 | Глобальный id глоссария к которому относится термин |
rows.$.info.data.termType | AtlasGlossaryTerm | Тип сущности |
rows.$.info.data.owner | 4rgesy423omv | Уникальный id компании владельца термина |
rows.$.info.data.published | true | Признак опубликованности |
rows.$.info.data.longDescription | Описание Термина 11 | Описание термина |
rows.$.info.data.attributeType | static_attribute | Тип термина |
rows.$.info.data.status | blocked | Статус термина |
rows.$.info.data.visibilityArea | group_internal | Область доступности термина |
rows.$.info.data.confidentiality | unclassified | Конфиденциальность термина |
rows.$.info.data.nameEn | bt st2 run2 en 11 | Английское наименование термина |
rows.$.info.data.subjectArea | run2 Предметная ОБЛАСТЬ 3 | Предметная область термина |
rows.$.info.data.qualifiedName | БТ стейдж2 run2 11@regress | Уникальное наименование термина в инстансе Каталога данных владельца термина |
rows.$.info.data.schemaVersion | 1 | Версия схемы сущности термин |
rows.$.info.data.updatedAt | 2022-02-17T12:15:33.531Z | Дата обновления сущности термин |
rows.$.info.data.createdAt | 2022-02-17T12:15:33.531Z | Дата создания сущности термин |
more | true | Служебный признак API используемый для пагинации |
next_key | 18044767394901470496 | Служебный признак API используемый для пагинации |
Таблица Datasets (datasets)
Публичное описание позиций маркетплейса (датасетов).
Формат получаемого из Блокчейн сообщения
{
"rows": [{
"id": "yyuhmjv1ebha",
"info": {
"sender_org_id": "buce5vewgzev",
"receiver_org_id": "",
"updated_at": "1632681238581",
"bc_version": 5,
"data": "{\"instanceAtlasId\":\"e7596b92-9d5a-473b-b1cd-34c2b8737492\",
\"datasetAtlasId\":\"734e4476-9c6d-4e7f-9ccf-1ae9586c5413\",\"bcVersion\":4,
\"database\":{\"description\":\"\",\"atlasId\":\"7c2f8f1c-a495-4440-8fed-4c788fab095d\",
\"isEnabled\":true,\"isPrivate\":true,\"name\":\"PNG\",\"contactInfo\":\"\"},
\"table\":{\"size\":0,\"description\":\"Без описания\",
\"atlasId\":\"734e4476-9c6d-4e7f-9ccf-1ae9586c5413\",\"isEnabled\":true,
\"isPrivate\":true,\"name\":\"usersSha256\",\"comment\":\"\",
\"contactInfo\":\"\",\"owner\":\"buce5vewgzev\",\"updateFrequency\":\"\"},
\"fields\":[{\"description\":\"256\",\"atlasId\":\"e7c12aa7-b9f1-4b3f-9988-a28cd208a1fe\",
\"isEnabled\":true,\"name\":\"usersSha256\",\"dataType\":\"STRING\",
\"defaultValue\":\"\",\"isNullable\":true,\"isPrimaryKey\":false}]}"
}
}
],
"more": true,
"next_key": "16782086369367744944"
}
Описание полей таблицы
Поле | Пример заполнения | Пояснение |
---|---|---|
rows.$.id | yyuhmjv1ebha | Уникальное id записи |
rows.$.info.sender_org_id | buce5vewgzev | Уникальное id отправителя |
rows.$.info.receiver_org_id | Уникальное id получателя | |
rows.$.info.updated_at | 1632681238581 | Дата обновления записи в инстансе партнера |
rows.$.info.bc_version | 5 | Номер версии записи |
rows.$.info.data.instanceAtlasId | e7596b92-9d5a-473b-b1cd-34c2b8737492 | Id инстанса таблицы датасета в Каталоге данных владельца |
rows.$.info.data.datasetAtlasId | 734e4476-9c6d-4e7f-9ccf-1ae9586c5413 | id датасета в Каталоге данных владельца |
rows.$.info.data.bcVersion | 4 | Номер версии записи |
rows.$.info.data.database.description | Описание базы данных | |
rows.$.info.data.database.atlasId | 7c2f8f1c-a495-4440-8fed-4c788fab095d | id базы данных в Каталоге данных владельца |
rows.$.info.data.database.isEnabled | true | Признак активности датасета |
rows.$.info.data.database.isPrivate | true | Признак приватности базы данных |
rows.$.info.data.database.name | PNG | Имя базы данных |
rows.$.info.data.database.contactInfo | Контакная информация владельца | |
rows.$.info.data.table.size | 0 | Количество строк в таблице с которой ассоциирован датасет |
rows.$.info.data.table.description | Без описания | Описание датасета |
rows.$.info.data.table.atlasId | 734e4476-9c6d-4e7f-9ccf-1ae9586c5413 | id таблицы в Каталоге данных владельца |
rows.$.info.data.table.isEnabled | true | Признак активности таблицы |
rows.$.info.data.table.isPrivate | true | Признак приватности таблицы |
rows.$.info.data.table.name | usersSha256 | Наименование таблицы датасета |
rows.$.info.data.table.comment | Комментарий к таблице | |
rows.$.info.data.table.contactInfo | Контактная информация владельца таблицы | |
rows.$.info.data.table.owner | buce5vewgzev | Id инстанса владельца датасета |
rows.$.info.data.table.updateFrequency | Частота обновления таблицы | |
rows.$.info.data.fields.$.description | 256 | Описание поля таблицы |
rows.$.info.data.fields.$.atlasId | e7c12aa7-b9f1-4b3f-9988-a28cd208a1fe | Id поля таблицы в Каталоге данных владельца |
rows.$.info.data.fields.$.isEnabled | true | Признак активности поля таблицы |
rows.$.info.data.fields.$.name | usersSha256 | Наименование поля таблицы |
rows.$.info.data.fields.$.dataType | STRING | Тип даных поля таблицы |
rows.$.info.data.fields.$.defaultValue | Дефолтное значение поля таблицы | |
rows.$.info.data.fields.$.isNullable | true | Признак может ли быть поле пустым |
rows.$.info.data.fields.$.isPrimaryKey | false | Признак является ли поле ключом |
more | true | Служебный признак API используемый для пагинации |
next_key | 16782086369367744944 | Служебный признак API используемый для пагинации |
Таблица Interactions (interactions)
Данные в таблице описывают разрешения на взаимодействие между инстансами участников обмена данными.
Формат получаемого из Блокчейн сообщения
{
"rows": [{
"id": 52,
"owner": "ezuvbnc5p2ol",
"enabled": 1,
"info": {
"partner": "23hatqocqlnd",
"interaction_type": 1,
"params": ""
}
}
],
"more": true,
"next_key": "51"
}
Описание полей таблицы
Поле | Пример заполнения | Пояснение |
---|---|---|
rows.$.id | 52 | Id записи в Блокчейн |
rows.$.owner | ezuvbnc5p2ol | Инстанс который опубликовал запись |
rows.$.enabled | 1 | Признак активности записи |
rows.$.info.partner | 23hatqocqlnd | Информация о том с каким партнером взаимодействовать |
rows.$.info.interaction_type | 1 | Тип взаимодействия с партнером |
rows.$.info.params | Параметры взаимодействия с партнером | |
more | true | Служебный признак API используемый для пагинации |
next_key | 51 | Служебный признак API используемый для пагинации |
Таблица Orgsv2 (orgsv2)
Таблица зарегистрированных в системе организаций.
Формат получаемого из Блокчейн сообщения
{
"rows": [{
"id": "ztnzaspsmubw",
"data": "",
"public_key": "-----BEGIN RSA PUBLIC KEY-----.....",
"updated_at": "1630783836732",
"bc_version": 0
}
],
"more": true,
"next_key": "17611430297936338112"
}
Описание полей таблицы
Поле | Пример заполнения | Пояснение |
---|---|---|
rows.$.id | ztnzaspsmubw | Уникальное id записи |
rows.$.data | Дополнительные данные, пустое для этого типа записи | |
rows.$.public_key | -----BEGIN RSA PUBLIC KEY-----..... | Публичный ключ инстанса поставщика данных |
rows.$.updated_at | 1630783836732 | Дата добавления записи в блокчейн |
rows.$.bc_version | 0 | Версия записи в Блокчейн |
more | true | Служебный признак API используемый для пагинации |
next_key | 17611430297936338112 | Служебный признак API используемый для пагинации |
Таблица Messages (msgs)
Таблица для обмена зашифрованными сообщениями между компаниями.
Все таргетированные сообщения (с получателем) с зашифрованным телом. Шифрование тела сообщения осуществляется алгоритмом указанным в теле сообщения (сейчас используется только rsa4096+aes256cbc
) с использованием случайно сгенерированного мастер-ключа. Сам мастер-ключ так же есть в сообщении и он зашифрован ассиметричным алгоритмом с использованием публичного ключа, опубликованного в таблице orgsv2 от имени организации (инстанса) для которого предназначено это сообщение.
Все сообщения, которые не имеют получателя, являются широковещательными и не шифруются. В таблице могут содержаться 6 типов сообщений:
Тип сообщения | ID | Шифрование | Описание |
---|---|---|---|
Project | 1 | Да | Описывает состояние проекта |
Dataset | 2 | Нет | Описывает состояние датасета |
DatasetRequest | 3 | Да | Описывает запрос на использование данных |
DataLabScript | 4 | Да | Описывает запрос на согласование исполнения скрипта |
Glossary | 5 | Нет | Описывает глоссарии |
GlossaryTerm | 6 | Нет | Описывает Бизнес термины |
Logs | 7 | Да | Описывает Лог сообщения запросов на данные |
Формат получаемого из Блокчейн сообщений
{
"id": 613616,
"message": {
"topic": 1,
"sender": "dajwbgctmzxr",
"receiver": "dajwbgctmzxr",
"data": "{
"encryption": "rsa4096+aes256cbc",
"message": "NoASOSOz/.....",
"masterKey": "Cmro6O2li...."
}"
}
}
Описание полей таблицы
Поле | Пример заполнения | Пояснение |
---|---|---|
id | 613616 | id записи |
message.topic | 1 | Тип сообщения (см. таблицу типов) |
message.sender | dajwbgctmzxr | Отправитель сообщения |
message.receiver | dajwbgctmzxr | Получатель сообщения |
message.data.encryption | rsa4096+aes256cbc | Тип шифрования |
message.data.message | NoASOSOz/BXz..... | Зашифрованное сообщение с указателем на измененную сущность |
message.data.masterKey | Cmro6O2libiM..... | Случайный симметричный ключ шифрования сообщения, дополнительно зашифрованный публичным ключом получателя |