Как устроена платформа
Описание транзакций¶
Блокчейн-платформа Waves Enterprise поддерживает 28 типов транзакций. Для каждой из них предусмотрен свой набор данных, отправляемых в блокчейн.
Формат ответов, возвращаемых нодой по gRPC-интерфейсу, определяется в protobuf-файлах (см. Инструментарий gRPC).
Подсказка
В случае если вы защитили ключевую пару вашей ноды паролем при генерации аккаунта, укажите пароль от вашей ключевой пары в поле password
транзакции.
1. Genesis Transaction¶
Первая транзакция нового блокчейна, которая осуществляет первоначальную привязку баланса к адресам созданных нод.
Подписание этой транзакции не требуется, поэтому выполняется только ее публикация.
Структура данных транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (1) |
id |
Byte |
ID транзакции |
fee |
Long |
|
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) |
signature |
ByteStr |
Подпись генезис-блока. Генерируется при старте блокчейна |
recipient |
ByteStr |
Адрес получателя распределенных токенов |
amount |
Long |
Сумма токенов |
height |
Int |
Высота выполнения транзакции. Для первой транзакции - 1 |
3. Issue Transaction¶
Транзакция, инициирующая выпуск токенов в обращение.
Структура данных запроса на подписание транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (3) |
version |
Byte |
Версия транзакции |
name |
Array[byte] |
Произвольное имя транзакции |
quantity |
Long |
Количество выпускаемых токенов |
description |
Array[byte] |
Произвольное описание транзакции (в формате base58) |
sender |
ByteStr |
Адрес отправителя транзакции распределенных токенов |
password |
String |
Пароль от ключевой пары в keystore ноды - опциональное поле |
decimals |
Byte |
Количество разрядов после запятой у используемого токена (WEST - 8) |
reissuable |
Boolean |
Возможность довыпуска токенов |
fee |
Long |
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции |
id |
Byte |
ID транзакции |
sender |
ByteStr |
Адрес отправителя транзакции |
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
fee |
Long |
|
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
proofs |
List(ByteStr) |
Массив подтверждений транзакции |
version |
Byte |
Версия транзакции |
assetId |
Byte |
ID выпускаемого токена |
name |
Array[byte] |
Произвольное имя транзакции |
quantity |
Long |
Количество выпускаемых токенов |
reissuable |
Boolean |
Возможность довыпуска токенов |
decimals |
Byte |
Количество разрядов после запятой у используемого токена (WAVES - 8) |
description |
Array[byte] |
Произвольное описание транзакции |
chainId |
Byte |
Идентификационный байт сети (Mainnet - 87 или V) |
script |
Array[Byte] |
Скрипт для валидации транзакции - опциональное поле |
height |
Int |
Высота выполнения транзакции |
4. Transfer Transaction¶
Транзакция для перевода токенов с одного адреса на другой.
Структура данных запроса на подписание транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (4) |
version |
Byte |
Версия транзакции |
sender |
ByteStr |
Адрес отправителя транзакции |
password |
String |
Пароль от ключевой пары в keystore ноды - опциональное поле |
recipient |
ByteStr |
Адрес получателя токенов |
amount |
Long |
Сумма токенов |
fee |
Long |
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
amount |
Long |
Сумма токенов |
fee |
Long |
|
type |
Byte |
Номер транзакции (4) |
version |
Byte |
Версия транзакции |
attachment |
Byte |
Комментарий к транзакции (в формате base58) - опциональное поле |
sender |
ByteStr |
Адрес отправителя транзакции |
feeAssetId |
Byte |
ID токена комиссии - опциональное поле |
proofs |
List(ByteStr) |
Массив подтверждений транзакции (в формате base58) |
assetId |
Byte |
ID токена для перевода - опциональное поле |
recipient |
ByteStr |
Адрес получателя токенов |
id |
Byte |
ID транзакции |
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
5. Reissue Transaction¶
Транзакция для довыпуска токенов.
Структура данных запроса на подписание транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (5) |
version |
Byte |
Версия транзакции |
quantity |
Long |
Количество токенов для довыпуска |
sender |
ByteStr |
Адрес отправителя транзакции |
password |
String |
Пароль от ключевой пары в keystore ноды - опциональное поле |
assetId |
Byte |
ID довыпускаемого токена - опциональное поле |
reissuable |
Boolean |
Возможность довыпуска токенов |
fee |
Long |
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
quantity |
Long |
Количество токенов для довыпуска |
sender |
ByteStr |
Адрес отправителя транзакции |
chainId |
Byte |
Идентификационный байт сети (Mainnet - 87 или V) |
proofs |
List(ByteStr) |
Массив подтверждений транзакции (в формате base58) |
assetId |
Byte |
ID довыпускаемого токена - опциональное поле |
fee |
Long |
|
id |
Byte |
ID транзакции |
type |
Byte |
Номер транзакции (5) |
version |
Byte |
Версия транзакции |
reissuable |
Boolean |
Возможность довыпуска токенов |
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
height |
Int |
Высота выполнения транзакции |
6. Burn Transaction¶
Транзакция для сжигания токенов: уменьшает количество токенов на счету отправителя, тем самым снижая общее количество токенов в обращении. Сожженные токены невозможно восстановить.
Структура данных запроса на подписание транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (6) |
version |
Byte |
Версия транзакции |
sender |
ByteStr |
Адрес отправителя транзакции |
password |
String |
Пароль от ключевой пары в keystore ноды - опциональное поле |
assetId |
Byte |
ID сжигаемого токена - опциональное поле |
quantity |
Long |
Количество токенов для сжигания |
fee |
Long |
|
attachment |
Byte |
Комментарий к транзакции (в формате base58) - опциональное поле |
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
amount |
Long |
Количество токенов для сжигания |
sender |
ByteStr |
Адрес отправителя транзакции |
password |
String |
Пароль от ключевой пары в keystore ноды - опциональное поле |
proofs |
List(ByteStr) |
Массив подтверждений транзакции (в формате base58) |
assetId |
Byte |
ID сжигаемого токена - опциональное поле |
fee |
Long |
|
id |
Byte |
ID транзакции |
type |
Byte |
Номер транзакции (6) |
version |
Byte |
Версия транзакции |
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
height |
Int |
Высота выполнения транзакции |
8. Lease Transaction¶
Передача токенов в аренду другому адресу. Средства, переданные в аренду, начинают учитываться в генерирующем балансе получателя через 1000 блоков.
Передача токенов в лизинг может проводиться для повышения вероятности выбора ноды в качестве майнера следующего раунда. Как правило, в обмен на аренду токенов получатель делится вознаграждением, полученным за генерацию блока, с адресом, предоставившим токены в лизинг.
Токены, переданные в лизинг, остаются заблокированными на адресе отправителя. Отмена лизинга производится с помощью транзакции отмены лизинга.
Структура данных запроса на подписание транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (8) |
version |
Byte |
Версия транзакции |
sender |
ByteStr |
Адрес отправителя транзакции |
password |
String |
Пароль от ключевой пары в keystore ноды - опциональное поле |
recipient |
ByteStr |
Адрес получателя токенов |
amount |
Long |
Количество токенов для передачи в аренду |
fee |
Long |
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
amount |
Long |
Количество токенов для передачи в аренду |
sender |
ByteStr |
Адрес отправителя транзакции |
proofs |
List(ByteStr) |
Массив подтверждений транзакции (в формате base58) |
fee |
Long |
|
recipient |
ByteStr |
Адрес получателя токенов |
id |
Byte |
ID транзакции |
type |
Byte |
Номер транзакции (8) |
version |
Byte |
Версия транзакции |
height |
Int |
Высота выполнения транзакции |
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
9. LeaseCancel Transaction¶
Отмена аренды токенов, переданных в транзакции с определенным ID.
Структура lease
данной транзакции не заполняется: нода автоматически заполняет ее при предоставлении данных о транзакции.
Структура данных запроса на подписание транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (9) |
version |
Byte |
Версия транзакции |
fee |
Long |
|
sender |
ByteStr |
Адрес отправителя транзакции |
password |
String |
Пароль от ключевой пары в keystore ноды - опциональное поле |
txId |
Byte |
ID транзакции аренды токенов |
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
leaseId |
Byte |
ID транзакции аренды токенов |
sender |
ByteStr |
Адрес отправителя транзакции |
chainId |
Byte |
Идентификационный байт сети (Mainnet - 87 или V) |
proofs |
List(ByteStr) |
Массив подтверждений транзакции (в формате base58) |
fee |
Long |
|
id |
Byte |
ID транзакции отмены аренды токенов |
type |
Byte |
Номер транзакции (9) |
version |
Byte |
Версия транзакции |
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
height |
Int |
Высота выполнения транзакции |
10. CreateAlias Transaction¶
Создание псевдонима для адреса отправителя. Псевдоним может использоваться для проведения транзакций в качестве идентификатора получателя.
Структура данных запроса на подписание транзакции:
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (10) |
id |
Byte |
ID транзакции создания псевдонима |
sender |
ByteStr |
Адрес отправителя транзакции |
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
fee |
Long |
|
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
proofs |
List(ByteStr) |
Массив подтверждений транзакции (в формате base58) |
version |
Byte |
Версия транзакции |
alias |
Byte |
Псевдоним |
height |
Byte |
Высота выполнения транзакции |
11. MassTransfer Transaction¶
Перевод токенов нескольким получателям (от 1 до 100 адресов). Комиссия за транзакцию зависит от количества задействованных адресов.
Структура данных запроса на подписание транзакции:
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
fee |
Long |
|
type |
Byte |
Номер транзакции (11) |
transferCount |
Byte |
Количество адресов-получателей |
version |
Byte |
Версия транзакции |
totalAmount |
Byte |
Общая сумма токенов для перевода |
attachment |
Byte |
Комментарий к транзакции (в формате base58) - опциональное поле |
sender |
ByteStr |
Адрес отправителя транзакции |
proofs |
List(ByteStr) |
Массив подтверждений транзакции (в формате base58) |
assetId |
Byte |
ID токена для перевода - опциональное поле |
id |
Byte |
ID транзакции перевода токенов |
transfers |
List |
Список получателей с полями |
transfers.recipient |
ByteStr |
Адрес получателя токенов |
transfers.amount |
Long |
Количество токенов для передачи адресу |
height |
Byte |
Высота выполнения транзакции |
Пример заполнения поля transfers
:
"transfers":
[
{ "recipient": "3MtHszoTn399NfsH3v5foeEXRRrchEVtTRB", "amount": 100000 },
{ "recipient": "3N7BA6J9VUBfBRutuMyjF4yKTUEtrRFfHMc", "amount": 100000 }
]
12. Data Transaction¶
Транзакция для добавления, изменения или удаления записей в хранилище данных адреса. В хранилище данных адреса представлены записи в формате «ключ:значение».
Размер хранилища данных адреса неограничен, однако при помощи одной транзакции данных можно внести до 100 новых пар «ключ:значение». Также байтовое представление транзакции после подписания не должно превышать 150 килобайт.
Если автор данных (адрес в поле author
) совпадает с отправителем транзакции (адрес в поле sender
), при подписании транзакции не требуется указывать параметр senderPublicKey
.
Структура данных запроса на подписание транзакции:
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
senderPublicKey |
PublicKeyAccount |
Открытый ключ автора данных |
data |
List |
Список данных с полями ``key: `` ``type: `` и ``value: `` через запятую |
data.key |
Byte |
Ключ записи |
data.type |
Byte |
Тип данных записи. Возможные значения: |
data.value |
Byte |
Значение записи |
sender |
ByteStr |
Адрес отправителя транзакции |
proofs |
List(ByteStr) |
Массив подтверждений транзакции (в формате base58) |
author |
Byte |
Адрес автора вносимых данных |
fee |
Long |
|
id |
Byte |
ID транзакции с данными |
type |
Byte |
Номер транзакции (12) |
version |
Byte |
Версия транзакции |
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
Пример заполнения поля data
:
"data": [
{
"key": "objectId",
"type": "string",
"value": "obj:123:1234"
}, {...}
]
13. SetScript Transaction¶
Транзакция для привязки скрипта к аккаунту или удаления скрипта. Аккаунт с привязанным к нему скриптом называется смарт-аккаунтом.
Скрипт позволяет верифицировать транзакции, передаваемые от имени аккаунта, без использования механизма верификации транзакций блокчейна.
Структура данных запроса на подписание транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (13) |
version |
Byte |
Версия транзакции |
sender |
ByteStr |
Адрес отправителя транзакции |
password |
String |
Пароль от ключевой пары в keystore ноды - опциональное поле |
fee |
Long |
|
name |
Array[Byte] |
Имя скрипта |
script |
Array[Byte] |
Скомпилированный скрипт в формате base64. Если вы оставите это поле пустым (null) - скрипт будет отвязан от аккаунта |
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (13) |
id |
Byte |
ID транзакции установки скрипта |
sender |
ByteStr |
Адрес отправителя транзакции |
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
fee |
Long |
|
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
proofs |
List(ByteStr) |
Массив подтверждений транзакции (в формате base58) |
chainId |
Byte |
Идентификационный байт сети (Mainnet - 87 или V) |
version |
Byte |
Версия транзакции |
script |
Array[Byte] |
Скомпилированный скрипт в формате base64 - опциональное поле |
name |
Array[Byte] |
Имя скрипта |
description |
Byte |
Комментарий к транзакции (в формате base58) - опциональное поле |
height |
Byte |
Высота выполнения транзакции |
14. Sponsorship Transaction¶
Транзакция, устанавливающая или отменяющая спонсирование.
Механизм спонсирования позволяет адресам выплачивать комиссии за транзакции вызова скрипта и транзакции перевода в спонсорском ассете, заменяющем WEST.
Структура данных запроса на подписание транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
sender |
ByteStr |
Адрес отправителя транзакции |
assetId |
Byte |
ID спонсорского ассета (токена) - опциональное поле |
fee |
Long |
|
isEnabled |
Bool |
Установка спонсирования ( |
type |
Byte |
Номер транзакции (14) |
password |
String |
Пароль от ключевой пары в keystore ноды - опциональное поле |
version |
Byte |
Версия транзакции |
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (14) |
id |
Byte |
ID транзакции спонсирования |
sender |
ByteStr |
Адрес отправителя транзакции |
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
fee |
Long |
|
assetId |
Byte |
ID спонсорского ассета (токена) - опциональное поле |
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
proofs |
List(ByteStr) |
Массив подтверждений транзакции (в формате base58) |
chainId |
Byte |
Идентификационный байт сети (Mainnet - 87 или V) |
version |
Byte |
Версия транзакции |
isEnabled |
Bool |
Установка спонсирования ( |
height |
Byte |
Высота выполнения транзакции |
15. SetAssetScript Transaction¶
Транзакция для установки или удаления скрипта ассета для адреса. Скрипт ассета позволяет верифицировать транзакции с участием того или иного ассета (токена) без использования механизма верификации транзакций блокчейна.
Структура данных запроса на подписание транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (15) |
version |
Byte |
Версия транзакции скрипта ассета |
sender |
ByteStr |
Адрес отправителя транзакции |
password |
String |
Пароль от ключевой пары в keystore ноды - опциональное поле |
fee |
Long |
|
script |
Array[Byte] |
Скомпилированный скрипт в формате base64 - опциональное поле |
assetId |
Byte |
ID спонсорского ассета (токена) - опциональное поле |
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (15) |
id |
Byte |
ID транзакции скрипта ассета |
sender |
ByteStr |
Адрес отправителя транзакции |
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
fee |
Long |
|
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
proofs |
List(ByteStr) |
Массив подтверждений транзакции (в формате base58) |
version |
Byte |
Версия транзакции |
chainId |
Byte |
Идентификационный байт сети (Mainnet - 87 или V) |
assetId |
Byte |
ID спонсорского ассета (токена) - опциональное поле |
script |
Array[Byte] |
Скомпилированный скрипт в формате base64. Если вы оставите это поле пустым (null) - скрипт будет отвязан от аккаунта |
height |
Byte |
Высота выполнения транзакции |
101. GenesisPermission Transaction¶
Транзакция для назначения первого администратора сети, который раздает роли другим участникам.
Структура данных запроса на подписание транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (101) |
id |
Byte |
ID транзакции |
fee |
Long |
|
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
signature |
ByteStr |
Подпись транзакции (в формате base58) |
target |
ByteStr |
Адрес назначаемого первого администратора |
role |
String |
Назначаемая роль (для администратора - |
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (101) |
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
target |
ByteStr |
Адрес назначаемого первого администратора |
role |
String |
Назначаемая роль (для администратора - |
102. Permission Transaction¶
Выдача или отзыв роли участника. Отправлять транзакцию 102 в блокчейн может только участник с ролью permissioner.
Возможные роли для указания в поле role
:
permissioner
sender
blacklister
miner
issuer
contract_developer
connection_manager
banned
Описание ролей см. в статье Роли участников.
Структура данных запроса на подписание транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (102) |
sender |
ByteStr |
Адрес отправителя транзакции |
password |
String |
Пароль от ключевой пары в keystore ноды - опциональное поле |
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
fee |
Long |
|
target |
ByteStr |
Адрес участника для назначения роли |
opType |
String |
Тип операции: |
dueTimestamp |
Long |
Временная метка срока действия роли в формате Unix Timestamp (в миллисекундах) - опциональное поле |
version |
Byte |
Версия транзакции |
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
role |
String |
Назначаемая роль (для администратора - |
sender |
ByteStr |
Адрес отправителя транзакции |
proofs |
List(ByteStr) |
Массив подтверждений транзакции (в формате base58) |
fee |
Long |
|
opType |
String |
Тип операции: |
id |
Byte |
ID транзакции назначения или отмены роли |
type |
Byte |
Номер транзакции (102) |
dueTimestamp |
Long |
Временная метка срока действия роли в формате Unix Timestamp (в миллисекундах) - опциональное поле |
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
target |
ByteStr |
Адрес назначаемого первого администратора |
103. CreateContract Transaction¶
Создание смарт-контракта. Байтовое представление этой транзакции после ее подписания не должно превышать 150 килобайт.
Поле feeAssetId
этой транзакции опционально и используется только для смарт-контрактов с поддержкой gRPC.
Значение поля version
для этого типа смарт-контрактов - 2.
Подписание транзакции 103 может производиться только пользователем с ролью contract_developer.
Структура данных для запроса на подписание транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
fee |
Long |
|
image |
Array[Bytes] |
Имя Docker-образа смарт-контракта |
imageHash |
Array[Bytes] |
Хэш Docker-образа смарт-контракта |
contractName |
Array[Bytes] |
Имя смарт-контракта (при загрузке из предустановленного репозитория) или его полный адрес (если репозиторий смарт-контракта не указан в конфигурационном файле ноды) |
sender |
ByteStr |
Адрес отправителя транзакции |
password |
String |
Пароль от ключевой пары в keystore ноды - опциональное поле |
params |
List[DataEntry[_]] |
Входные и выходные данные смарт-контракта. Вносятся при помощи полей |
params.key |
Byte |
Ключ параматра |
params.type |
Byte |
Тип данных параметра. Возможные значения: |
params.value |
Byte |
Значение параметра |
type |
Byte |
Номер транзакции (103) |
version |
Byte |
Версия транзакции |
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (103) |
id |
Byte |
ID транзакции создания контракта |
sender |
ByteStr |
Адрес отправителя транзакции |
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
fee |
Long |
|
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
proofs |
List(ByteStr) |
Массив подтверждений транзакции (в формате base58) |
version |
Byte |
Версия транзакции |
image |
Array[Bytes] |
Имя смарт-контракта (при загрузке из предустановленного репозитория) или его полный адрес (если репозиторий смарт-контракта не указан в конфигурационном файле ноды) |
imageHash |
Array[Bytes] |
Хэш Docker-образа смарт-контракта |
contractName |
Array[Bytes] |
Имя смарт-контракта |
params |
List[DataEntry[_]] |
Входные и выходные данные смарт-контракта. Вносятся при помощи полей |
params.key |
Byte |
Ключ параматра |
params.type |
Byte |
Тип данных параметра. Возможные значения: |
params.value |
Byte |
Значение параметра |
height |
Byte |
Высота выполнения транзакции |
При работе в частной сети транзакция 103 предусматривает загрузку Docker-образа контракта не только из репозиториев, указанных в секции docker-engine
конфигурационного файла ноды.
Если вам необходимо загрузить смарт-контракт из репозитория, не внесенного в конфигурационный файл, укажите в поле name
транзакции полный адрес смарт-контракта в созданном вами репозитории.
Пример запроса на публикацию смарт-контракта из непредустановленного репозитория:
{
"type": 103,
"id": "ULcq9R7PvUB2yPMrmBdxoTi3bcRmQPT3JDLLLZVj4Ky",
"sender": "3N3YTj1tNwn8XUJ8ptGKbPuEFNa9GFnhqew",
"senderPublicKey": "3kW7vy6nPC59BXM67n5N56rhhAv38Dws5skqDsjMVT2M",
"fee": 500000,
"timestamp": 1550591678479,
"proofs": [ "yecRFZm9iBLyDy93bDVaNo1PR5Qkkic7196GAgUt9TNH1cnQphq4yGQQ8Fxj4BYA4TaqYVw5qxtWzGMPQyVeKYv" ],
"version": 1,
"image": "customregistry.com:5000/stateful-increment-contract:latest",
"imageHash": "7d3b915c82930dd79591aab040657338f64e5d8b842abe2d73d5c8f828584b65",
"contractName": "stateful-increment-contract",
"params": [],
"height": 1619
}
104. CallContract Transaction¶
Вызов смарт-контракта на исполнение. Байтовое представление этой транзакции после ее подписания не должно превышать 150 килобайт.
Подписание транзакции производится инициатором исполнения контракта.
В поле contractVersion
транзакции указывается версия контракта:
1
- для нового контракта;2
- для обновленного контракта.
Данное поле доступно только для второй версии транзакции: если в поле version
транзакции создания смарт-контракта указано значение 2
.
Контракт обновляется при помощи транзакции 107.
При создании контракта автоматически создается транзакция 104, вызывающая контракт для его проверки.
Если контракт не выполнился или выполнился с ошибкой, то транзакции 103 и 104 удаляются и не попадают в блок.
Структура данных для запроса на подписание транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
contractId |
ByteStr |
ID смарт-контракта |
fee |
Long |
|
sender |
ByteStr |
Адрес отправителя транзакции |
password |
String |
Пароль от ключевой пары в keystore ноды - опциональное поле |
type |
Byte |
Номер транзакции (104) |
params |
List[DataEntry[_]] |
Входные и выходные данные смарт-контракта. Вносятся при помощи полей |
params.key |
Byte |
Ключ параматра |
params.type |
Byte |
Тип данных параметра. Возможные значения: |
params.value |
Byte |
Значение параметра |
version |
Byte |
Версия транзакции |
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (104) |
id |
Byte |
ID транзакции вызова контракта |
sender |
ByteStr |
Адрес отправителя транзакции |
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
fee |
Long |
|
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
proofs |
List(ByteStr) |
Массив подтверждений транзакции (в формате base58) |
version |
Byte |
Версия транзакции |
contractId |
ByteStr |
ID смарт-контракта |
params |
List[DataEntry[_]] |
Входные и выходные данные смарт-контракта. Вносятся при помощи полей |
params.key |
Byte |
Ключ параметра |
params.type |
Byte |
Тип данных параметра. Возможные значения: |
params.value |
Byte |
Значение параметра |
105. ExecutedContract Transaction¶
Запись результата исполнения смарт-контракта в его стейт. Байтовое представление этой транзакции после ее подписания не должно превышать 150 килобайт.
Транзакция 105 содержит все поля (тело) транзакции 103 или 104 смарт-контракта, результат исполнения которого необходимо записать в его стейт (поле tx
).
Результат исполнения смарт-контракта вносится в его стейт из соответствующих параметров поля params
транзакции 103 или 104.
Подписание транзакции производится нодой, формирующей блок после отправки запроса на публикацию транзакции.
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (105) |
id |
Byte |
ID транзакции исполнения контракта |
sender |
ByteStr |
Адрес отправителя транзакции |
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
password |
String |
Пароль от ключевой пары в keystore ноды - опциональное поле |
fee |
Long |
|
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
proofs |
List(ByteStr) |
Массив подтверждений транзакции (в формате base58) |
version |
Byte |
Версия транзакции |
tx |
Array |
Тело транзакции 103 или 104 исполняемого смарт-контракта |
results |
List[DataEntry[_]] |
Список возможных результатов исполнения смарт-контракта |
height |
Byte |
Высота выполнения транзакции |
106. DisableContract Transaction¶
Отключение смарт-контракта. Байтовое представление этой транзакции после ее подписания не должно превышать 150 килобайт.
Подписание транзакции 106 может производиться только пользователем с ролью contract_developer.
Структура данных для запроса на подписание транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
sender |
ByteStr |
Адрес отправителя транзакции |
password |
String |
Пароль от ключевой пары в keystore ноды - опциональное поле |
contractId |
ByteStr |
ID смарт-контракта |
fee |
Long |
|
type |
Byte |
Номер транзакции (106) |
version |
Byte |
Версия транзакции |
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (106) |
id |
Byte |
ID транзакции отключения контракта |
sender |
ByteStr |
Адрес отправителя транзакции |
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
fee |
Long |
|
proofs |
List(ByteStr) |
Массив подтверждений транзакции (в формате base58) |
version |
Byte |
Версия транзакции |
contractId |
ByteStr |
ID смарт-контракта |
height |
Byte |
Высота выполнения транзакции |
107. UpdateContract Transaction¶
Обновление кода смарт-контракта. Байтовое представление этой транзакции после ее подписания не должно превышать 150 килобайт.
Подписание транзакции 107, как и обновление смарт-контракта, может производиться только пользователем с ролью contract_developer.
Структура данных для запроса на подписание транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
image |
Array[Bytes] |
Имя Docker-образа смарт-контракта |
sender |
ByteStr |
Адрес отправителя транзакции |
password |
String |
Пароль от ключевой пары в keystore ноды - опциональное поле |
fee |
Long |
|
contractId |
ByteStr |
ID смарт-контракта |
imageHash |
Array[Bytes] |
Хэш Docker-образа смарт-контракта |
type |
Byte |
Номер транзакции (107) |
version |
Byte |
Версия транзакции |
Структура данных для запроса на публикацию транзакции:
110. GenesisRegisterNode Transaction¶
Регистрация ноды в генезис-блоке при старте блокчейна.
Данная транзакция не требует подписания.
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (110) |
id |
Byte |
ID транзакции регистрации ноды в генезис-блоке |
fee |
Long |
|
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
signature |
ByteStr |
Подпись транзакции (в формате base58) |
version |
Byte |
Версия транзакции |
targetPubKey |
Byte |
Публичный ключ регистрируемой ноды |
height |
Byte |
Высота выполнения транзакции |
111. RegisterNode Transaction¶
Регистрация новой ноды в блокчейне или ее удаление.
Структура данных для запроса на подписание транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (111) |
opType |
String |
Тип операции: |
sender |
ByteStr |
Адрес отправителя транзакции |
password |
String |
Пароль от ключевой пары в keystore ноды - опциональное поле |
targetPubKey |
Byte |
Публичный ключ регистрируемой или удаляемой ноды |
NodeName |
Byte |
Имя ноды |
fee |
Long |
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (111) |
id |
Byte |
ID транзакции регистрации ноды |
sender |
ByteStr |
Адрес отправителя транзакции |
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
fee |
Long |
|
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
proofs |
List(ByteStr) |
Массив подтверждений транзакции (в формате base58) |
version |
Byte |
Версия транзакции |
targetPubKey |
Byte |
Публичный ключ регистрируемой или удаляемой ноды |
NodeName |
Byte |
Имя ноды |
opType |
String |
Тип операции: |
height |
Byte |
Высота выполнения транзакции |
password |
String |
Пароль от ключевой пары в keystore ноды - опциональное поле |
112. CreatePolicy Transaction¶
Создание группы доступа к конфиденциальным данным из указанных адресов.
Структура данных для запроса на подписание транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
sender |
ByteStr |
Адрес отправителя транзакции |
policyName |
String |
Имя создаваемой группы доступа |
password |
String |
Пароль от ключевой пары в keystore ноды - опциональное поле |
recipients |
Aray[Bytes] |
Массив адресов участников группы доступа к конфиденциальным данным через запятую |
fee |
Long |
|
description |
Array[byte] |
Произвольное описание транзакции (в формате base58) |
owners |
Aray[Bytes] |
Массив адресов-администраторов группы доступа через запятую: администраторы имеют право изменять группу доступа |
type |
Byte |
Номер транзакции (112) |
version |
Byte |
Версия транзакции |
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (112) |
id |
Byte |
ID транзакции создания группы доступа |
sender |
ByteStr |
Адрес отправителя транзакции |
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
policyName |
String |
Имя создаваемой группы доступа |
recipients |
Aray[Bytes] |
Массив адресов участников группы доступа к конфиденциальным данным через запятую |
owners |
Aray[Bytes] |
Массив адресов-администраторов группы доступа через запятую: администраторы имеют право изменять группу доступа |
fee |
Long |
|
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
proofs |
List(ByteStr) |
Массив подтверждений транзакции (в формате base58) |
height |
Byte |
Высота выполнения транзакции |
description |
Array[byte] |
Произвольное описание транзакции (в формате base58) |
version |
Byte |
Версия транзакции |
113. UpdatePolicy Transaction¶
Изменение группы доступа к конфиденциальным данным.
Структура данных для запроса на подписание транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
policyId |
String |
Идентификатор создаваемой группы доступа |
password |
String |
Пароль от ключевой пары в keystore ноды - опциональное поле |
sender |
ByteStr |
Адрес отправителя транзакции |
recipients |
Aray[Bytes] |
Массив адресов участников группы доступа к конфиденциальным данным через запятую |
fee |
Long |
|
opType |
String |
Тип операции: |
owners |
Aray[Bytes] |
Массив адресов-администраторов группы доступа через запятую: администраторы имеют право изменять группу доступа |
type |
Byte |
Номер транзакции (113) |
version |
Byte |
Версия транзакции |
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (113) |
id |
Byte |
ID транзакции изменения группы доступа |
sender |
ByteStr |
Адрес отправителя транзакции |
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
policyId |
String |
Идентификатор создаваемой группы доступа |
recipients |
Aray[Bytes] |
Массив адресов для добавления или удаления участников группы доступа к конфиденциальным данным через запятую |
owners |
Aray[Bytes] |
Массив адресов-администраторов группы доступа через запятую: администраторы имеют право изменять группу доступа |
fee |
Long |
|
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
proofs |
List(ByteStr) |
Массив подтверждений транзакции (в формате base58) |
height |
Byte |
Высота выполнения транзакции |
opType |
String |
Тип операции: |
description |
Array[byte] |
Произвольное описание транзакции (в формате base58) |
version |
Byte |
Версия транзакции |
114. PolicyDataHash Transaction¶
Отправка хэша конфиденциальных данных в сеть.
Эта транзакция создается автоматически при отправке в сеть конфиденциальных данных при помощи REST API метода POST /privacy/sendData
.
Данная транзакция не требует подписания.
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (114) |
id |
Byte |
ID транзакции |
sender |
ByteStr |
Адрес отправителя транзакции |
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
policyId |
String |
Имя создаваемой группы доступа |
dataHash |
String |
Хэш конфиденциальных данных для отправки |
fee |
Long |
|
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
proofs |
List(ByteStr) |
Массив подтверждений транзакции (в формате base58) |
height |
Byte |
Высота выполнения транзакции |
version |
Byte |
Версия транзакции |
120. AtomicTransaction¶
Атомарная транзакция: помещает в контейнер другие транзакции для их атомарного выполнения. Транзакция этого типа исполняется полностью (ни одна из включенных транзакций не отклоняется) или не исполняется в принципе.
Поддерживается включение 2 и более транзакций следующих типов:
4. Transfer Transaction, версия 3
102. Permission Transaction, версия 2
103. CreateContract Transaction, версия 3
104. CallContract Transaction, версия 4
105. ExecutedContract Transaction, версии 1 и 2
106. DisableContract Transaction, версия 3
107. UpdateContract Transaction, версия 3
112. CreatePolicy Transaction, версия 3
113. UpdatePolicy Transaction, версия 3
114. PolicyDataHash Transaction, версия 3
Атомарная транзакция сама по себе не требует комиссии: общая сумма складывается из комиссий за транзакции, помещенные в атомарную транзакцию.
Подробнее об атомарных транзакциях: Атомарные транзакции
Структура данных для запроса на подписание транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (120) |
sender |
ByteStr |
Адрес отправителя транзакции |
transactions |
Array |
Полные тела включаемых транзакций |
password |
String |
Пароль от ключевой пары в keystore ноды - опциональное поле |
fee |
Long |
|
version |
Byte |
Версия транзакции |
Структура данных для запроса на публикацию транзакции:
Поле |
Тип данных |
Описание |
---|---|---|
type |
Byte |
Номер транзакции (114) |
id |
Byte |
ID транзакции |
sender |
ByteStr |
Адрес отправителя транзакции |
senderPublicKey |
PublicKeyAccount |
Открытый ключ отправителя транзакции |
fee |
Long |
|
timestamp |
Long |
Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле |
proofs |
List(ByteStr) |
Массив подтверждений транзакции (в формате base58) |
height |
Byte |
Высота выполнения транзакции |
transactions |
Array |
Полные тела включаемых транзакций |
miner |
String |
Публичный ключ майнера блока; заполняется в ходе раунда майнинга |
password |
String |
Пароль от ключевой пары в keystore ноды - опциональное поле |
version |
Byte |
Версия транзакции |