Перейти к основному содержимому
Версия: Next

Смарт-контракты

Бизнес-логику работы платформы Vaultee обеспечивает набор смарт-контрактов опубликованных в блокчейн-сети Vaultee.

Исходный код смарт-контрактов опубликован по ссылке https://github.com/aggregion/agg-dmp-contracts

Работа со смарт-контрактами осуществляется посредством блокчейн-ноды, установленной в контуре клиента. Блокчейн нода содержит полную копию блокчейна и синхронизируется с другими нодами.

Задача blockchain в архитектуре системы - обеспечение безопасного обмена информацией и различного рода разрешениями между инстансами.

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

API, по которому ноды взаимодействуют между собой описано по ссылке

Изучить взаимодействие с остальными компонентами системы можно по ссылке, в разделе посвященному Blockchain.

Схема взаимодействия с блокчейном: Untitled

С помощью 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.$.idzdpycpt3owqmУникальное id записи
rows.$.info.sender_org_ideqdqmn2uezvyУникальное id отправителя
rows.$.info.receiver_org_idУникальное id получателя
rows.$.info.updated_at1640002849156Дата обновления записи в инстансе партнера
rows.$.info.bc_version3639Номер версии записи
rows.$.info.data._id61923e28785ed80b70c35f10Уникальный id термина в MongoDB отправителя
rows.$.info.data.isEnabledfalseПоказатель доступности глоссария
rows.$.info.data.bcVersion3638Номер версии записи
rows.$.info.data.globalIdzdpycpt3owqmГлобальный id госсария
rows.$.info.data.createdAt2021-11-15T11:02:00.061ZДата создания записи
rows.$.info.data.nameКоличество звонков в колл центр за первый месяцНаименование глоссария
rows.$.info.data.ownereqdqmn2uezvyid компании владельца глоссария
rows.$.info.data.qualifiedNameКоличество звонков в колл центр за первый месяц@Main glossaryУникальное наименование глоссария из инстанса владельца
rows.$.info.data.updatedAt2021-12-16T11:25:53.939ZВремя обновления записи на инстансе владельца
rows.$.info.data.schemaVersion1Версия схемы данных
moretrueСлужебный признак API используемый для пагинации
next_key17173184990877455504Служебный признак 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.$.idzkbawqjl3pkgУникальное id записи
rows.$.info.sender_org_id4rgesy423omvУникальное id отправителя
rows.$.info.receiver_org_idУникальное id получателя
rows.$.info.updated_at1645460505124Дата обновления записи в инстансе партнера
rows.$.info.bc_version2Номер версии записи
rows.$.info.data._id620e3c658c68bd050975d4e6Уникальный id термина в MongoDB отправителя
rows.$.info.data.isEnabledfalseПоказатель доступности термина
rows.$.info.data.bcVersion1Номер версии записи
rows.$.info.data.childrenМассив дочерних терминов
rows.$.info.data.parents.0agspoqrk4a15Массив родительских терминов
rows.$.info.data.synonyms.0agspoqrk4a15Массив синонимов
rows.$.info.data.globalIdzkbawqjl3pkgГлобальный id термина
rows.$.info.data.nameБТ стейдж2 run2 11Наименование термина
rows.$.info.data.glossaryGlobalId4uvd5zh5ovh3Глобальный id глоссария к которому относится термин
rows.$.info.data.termTypeAtlasGlossaryTermТип сущности
rows.$.info.data.owner4rgesy423omvУникальный id компании владельца термина
rows.$.info.data.publishedtrueПризнак опубликованности
rows.$.info.data.longDescriptionОписание Термина 11Описание термина
rows.$.info.data.attributeTypestatic_attributeТип термина
rows.$.info.data.statusblockedСтатус термина
rows.$.info.data.visibilityAreagroup_internalОбласть доступности термина
rows.$.info.data.confidentialityunclassifiedКонфиденциальность термина
rows.$.info.data.nameEnbt st2 run2 en 11Английское наименование термина
rows.$.info.data.subjectArearun2 Предметная ОБЛАСТЬ 3Предметная область термина
rows.$.info.data.qualifiedNameБТ стейдж2 run2 11@regressУникальное наименование термина в инстансе Каталога данных владельца термина
rows.$.info.data.schemaVersion1Версия схемы сущности термин
rows.$.info.data.updatedAt2022-02-17T12:15:33.531ZДата обновления сущности термин
rows.$.info.data.createdAt2022-02-17T12:15:33.531ZДата создания сущности термин
moretrueСлужебный признак API используемый для пагинации
next_key18044767394901470496Служебный признак 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.$.idyyuhmjv1ebhaУникальное id записи
rows.$.info.sender_org_idbuce5vewgzevУникальное id отправителя
rows.$.info.receiver_org_idУникальное id получателя
rows.$.info.updated_at1632681238581Дата обновления записи в инстансе партнера
rows.$.info.bc_version5Номер версии записи
rows.$.info.data.instanceAtlasIde7596b92-9d5a-473b-b1cd-34c2b8737492Id инстанса таблицы датасета в Каталоге данных владельца
rows.$.info.data.datasetAtlasId734e4476-9c6d-4e7f-9ccf-1ae9586c5413id датасета в Каталоге данных владельца
rows.$.info.data.bcVersion4Номер версии записи
rows.$.info.data.database.descriptionОписание базы данных
rows.$.info.data.database.atlasId7c2f8f1c-a495-4440-8fed-4c788fab095did базы данных в Каталоге данных владельца
rows.$.info.data.database.isEnabledtrueПризнак активности датасета
rows.$.info.data.database.isPrivatetrueПризнак приватности базы данных
rows.$.info.data.database.namePNGИмя базы данных
rows.$.info.data.database.contactInfoКонтакная информация владельца
rows.$.info.data.table.size0Количество строк в таблице с которой ассоциирован датасет
rows.$.info.data.table.descriptionБез описанияОписание датасета
rows.$.info.data.table.atlasId734e4476-9c6d-4e7f-9ccf-1ae9586c5413id таблицы в Каталоге данных владельца
rows.$.info.data.table.isEnabledtrueПризнак активности таблицы
rows.$.info.data.table.isPrivatetrueПризнак приватности таблицы
rows.$.info.data.table.nameusersSha256Наименование таблицы датасета
rows.$.info.data.table.commentКомментарий к таблице
rows.$.info.data.table.contactInfoКонтактная информация владельца таблицы
rows.$.info.data.table.ownerbuce5vewgzevId инстанса владельца датасета
rows.$.info.data.table.updateFrequencyЧастота обновления таблицы
rows.$.info.data.fields.$.description256Описание поля таблицы
rows.$.info.data.fields.$.atlasIde7c12aa7-b9f1-4b3f-9988-a28cd208a1feId поля таблицы в Каталоге данных владельца
rows.$.info.data.fields.$.isEnabledtrueПризнак активности поля таблицы
rows.$.info.data.fields.$.nameusersSha256Наименование поля таблицы
rows.$.info.data.fields.$.dataTypeSTRINGТип даных поля таблицы
rows.$.info.data.fields.$.defaultValueДефолтное значение поля таблицы
rows.$.info.data.fields.$.isNullabletrueПризнак может ли быть поле пустым
rows.$.info.data.fields.$.isPrimaryKeyfalseПризнак является ли поле ключом
moretrueСлужебный признак API используемый для пагинации
next_key16782086369367744944Служебный признак API используемый для пагинации

Таблица Interactions (interactions)

Данные в таблице описывают разрешения на взаимодействие между инстансами участников обмена данными.

Формат получаемого из Блокчейн сообщения

{
"rows": [{
"id": 52,
"owner": "ezuvbnc5p2ol",
"enabled": 1,
"info": {
"partner": "23hatqocqlnd",
"interaction_type": 1,
"params": ""
}
}
],
"more": true,
"next_key": "51"
}

Описание полей таблицы

ПолеПример заполненияПояснение
rows.$.id52Id записи в Блокчейн
rows.$.ownerezuvbnc5p2olИнстанс который опубликовал запись
rows.$.enabled1Признак активности записи
rows.$.info.partner23hatqocqlndИнформация о том с каким партнером взаимодействовать
rows.$.info.interaction_type1Тип взаимодействия с партнером
rows.$.info.paramsПараметры взаимодействия с партнером
moretrueСлужебный признак API используемый для пагинации
next_key51Служебный признак 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.$.idztnzaspsmubwУникальное id записи
rows.$.dataДополнительные данные, пустое для этого типа записи
rows.$.public_key-----BEGIN RSA PUBLIC KEY-----.....Публичный ключ инстанса поставщика данных
rows.$.updated_at1630783836732Дата добавления записи в блокчейн
rows.$.bc_version0Версия записи в Блокчейн
moretrueСлужебный признак API используемый для пагинации
next_key17611430297936338112Служебный признак API используемый для пагинации

Таблица Messages (msgs)

Таблица для обмена зашифрованными сообщениями между компаниями. Все таргетированные сообщения (с получателем) с зашифрованным телом. Шифрование тела сообщения осуществляется алгоритмом указанным в теле сообщения (сейчас используется только rsa4096+aes256cbc) с использованием случайно сгенерированного мастер-ключа. Сам мастер-ключ так же есть в сообщении и он зашифрован ассиметричным алгоритмом с использованием публичного ключа, опубликованного в таблице orgsv2 от имени организации (инстанса) для которого предназначено это сообщение.

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

Тип сообщенияIDШифрованиеОписание
Project1ДаОписывает состояние проекта
Dataset2НетОписывает состояние датасета
DatasetRequest3ДаОписывает запрос на использование данных
DataLabScript4ДаОписывает запрос на согласование исполнения скрипта
Glossary5НетОписывает глоссарии
GlossaryTerm6НетОписывает Бизнес термины
Logs7ДаОписывает Лог сообщения запросов на данные

Формат получаемого из Блокчейн сообщений

{
"id": 613616,
"message": {
"topic": 1,
"sender": "dajwbgctmzxr",
"receiver": "dajwbgctmzxr",
"data": "{
"encryption": "rsa4096+aes256cbc",
"message": "NoASOSOz/.....",
"masterKey": "Cmro6O2li...."
}"
}
}

Описание полей таблицы

ПолеПример заполненияПояснение
id613616id записи
message.topic1Тип сообщения (см. таблицу типов)
message.senderdajwbgctmzxrОтправитель сообщения
message.receiverdajwbgctmzxrПолучатель сообщения
message.data.encryptionrsa4096+aes256cbcТип шифрования
message.data.messageNoASOSOz/BXz.....Зашифрованное сообщение с указателем на измененную сущность
message.data.masterKeyCmro6O2libiM.....Случайный симметричный ключ шифрования сообщения, дополнительно зашифрованный публичным ключом получателя