Как устроена платформа

Описание транзакций

Блокчейн-платформа Waves Enterprise поддерживает 28 типов транзакций. Для каждой из них предусмотрен свой набор данных, отправляемых в блокчейн.

Запросы и ответы, передаваемые в рамках каждой транзакции по REST API-интерфейсу ноды, имеют формат JSON. Формат запросов и ответов, передающихся по gRPC-интерфейсу ноды, определяется соответствующими proto-схемами. JSON и protobuf-представления запросов и ответов каждой транзакции приведены ниже.

Подсказка

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

1. Genesis Transaction

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

Подписание этой транзакции не требуется, поэтому выполняется только ее публикация. Транзакция не версионируется.

Структура данных транзакции

Поле

Тип данных

Описание

type

Byte

Номер транзакции (1)

id

Byte

ID транзакции

fee

Long

Комиссия за транзакцию в WE Mainnet

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

Комиссия за транзакцию в WE Mainnet

Публикация:

Поле

Тип данных

Описание

type

Byte

Номер транзакции

id

Byte

ID транзакции

sender

ByteStr

Адрес отправителя транзакции

senderPublicKey

PublicKeyAccount

Открытый ключ отправителя транзакции

fee

Long

Комиссия за транзакцию в WE Mainnet

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

Высота выполнения транзакции

JSON-представление:

Подписание:

{
   "type": 3,
   "version":2,
   "name": "Test Asset 1",
   "quantity": 100000000000,
   "description": "Some description",
   "sender": "3FSCKyfFo3566zwiJjSFLBwKvd826KXUaqR",
   "password": "",
   "decimals": 8,
   "reissuable": true,
   "fee": 100000000
}

Публикация:

{
    "type": 3,
    "id": "DnK5Xfi2wXUJx9BjK9X6ZpFdTLdq2GtWH9pWrcxcmrhB",
    "sender": "3N65yEf31ojBZUvpu4LCo7n8D73juFtheUJ",
    "senderPublicKey": "C1ADP1tNGuSLTiQrfNRPhgXx59nCrwrZFRV4AHpfKBpZ",
    "fee": 100000000,
    "timestamp": 1549378509516,
    "proofs": [ "NqZGcbcQ82FZrPh6aCEjuo9nNnkPTvyhrNq329YWydaYcZTywXUwDxFAknTMEGuFrEndCjXBtrueLWaqbJhpeiG" ],
    "version": 2,
    "assetId": "DnK5Xfi2wXUJx9BjK9X6ZpFdTLdq2GtWH9pWrcxcmrhB",
    "name": "Token Name",
    "quantity": 10000,
    "reissuable": true,
    "decimals": 2,
    "description": "SmarToken",
    "chainId": 84,
    "script": "base64:AQa3b8tH",
    "height": 60719
},

4. Transfer Transaction

Транзакция для перевода токенов с одного адреса на другой.

Структуры данных транзакции

Подписание:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (4)

version

Byte

Версия транзакции

sender

ByteStr

Адрес отправителя транзакции

password

String

Пароль от ключевой пары в keystore ноды - опциональное поле

recipient

ByteStr

Адрес получателя токенов

amount

Long

Сумма токенов

fee

Long

Комиссия за транзакцию в WE Mainnet

Публикация:

Поле

Тип данных

Описание

senderPublicKey

PublicKeyAccount

Открытый ключ отправителя транзакции

amount

Long

Сумма токенов

fee

Long

Комиссия за транзакцию в WE Mainnet

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 (в миллисекундах) – опциональное поле

JSON-представление:

Подписание:

{
  "type": 4,
  "version": 2,
  "sender": "3M6dRZXaJY9oMA3fJKhMALyYKt13D1aimZX",
  "password": "",
  "recipient": "3M6dRZXaJY9oMA3fJKhMALyYKt13D1aimZX",
  "amount": 40000000000,
  "fee": 100000
}

Публикация:

{
    "senderPublicKey": "4WnvQPit2Di1iYXDgDcXnJZ5yroKW54vauNoxdNeMi2g",
    "amount": 200000000,
    "fee": 100000,
    "type": 4,
    "version": 2,
    "attachment": "3uaRTtZ3taQtRSmquqeC1DniK3Dv",
    "sender": "3GLWx8yUFcNSL3DER8kZyE4TpyAyNiEYsKG",
    "feeAssetId": null,
    "proofs": [
    "2hRxJ2876CdJ498UCpErNfDSYdt2mTK4XUnmZNgZiq63RupJs5WTrAqR46c4rLQdq4toBZk2tSYCeAQWEQyi72U6"
    ],
    "assetId": null,
    "recipient": "3GPtj5osoYqHpyfmsFv7BMiyKsVzbG1ykfL",
    "id": "757aQzJiQZRfVRuJNnP3L1d369H2oTjUEazwtYxGngCd",
    "timestamp": 1558952680800
}

Подписание:

{
  "type": 4,
  "version": 3,
  "sender": "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx",
  "password": "",
  "recipient": "3NtNJV44wyxRXv2jyW3yXLxjJxvY1vR88TF",
  "amount": 40000000000,
  "fee": 10000000
}

Публикация:

{
  "senderPublicKey" : "7GiFGcGaEN87ycK8v71Un6b7RUoeKBU4UvUHPYbeHaki",
  "amount" : 10,
  "fee" : 10000000,
  "type" : 4,
  "version" : 3,
  "atomicBadge" : {
    "trustedSender" : "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx"
  },
  "attachment" : "",
  "sender" : "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx",
  "feeAssetId" : null,
  "proofs" : [ "2vbAJmwzQw2FCtozcewxJVfxoHxf97BTNdGuaeSATV4vEHZ3XYA4Z7nXGsSnf18aesnAWTKWCfzwM5yGpWEyGM7f" ],
  "assetId" : null,
  "recipient" : "3NtNJV44wyxRXv2jyW3yXLxjJxvY1vR88TF",
  "id" : "2wCEMREFbgk318hFFaNGsgFzyjZHuCrtwSnpK35qhiw4",
  "timestamp" : 1619186861204,
  "height" : 861644
}

5. Reissue Transaction

Транзакция для довыпуска токенов.

Структуры данных транзакции

Подписание:

:header: «Поле»,»Тип данных»,»Описание»

type

Byte

Номер транзакции (5)

version

Byte

Версия транзакции

quantity

Long

Количество токенов для довыпуска

sender

ByteStr

Адрес отправителя транзакции

password

String

Пароль от ключевой пары в keystore ноды – опциональное поле

assetId

Byte

ID довыпускаемого токена – опциональное поле

reissuable

Boolean

Возможность довыпуска токенов

fee

Long

Комиссия за транзакцию в WE Mainnet

Публикация:

Поле

Тип данных

Описание

senderPublicKey

PublicKeyAccount

Открытый ключ отправителя транзакции

quantity

Long

Количество токенов для довыпуска

sender

ByteStr

Адрес отправителя транзакции

chainId

Byte

Идентификационный байт сети (Mainnet – 87 или V)

proofs

List(ByteStr)

Массив подтверждений транзакции (в формате base58)

assetId

Byte

ID довыпускаемого токена – опциональное поле

fee

Long

Комиссия за транзакцию в WE Mainnet

id

Byte

ID транзакции

type

Byte

Номер транзакции (5)

version

Byte

Версия транзакции

reissuable

Boolean

Возможность довыпуска токенов

timestamp

Long

Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле

height

Int

Высота выполнения транзакции

JSON-представление:

Подписание:

{
    "type": 5,
    "version":2,
    "quantity": 556105,
    "sender": "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx",
    "password": "",
    "assetId": "6UAMZA6RshxyPvt9W7aoWiUiB6N73yLQMMfiRQYXdWZh",
    "reissuable": true,
    "fee": 100000000
}

Публикация:

{
  "senderPublicKey" : "7GiFGcGaEN87ycK8v71Un6b7RUoeKBU4UvUHPYbeHaki",
  "quantity" : 556105,
  "fee" : 100000000,
  "type" : 5,
  "version" : 2,
  "reissuable" : true,
  "sender" : "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx",
  "chainId" : 86,
  "proofs" : [ "5ahD78wciu8YTsLoxo1XRghJWAGG7At7ePiBWTNzdkvX7cViRCKRLjjjPTGCoAH2mdGQK9i1JiY1wh18eh4h7pGy" ],
  "assetId" : "6UAMZA6RshxyPvt9W7aoWiUiB6N73yLQMMfiRQYXdWZh",
  "id" : "8T9jJUusN5KBexxDUX1XBjoDydXGP34zWH7Qvp5mnmES",
  "timestamp" : 1619187184206,
  "height" : 861645
}

6. Burn Transaction

Транзакция для сжигания токенов: уменьшает количество токенов на счету отправителя, тем самым снижая общее количество токенов в обращении. Сожженные токены невозможно восстановить.

Структуры данных транзакции

Подписание:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (6)

version

Byte

Версия транзакции

sender

ByteStr

Адрес отправителя транзакции

password

String

Пароль от ключевой пары в keystore ноды - опциональное поле

assetId

Byte

ID сжигаемого токена - опциональное поле

quantity

Long

Количество токенов для сжигания

fee

Long

Комиссия за транзакцию в WE Mainnet

attachment

Byte

Комментарий к транзакции (в формате base58) - опциональное поле

Публикация:

Поле

Тип данных

Описание

senderPublicKey

PublicKeyAccount

Открытый ключ отправителя транзакции

amount

Long

Количество токенов для сжигания

sender

ByteStr

Адрес отправителя транзакции

password

String

Пароль от ключевой пары в keystore ноды - опциональное поле

proofs

List(ByteStr)

Массив подтверждений транзакции (в формате base58)

assetId

Byte

ID сжигаемого токена - опциональное поле

fee

Long

Комиссия за транзакцию в WE Mainnet

id

Byte

ID транзакции

type

Byte

Номер транзакции (6)

version

Byte

Версия транзакции

timestamp

Long

Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле

height

Int

Высота выполнения транзакции

JSON-представление:

Подписание:

{
    "type": 6,
    "version": 2,
    "sender": "3N9vL3apA4j2L5PojHW8TYmfHx9Lo2ZaKPB",
    "password": "",
    "assetId": "7bE3JPwZC3QcN9edctFrLAKYysjfMEk1SDjZx5gitSGg",
    "quantity": 1000,
    "fee": 100000,
    "attachment": "string"
}

Публикация:

{
    "senderPublicKey": "Fbt5fKHesnQG2CXmsKf4TC8v9oB7bsy2AY56CUopa6H3",
    "amount": 1000,
    "sender": "3N9vL3apA4j2L5PojHW8TYmfHx9Lo2ZaKPB",
    "chainId": 84,
    "proofs": [ "kzTwsNXjJkzk6dpFFZZXyeimYo6iLTVbCnCXBD4xBtyrNjysPqZfGKk9NdJUTP3xeAPhtEgU9hsdwzRVo1hKMgS" ],
    "assetId": "7bE3JPwZC3QcN9edctFrLAKYysjfMEk1SDjZx5gitSGg",
    "fee": 100000,
    "id": "3yd2HZq7sgun7GakisLH88UeKcpYMUEL4sy57aprAN5E",
    "type": 6,
    "version": 2,
    "timestamp": 1551448489758,
    "height": 1190
}

8. Lease Transaction

Передача токенов в аренду другому адресу. Средства, переданные в аренду, начинают учитываться в генерирующем балансе получателя через 1000 блоков.

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

Токены, переданные в лизинг, остаются заблокированными на адресе отправителя. Отмена лизинга производится с помощью транзакции отмены лизинга.

Структуры данных транзакции

Подписание:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (8)

version

Byte

Версия транзакции

sender

ByteStr

Адрес отправителя транзакции

password

String

Пароль от ключевой пары в keystore ноды - опциональное поле

recipient

ByteStr

Адрес получателя токенов

amount

Long

Количество токенов для передачи в аренду

fee

Long

Комиссия за транзакцию в WE Mainnet

Публикация:

Поле

Тип данных

Описание

senderPublicKey

PublicKeyAccount

Открытый ключ отправителя транзакции

amount

Long

Количество токенов для передачи в аренду

sender

ByteStr

Адрес отправителя транзакции

proofs

List(ByteStr)

Массив подтверждений транзакции (в формате base58)

fee

Long

Комиссия за транзакцию в WE Mainnet

recipient

ByteStr

Адрес получателя токенов

id

Byte

ID транзакции

type

Byte

Номер транзакции (8)

version

Byte

Версия транзакции

height

Int

Высота выполнения транзакции

timestamp

Long

Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле

JSON-представление:

Подписание:

{
    "type": 8,
    "version": 2,
    "sender": "3N9vL3apA4j2L5PojHW8TYmfHx9Lo2ZaKPB",
    "password": "",
    "recipient": "3N1ksBqc6uSksdiYjCzMtvEpiHhS1JjkbPh",
    "amount": 1000,
    "fee": 100000
}

Публикация:

{
    "senderPublicKey": "Fbt5fKHesnQG2CXmsKf4TC8v9oB7bsy2AY56CUopa6H3",
    "amount": 1000,
    "sender": "3N9vL3apA4j2L5PojHW8TYmfHx9Lo2ZaKPB",
    "proofs": [ "5jvmWKmU89HnxXFXNAd9X41zmiB5fSGoXMirsaJ9tNeyiCAJmjm7MR48g789VucckQw2UExaVXfhsdEBuUrchvrq" ],
    "fee": 100000,
    "recipient": "3N1ksBqc6uSksdiYjCzMtvEpiHhS1JjkbPh",
    "id": "6Tn7ir9MycHW6Gq2F2dGok2stokSwXJadPh4hW8eZ8Sp",
    "type": 8,
    "version": 2,
    "timestamp": 1551449299545,
    "height": 1190
}

9. LeaseCancel Transaction

Отмена аренды токенов, переданных в транзакции с определенным ID. Структура lease данной транзакции не заполняется: нода автоматически заполняет ее при предоставлении данных о транзакции.

Структуры данных транзакции

Подписание:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (9)

version

Byte

Версия транзакции

fee

Long

Комиссия за транзакцию в WE Mainnet

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

Комиссия за транзакцию в WE Mainnet

id

Byte

ID транзакции отмены аренды токенов

type

Byte

Номер транзакции (9)

version

Byte

Версия транзакции

timestamp

Long

Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле

height

Int

Высота выполнения транзакции

JSON-представление:

Подписание:

{
    "type": 9,
    "version": 2,
    "fee": 100000,
    "sender": "3N9vL3apA4j2L5PojHW8TYmfHx9Lo2ZaKPB",
    "password": "",
    "txId": "6Tn7ir9MycHW6Gq2F2dGok2stokSwXJadPh4hW8eZ8Sp"
}

Публикация:

{
   "senderPublicKey": "Fbt5fKHesnQG2CXmsKf4TC8v9oB7bsy2AY56CUopa6H3",
    "leaseId": "6Tn7ir9MycHW6Gq2F2dGok2stokSwXJadPh4hW8eZ8Sp",
    "sender": "3N9vL3apA4j2L5PojHW8TYmfHx9Lo2ZaKPB",
    "chainId": 84,
    "proofs": [ "2Gns72hraH5yay3eiWeyHQEA1wTqiiAztaLjHinEYX91FEv62HFW38Hq89GnsEJFHUvo9KHYtBBrb8hgTA9wN7DM" ],
    "fee": 100000,
    "id": "9vhxB2ZDQcqiumhQbCPnAoPBLuir727qgJhFeBNmPwmu",
    "type": 9,
    "version": 2,
    "timestamp": 1551449835205,
    "height": 1190
}

10. CreateAlias Transaction

Создание псевдонима для адреса отправителя. Псевдоним может использоваться для проведения транзакций в качестве идентификатора получателя.

Структуры данных транзакции

Подписание:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (10)

version

Byte

Версия транзакции

fee

Long

Комиссия за транзакцию в WE Mainnet

sender

ByteStr

Адрес отправителя транзакции

password

String

Пароль от ключевой пары в keystore ноды - опциональное поле

alias

Byte

Псевдоним

Публикация:

Структура данных для запроса на публикацию транзакции:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (10)

id

Byte

ID транзакции создания псевдонима

sender

ByteStr

Адрес отправителя транзакции

senderPublicKey

PublicKeyAccount

Открытый ключ отправителя транзакции

fee

Long

Комиссия за транзакцию в WE Mainnet

timestamp

Long

Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле

proofs

List(ByteStr)

Массив подтверждений транзакции (в формате base58)

version

Byte

Версия транзакции

alias

Byte

Псевдоним

height

Byte

Высота выполнения транзакции

JSON-представление:

Подписание:

{
    "type": 10,
    "version": 2,
    "fee": 100000000,
    "sender": "3NwTvbW7TMckBc785XjtGTUfHmcesaWBe1A",
    "password": "",
    "alias": "1@k1_kv29"
}

Публикация:

{
  "senderPublicKey" : "C4eRfdUFaZMRkfUp91bYr7uMgdBRnUfAxuAjetxmK7KY",
  "sender" : "3NwTvbW7TMckBc785XjtGTUfHmcesaWBe1A",
  "proofs" : [ "3fhJztBNnTDjppmqgi4GugAYo1aS1mzZhVhPdnNsqYqCEyLLHfzgb75psRPntHD4uBZgk8jByFP9mwwx2Ezsdg59" ],
  "fee" : 100000000,
  "alias" : "1@k1_kv29",
  "id" : "AavgVzV7avPMpERro6YqikwFESAgG2wViprtPJUtXP6F",
  "type" : 10,
  "version" : 2,
  "timestamp" : 1608737444468,
  "height" : 595942
}

11. MassTransfer Transaction

Перевод токенов нескольким получателям (от 1 до 100 адресов). Комиссия за транзакцию зависит от количества задействованных адресов.

Структуры данных транзакции

Подписание:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (11)

sender

ByteStr

Адрес отправителя транзакции

password

String

Пароль от ключевой пары в keystore ноды - опциональное поле

fee

Long

Комиссия за транзакцию в WE Mainnet

version

Byte

Версия транзакции

transfers

List

Список получателей с полями recipient: ` и `amount через запятую

recipient

ByteStr

Адрес получателя токенов

amount

Long

Количество токенов для передачи адресу

Публикация:

Поле

Тип данных

Описание

senderPublicKey

PublicKeyAccount

Открытый ключ отправителя транзакции

fee

Long

Комиссия за транзакцию в WE Mainnet

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

Список получателей с полями recipient`: ` и ``amount через запятую

transfers.recipient

ByteStr

Адрес получателя токенов

transfers.amount

Long

Количество токенов для передачи адресу

height

Byte

Высота выполнения транзакции

Пример заполнения поля transfers:

"transfers":
[
    { "recipient": "3MtHszoTn399NfsH3v5foeEXRRrchEVtTRB", "amount": 100000 },
    { "recipient": "3N7BA6J9VUBfBRutuMyjF4yKTUEtrRFfHMc", "amount": 100000 }
]

JSON-представление:

Подписание:

{
    "type": 11,
    "sender": "3NydXoTq3UgUW5rxsNwEMs1iwbbvVEwxoHU",
    "password": "",
    "fee": 30000000,
    "version": 2,
    "transfers":
    [
        { "recipient": "3MtHszoTn399NfsH3v5foeEXRRrchEVtTRB", "amount": 100000 },
        { "recipient": "3N7BA6J9VUBfBRutuMyjF4yKTUEtrRFfHMc", "amount": 100000 }
    ]
}

Публикация:

{
  "senderPublicKey" : "AMhAY8RMy5QsPqj58xeMY3fJxTZKx71QztsjDzqWprHo",
  "fee" : 30000000,
  "type" : 11,
  "transferCount" : 4,
  "version" : 2,
  "totalAmount" : 400000000,
  "attachment" : "",
  "sender" : "3NydXoTq3UgUW5rxsNwEMs1iwbbvVEwxoHU",
  "feeAssetId" : "8bec1mhqTiveMeRTHgYr6az12XdqBBtpeV3ZpXMRHfSB",
  "proofs" : [ "21hhAMmwze6nLLQ9K6AoU6scek9Sk5KabR4VggGfdTVFHonfMGwVTse6qL2f8zR8DRm7RckMaikiYRt5XxWEKWcA" ],
  "assetId" : "8bec1mhqTiveMeRTHgYr6az12XdqBBtpeV3ZpXMRHfSB",
  "transfers" : [ {
    "recipient" : "3NqEjAkFVzem9CGa3bEPhakQc1Sm2G8gAFU",
    "amount" : 100000000
  }, {
    "recipient" : "3NzkzibVRkKUzaRzjUxndpTPvoBzQ3iLng3",
    "amount" : 100000000
  }, {
    "recipient" : "3Nnx8cX3UiyfQeC3YQKVRqVr2ewSxrvaDyB",
    "amount" : 100000000
  }, {
    "recipient" : "3NzC4Ex91VBQKfJHPiGhuPEomLg48NMi2ZF",
    "amount" : 100000000
  } ],
  "id" : "EvnxFxdYhYxHgQSMhkyLaqgyUDZdnBknfAWEXyqEHt97",
  "timestamp" : 1627643861044,
  "height" : 1076874
}

12. Data Transaction

Транзакция для добавления, изменения или удаления записей в хранилище данных адреса. В хранилище данных адреса представлены записи в формате «ключ:значение».

Размер хранилища данных адреса неограничен, однако при помощи одной транзакции данных можно внести до 100 новых пар «ключ:значение». Также байтовое представление транзакции после подписания не должно превышать 150 килобайт.

Если автор данных (адрес в поле author) совпадает с отправителем транзакции (адрес в поле sender), при подписании транзакции не требуется указывать параметр senderPublicKey.

Структура данных запроса на подписание транзакции:

Структуры данных транзакции

Подписание:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (12)

version

Byte

Версия транзакции

sender

ByteStr

Адрес отправителя транзакции

password

String

Пароль от ключевой пары в keystore ноды - опциональное поле

senderPublicKey

PublicKeyAccount

Открытый ключ отправителя транзакции

author

Byte

Адрес автора вносимых данных

data

List

Список данных

в который вносятся поля ``key: `` ``type: `` и ``value: `` через запятую

data.key

Byte

Ключ записи

data.type

Byte

Тип данных записи. Возможные значения: binary bool integer string и null (удаление записи по ее ключу)

data.value

Byte

Значение записи

fee

Long

Комиссия за транзакцию в WE Mainnet

Публикация:

Поле

Тип данных

Описание

senderPublicKey

PublicKeyAccount

Открытый ключ отправителя транзакции

senderPublicKey

PublicKeyAccount

Открытый ключ автора данных

data

List

Список данных с полями ``key: `` ``type: `` и ``value: `` через запятую

data.key

Byte

Ключ записи

data.type

Byte

Тип данных записи. Возможные значения: binary bool integer string и null (удаление записи по ее ключу)

data.value

Byte

Значение записи

sender

ByteStr

Адрес отправителя транзакции

proofs

List(ByteStr)

Массив подтверждений транзакции (в формате base58)

author

Byte

Адрес автора вносимых данных

fee

Long

Комиссия за транзакцию в WE Mainnet

id

Byte

ID транзакции с данными

type

Byte

Номер транзакции (12)

version

Byte

Версия транзакции

timestamp

Long

Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле

Пример заполнения поля data:

"data": [
      {
       "key": "objectId",
       "type": "string",
       "value": "obj:123:1234"
      }, {...}
     ]

JSON-представление:

Подписание:

{
    "type": 12,
    "version": 2,
    "sender": "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx",
    "password": "",
    "senderPublicKey": "7GiFGcGaEN87ycK8v71Un6b7RUoeKBU4UvUHPYbeHaki",
    "author": "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx",
    "data": [
      ...
    ],
    "fee": 150000000
}

Публикация:

{
  "senderPublicKey" : "7GiFGcGaEN87ycK8v71Un6b7RUoeKBU4UvUHPYbeHaki",
  "data" : [
    ...
  ],
  "author" : "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx",
  "fee" : 150000000,
  "type" : 12,
  "version" : 2,
  "authorPublicKey" : "7GiFGcGaEN87ycK8v71Un6b7RUoeKBU4UvUHPYbeHaki",
  "sender" : "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx",
  "feeAssetId" : null,
  "proofs" : [ "4wFNmn32NZqGwP4D4aAxCMyigGEVZLWftqi919pHAK7mCj3sFw7Ekf76g2rr51PZuk5sLwzjkKiZArQvWY8uEGqk" ],
  "id" : "GcDy84oTFf5NQzDtixkfUqiFNZwMaN2vfXqxsbGxumfo",
  "timestamp" : 1619187166499,
  "height" : 861644
}

13. SetScript Transaction

Транзакция для привязки скрипта к аккаунту или удаления скрипта. Аккаунт с привязанным к нему скриптом называется смарт-аккаунтом.

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

Структуры данных транзакции

Подписание:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (13)

version

Byte

Версия транзакции

sender

ByteStr

Адрес отправителя транзакции

password

String

Пароль от ключевой пары в keystore ноды - опциональное поле

fee

Long

Комиссия за транзакцию в WE Mainnet

name

Array[Byte]

Имя скрипта

script

Array[Byte]

Скомпилированный скрипт в формате base64. Если вы оставите это поле пустым (null) - скрипт будет отвязан от аккаунта

Публикация:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (13)

id

Byte

ID транзакции установки скрипта

sender

ByteStr

Адрес отправителя транзакции

senderPublicKey

PublicKeyAccount

Открытый ключ отправителя транзакции

fee

Long

Комиссия за транзакцию в WE Mainnet

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

Высота выполнения транзакции

JSON-представление:

Подписание:

{
    "type": 13,
    "version": 1,
    "sender": "3N9vL3apA4j2L5PojHW8TYmfHx9Lo2ZaKPB",
    "password": "",
    "fee": 1000000,
    "name": "faucet",
    "script": "base64:AQQAAAAHJG1hdGNoMAUAAAACdHgG+RXSzQ=="
}

Публикация:

{
    "type": 13,
    "id": "HPDypnQJHJskN8kwszF8rck3E5tQiuiM1fEN42w6PLmt",
    "sender": "3N9vL3apA4j2L5PojHW8TYmfHx9Lo2ZaKPB",
    "senderPublicKey": "Fbt5fKHesnQG2CXmsKf4TC8v9oB7bsy2AY56CUopa6H3",
    "fee": 1000000,
    "timestamp": 1545986757233,
    "proofs": [ "2QiGYS2dqh8QyN7Vu2tAYaioX5WM6rTSDPGbt4zrWS7QKTzojmR2kjppvGNj4tDPsYPbcDunqBaqhaudLyMeGFgG" ],
    "chainId": 84,
    "version": 1,
    "script": "base64:AQQAAAAHJG1hdGNoMAUAAAACdHgG+RXSzQ==",
    "name": "faucet",
    "description": "",
    "height": 3805
}

14. Sponsorship Transaction

Транзакция, устанавливающая или отменяющая спонсирование.

Механизм спонсирования позволяет адресам выплачивать комиссии за транзакции вызова скрипта и транзакции перевода в спонсорском ассете, заменяющем WEST.

Структуры данных транзакции

Подписание:

Поле

Тип данных

Описание

sender

ByteStr

Адрес отправителя транзакции

assetId

Byte

ID спонсорского ассета (токена) - опциональное поле

fee

Long

Комиссия за транзакцию в WE Mainnet

isEnabled

Bool

Установка спонсирования (true) или его отмена (false)

type

Byte

Номер транзакции (14)

password

String

Пароль от ключевой пары в keystore ноды - опциональное поле

version

Byte

Версия транзакции

Публикация:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (14)

id

Byte

ID транзакции спонсирования

sender

ByteStr

Адрес отправителя транзакции

senderPublicKey

PublicKeyAccount

Открытый ключ отправителя транзакции

fee

Long

Комиссия за транзакцию в WE Mainnet

assetId

Byte

ID спонсорского ассета (токена) - опциональное поле

timestamp

Long

Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле

proofs

List(ByteStr)

Массив подтверждений транзакции (в формате base58)

chainId

Byte

Идентификационный байт сети (Mainnet - 87 или V)

version

Byte

Версия транзакции

isEnabled

Bool

Установка спонсирования (true) или его отмена (false)

height

Byte

Высота выполнения транзакции

JSON-представление:

Подписание:

{
    "sender": "3JWDUsqyJEkVa1aivNPP8VCAa5zGuxiwD9t",
    "assetId": "G16FvJk9vabwxjQswh9CQAhbZzn3QrwqWjwnZB3qNVox",
    "fee": 100000000,
    "isEnabled": false,
    "type": 14,
    "password": "1234",
    "version": 1
}

Публикация:

{
    "type": 14,
    "id": "Ht6kpnQJHJskN8kwszF8rck3E5tQiuiM1fEN42wGfdk7",
    "sender": "3JWDUsqyJEkVa1aivNPP8VCAa5zGuxiwD9t",
    "senderPublicKey": "Gt55fKHesnQG2CXmsKf4TC8v9oB7bsy2AY56CUophy89",
    "fee": 100000000,
    "assetId": "G16FvJk9vabwxjQswh9CQAhbZzn3QrwqWjwnZB3qNVox",
    "timestamp": 1545986757233,
    "proofs": [ "5TfgYS2dqh8QyN7Vu2tAYaioX5WM6rTSDPGbt4zrWS7QKTzojmR2kjppvGNj4tDPsYPbcDunqBaqhaudLyMeGFh7" ],
    "chainId": 84,
    "version": 1,
    "isEnabled": false,
    "height": 3865
}

15. SetAssetScript Transaction

Транзакция для установки или удаления скрипта ассета для адреса. Скрипт ассета позволяет верифицировать транзакции с участием того или иного ассета (токена) без использования механизма верификации транзакций блокчейна.

Структуры данных транзакции

Подписание:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (15)

version

Byte

Версия транзакции скрипта ассета

sender

ByteStr

Адрес отправителя транзакции

password

String

Пароль от ключевой пары в keystore ноды - опциональное поле

fee

Long

Комиссия за транзакцию в WE Mainnet

script

Array[Byte]

Скомпилированный скрипт в формате base64 - опциональное поле

assetId

Byte

ID спонсорского ассета (токена) - опциональное поле

Публикация:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (15)

id

Byte

ID транзакции скрипта ассета

sender

ByteStr

Адрес отправителя транзакции

senderPublicKey

PublicKeyAccount

Открытый ключ отправителя транзакции

fee

Long

Комиссия за транзакцию в WE Mainnet

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

Высота выполнения транзакции

JSON-представление:

Подписание:

{
    "type": 15,
    "version": 1,
    "sender": "3N9vL3apA4j2L5PojHW8TYmfHx9Lo2ZaKPB",
    "password": "",
    "fee": 100000000,
    "script": "base64:AQQAAAAHJG1hdGNoMAUAAAACdHgG+RXSzQ==",
    "assetId": "7bE3JPwZC3QcN9edctFrLAKYysjfMEk1SDjZx5gitSGg"
}

Публикация:

{
    "type": 15,
    "id": "CQpEM9AEDvgxKfgWLH2HxE82iAzpXrtqsDDcgZGPAF9J",
    "sender": "3N65yEf31ojBZUvpu4LCo7n8D73juFtheUJ",
    "senderPublicKey": "C1ADP1tNGuSLTiQrfNRPhgXx59nCrwrZFRV4AHpfKBpZ",
    "fee": 100000000,
    "timestamp": 1549448710502,
    "proofs": [ "64eodpuXQjaKQQ4GJBaBrqiBtmkjSxseKC97gn6EwB5kZtMr18mAUHPRkZaHJeJxaDyLzGEZKqhYoUknWfNhXnkf" ],
    "version": 1,
    "chainId": 84,
    "assetId": "DnK5Xfi2wXUJx9BjK9X6ZpFdTLdq2GtWH9pWrcxcmrhB",
    "script": "base64:AQQAAAAHJG1hdGNoMAUAAAACdHgG+RXSzQ==",
    "height": 61895
}

101. GenesisPermission Transaction

Транзакция для назначения первого администратора сети, который раздает роли другим участникам.

Структуры данных транзакции

Подписание:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (101)

id

Byte

ID транзакции

fee

Long

Комиссия за транзакцию в WE Mainnet

timestamp

Long

Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле

signature

ByteStr

Подпись транзакции (в формате base58)

target

ByteStr

Адрес назначаемого первого администратора

role

String

Назначаемая роль (для администратора - permissioner)

Публикация:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (101)

timestamp

Long

Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле

target

ByteStr

Адрес назначаемого первого администратора

role

String

Назначаемая роль (для администратора - permissioner)

102. Permission Transaction

Выдача или отзыв роли участника. Отправлять транзакцию 102 в блокчейн может только участник с ролью permissioner.

Возможные роли для указания в поле role:

  • permissioner

  • sender

  • blacklister

  • miner

  • issuer

  • contract_developer

  • connection_manager

  • contract_validator

  • banned

Описание ролей см. в статье Роли участников.

Структуры данных транзакции

Подписание:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (102)

sender

ByteStr

Адрес отправителя транзакции

password

String

Пароль от ключевой пары в keystore ноды - опциональное поле

senderPublicKey

PublicKeyAccount

Открытый ключ отправителя транзакции

fee

Long

Комиссия за транзакцию в WE Mainnet

target

ByteStr

Адрес участника для назначения роли

opType

String

Тип операции: add - добавить роль; remove - отозвать роль

dueTimestamp

Long

Временная метка срока действия роли в формате Unix Timestamp (в миллисекундах) - опциональное поле

version

Byte

Версия транзакции

Публикация:

Поле

Тип данных

Описание

senderPublicKey

PublicKeyAccount

Открытый ключ отправителя транзакции

role

String

Назначаемая роль (для администратора - permissioner)

sender

ByteStr

Адрес отправителя транзакции

proofs

List(ByteStr)

Массив подтверждений транзакции (в формате base58)

fee

Long

Комиссия за транзакцию в WE Mainnet

opType

String

Тип операции: add - добавить роль; remove - отозвать роль

id

Byte

ID транзакции назначения или отмены роли

type

Byte

Номер транзакции (102)

dueTimestamp

Long

Временная метка срока действия роли в формате Unix Timestamp (в миллисекундах) - опциональное поле

timestamp

Long

Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле

target

ByteStr

Адрес назначаемого первого администратора

JSON-представление:

Подписание:

{
   "type": 102,
   "sender": "3GLWx8yUFcNSL3DER8kZyE4TpyAyNiEYsKG",
   "password": "",
   "senderPublicKey": "4WnvQPit2Di1iYXDgDcXnJZ5yroKW54vauNoxdNeMi2g",
   "fee": 0,
   "target": "3GPtj5osoYqHpyfmsFv7BMiyKsVzbG1ykfL",
   "opType": "add",
   "role": "contract_developer",
   "dueTimestamp": null,
   "version": 1,
 }

Публикация:

{
  "senderPublicKey": "4WnvQPit2Di1iYXDgDcXnJZ5yroKW54vauNoxdNeMi2g",
  "role": "contract_developer",
  "sender": "3GLWx8yUFcNSL3DER8kZyE4TpyAyNiEYsKG",
  "proofs": [
    "5ABJCRTKGo6jmDZCRWcLQc257CCeczmcjmtfJmbBE7TP3KsVkwvisH9kEkfYPckVCzEMKZTCd3LKAPcN8o4Git3j"
  ],
  "fee": 0,
  "opType": "add",
  "id": "8zVUH7nsDCcpwyfxiq8DCTgqL7Q23FW1KWepB9EZcFG6",
  "type": 102,
  "dueTimestamp": null,
  "timestamp": 1559048837487,
  "target": "3GPtj5osoYqHpyfmsFv7BMiyKsVzbG1ykfL"
}

103. CreateContract Transaction

Создание смарт-контракта. Байтовое представление этой транзакции после ее подписания не должно превышать 150 килобайт.

Поле feeAssetId этой транзакции опционально и используется только для смарт-контрактов с поддержкой gRPC. Значение поля version для этого типа смарт-контрактов - 2.

Подписание транзакции 103 может производиться только пользователем с ролью contract_developer.

Структуры данных транзакции

Подписание:

Поле

Тип данных

Описание

fee

Long

Комиссия за транзакцию в WE Mainnet

image

Array[Bytes]

Имя Docker-образа смарт-контракта

imageHash

Array[Bytes]

Хэш Docker-образа смарт-контракта

contractName

Array[Bytes]

Имя смарт-контракта (при загрузке из предустановленного репозитория) или его полный адрес (если репозиторий смарт-контракта не указан в конфигурационном файле ноды)

sender

ByteStr

Адрес отправителя транзакции

password

String

Пароль от ключевой пары в keystore ноды - опциональное поле

params

List[DataEntry[_]]

Входные и выходные данные смарт-контракта. Вносятся при помощи полей type value и key через запятую - опциональное поле

params.key

Byte

Ключ параметра

params.type

Byte

Тип данных параметра. Возможные значения: binary bool integer string

params.value

Byte

Значение параметра

type

Byte

Номер транзакции (103)

version

Byte

Версия транзакции

apiVersion

Byte

Версия API для gRPC-методов смарт-контракта (см. Сервисы gRPC используемые смарт-контрактом).

validationPolicy.type

String

Тип политики валидации смарт-контрактов.

Публикация:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (103)

id

Byte

ID транзакции создания контракта

sender

ByteStr

Адрес отправителя транзакции

senderPublicKey

PublicKeyAccount

Открытый ключ отправителя транзакции

fee

Long

Комиссия за транзакцию в WE Mainnet

timestamp

Long

Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле

proofs

List(ByteStr)

Массив подтверждений транзакции (в формате base58)

version

Byte

Версия транзакции

image

Array[Bytes]

Имя смарт-контракта (при загрузке из предустановленного репозитория) или его полный адрес (если репозиторий смарт-контракта не указан в конфигурационном файле ноды)

imageHash

Array[Bytes]

Хэш Docker-образа смарт-контракта

contractName

Array[Bytes]

Имя смарт-контракта

params

List[DataEntry[_]]

Входные и выходные данные смарт-контракта. Вносятся при помощи полей type value и key через запятую - опциональное поле

params.key

Byte

Ключ параметра

params.type

Byte

Тип данных параметра. Возможные значения: binary bool integer string

params.value

Byte

Значение параметра

height

Byte

Высота выполнения транзакции

apiVersion

Byte

Версия API для gRPC-методов смарт-контракта (см. Сервисы gRPC используемые смарт-контрактом).

validationPolicy.type

String

Тип политики валидации смарт-контрактов.

JSON-представление:

Подписание:

{
  "fee": 100000000,
  "image": "stateful-increment-contract:latest",
  "imageHash": "7d3b915c82930dd79591aab040657338f64e5d8b842abe2d73d5c8f828584b65",
  "contractName": "stateful-increment-contract",
  "sender": "3PudkbvjV1nPj1TkuuRahh4sGdgfr4YAUV2",
  "password": "",
  "params": [],
  "type": 103,
  "version": 2
 }

Публикация:

{
  "senderPublicKey": "4WnvQPit2Di1iYXDgDcXnJZ5yroKW54vauNoxdNeMi2g",
  "role": "contract_developer",
  "sender": "3GLWx8yUFcNSL3DER8kZyE4TpyAyNiEYsKG",
  "proofs": [
    "5ABJCRTKGo6jmDZCRWcLQc257CCeczmcjmtfJmbBE7TP3KsVkwvisH9kEkfYPckVCzEMKZTCd3LKAPcN8o4Git3j"
  ],
  "fee": 0,
  "opType": "add",
  "id": "8zVUH7nsDCcpwyfxiq8DCTgqL7Q23FW1KWepB9EZcFG6",
  "type": 102,
  "dueTimestamp": null,
  "timestamp": 1559048837487,
  "target": "3GPtj5osoYqHpyfmsFv7BMiyKsVzbG1ykfL"
}

Подписание:

{
  "fee": 100000000,
  "image": "registry.wvservices.com/vostok-sc/python_grpc_contract:slim",
  "imageHash": "c878d358a7ba88638a40d4474874ec76261fdaf7d96b79a15145d3cb988ca9b7",
  "contractName": "test v3 on 1.6.2",
  "sender": "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
  "password": "",
  "params": [],
  "type": 103,
  "version": 3,
  "atomicBadge" : null
 }

Публикация:

{
  "senderPublicKey" : "CgqRPcPnexY533gCh2SSvBXh5bca1qMs7KFGntawHGww",
  "image" : "registry.wvservices.com/vostok-sc/python_grpc_contract:slim",
  "fee" : 100000000,
  "imageHash" : "c878d358a7ba88638a40d4474874ec76261fdaf7d96b79a15145d3cb988ca9b7",
  "type" : 103,
  "params" : [ ],
  "version" : 3,
  "atomicBadge" : null,
  "sender" : "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
  "feeAssetId" : null,
  "proofs" : [ "3Ya5JzfRZSyqyMvJZgbC7PuyZB8Hii2NaG1UGvPUjoRDnheENbz6b46Cdh9F91QaGyBdJ9kN67XD1mVQ6kVrCU48" ],
  "contractName" : "test v3 on 1.6.2",
  "id" : "2bYS2gZ2CjE92yFf731CcVWXtjiBPrRKDQry1Wcz9yfJ",
  "timestamp" : 1625736026131,
  "height" : 1028223
}

Подписание:

{
   "type": 102,
   "sender": "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
   "password": "",
   "senderPublicKey": "CgqRPcPnexY533gCh2SSvBXh5bca1qMs7KFGntawHGww",
   "fee": 0,
   "target": "3GPtj5osoYqHpyfmsFv7BMiyKsVzbG1ykfL",
   "opType": "add",
   "role": "contract_developer",
   "dueTimestamp": null,
   "version": 4,
  "atomicBadge" : null
 }

Публикация:

{
  "senderPublicKey" : "CgqRPcPnexY533gCh2SSvBXh5bca1qMs7KFGntawHGww",
  "image" : "vostok-sc/grpc_validatable_statefull:0.1",
  "fee" : 100000000,
  "imageHash" : "ad6d0f8a61222794da15571749bc9db08e76b6a120fc1db90e393fc0ee9540d8",
  "type" : 103,
  "params" : [ {
    "type" : "string",
    "value" : "",
    "key" : "data"
  }, {
    "type" : "integer",
    "value" : 500,
    "key" : "length"
  } ],
  "version" : 4,
  "atomicBadge" : null,
  "apiVersion" : "1.0",
  "sender" : "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
  "feeAssetId" : null,
  "proofs" : [ "L521YncSMJDPqwBjQyS7m7Q6tseAw51nYE8iiPChEALx7S2WvpSosCVtWkXxh2ZqJ6LHkCvjVjRVuVs793kzjw8" ],
  "contractName" : "grpc_validatable_statefull here_often",
  "id" : "HSLdKYqLq4LcZpq9LPki8Yv4ZRkFapVyHEYw1vZW2MoG",
  "validationPolicy" : {
    "type" : "any"
  },
  "timestamp" : 1625732696641,
  "height" : 1028130
}

В версии 4 данной транзакции настраивается валидация результатов исполнения обновляемого смарт-контракта при помощи поля validationPolicy.type (см. раздел Валидация смарт-контрактов). Варианты политик валидации:

  • any – сохраняется действующая в сети общая политика валидации: для майнинга загружаемого смарт-контракта, майнер подписывает соответствующую транзакцию 105. Также этот параметр устанавливается, если в вашей сети нет ни одного зарегистрированного валидатора.

  • majority – транзакция считается валидной, если она подтверждена большинством валидаторов: 2/3 от общего числа зарегистрированных адресов с ролью contract_validator.

  • majorityWithOneOf(List[Address]) – транзакция считается валидной, если собрано большинство валидаторов, среди которых присутствует хотя бы один из адресов, включенных в список параметра. Адреса, включаемые в список, должны иметь действующую роль contract_validator.

Предупреждение

При выборе политики валидации majorityWithOneOf(List[Address]), заполните список адресов, передача пустого списка запрещена.

При работе в частной сети транзакция 103 предусматривает загрузку Docker-образа контракта не только из репозиториев, указанных в секции docker-engine конфигурационного файла ноды. Если вам необходимо загрузить смарт-контракт из репозитория, не внесенного в конфигурационный файл, укажите в поле name транзакции полный адрес смарт-контракта в созданном вами репозитории.

Пример запроса на публикацию смарт-контракта из непредустановленного репозитория:

{
  "senderPublicKey" : "CgqRPcPnexY533gCh2SSvBXh5bca1qMs7KFGntawHGww",
  "image": "customregistry.com:5000/stateful-increment-contract:latest",
  "fee" : 100000000,
  "imageHash" : "ad6d0f8a61222794da15571749bc9db08e76b6a120fc1db90e393fc0ee9540d8",
  "type" : 103,
  "params" : [ {
    "type" : "string",
    "value" : "Value_here",
    "key" : "data"
  }, {
    "type" : "integer",
    "value" : 500,
    "key" : "length"
  } ],
  "version" : 4,
  "atomicBadge" : null,
  "apiVersion" : "1.0",
  "sender" : "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
  "feeAssetId" : null,
  "proofs" : [ "L521YncSMJDPqwBjQyS7m7Q6tseAw51nYE8iiPChEALx7S2WvpSosCVtWkXxh2ZqJ6LHkCvjVjRVuVs793kzjw8" ],
  "contractName" : "grpc_validatable_statefull here_often",
  "id" : "HSLdKYqLq4LcZpq9LPki8Yv4ZRkFapVyHEYw1vZW2MoG",
  "validationPolicy" : {
    "type" : "any"
  },
  "timestamp" : 1625732696641,
  "height" : 1028130
}

104. CallContract Transaction

Вызов смарт-контракта на исполнение. Байтовое представление этой транзакции после ее подписания не должно превышать 150 килобайт.

Подписание транзакции производится инициатором исполнения контракта.

В поле contractVersion транзакции указывается версия контракта:

  • 1 - для нового контракта;

  • 2 - для обновленного контракта.

Данное поле доступно только для транзакций второй версии и старше: если в поле version транзакции создания смарт-контракта указано значение >= 2. Контракт обновляется при помощи транзакции 107.

Если контракт не выполнился или выполнился с ошибкой, то транзакции 103 и 104 удаляются и не попадают в блок.

Структуры данных транзакции

Подписание:

Поле

Тип данных

Описание

contractId

ByteStr

ID смарт-контракта

fee

Long

Комиссия за транзакцию в WE Mainnet

sender

ByteStr

Адрес отправителя транзакции

password

String

Пароль от ключевой пары в keystore ноды - опциональное поле

type

Byte

Номер транзакции (104)

params

List[DataEntry[_]]

Входные и выходные данные смарт-контракта. Вносятся при помощи полей type value и key через запятую - опциональное поле

params.key

Byte

Ключ параматра

params.type

Byte

Тип данных параметра. Возможные значения: binary bool integer string

params.value

Byte

Значение параметра

version

Byte

Версия транзакции

Публикация:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (104)

id

Byte

ID транзакции вызова контракта

sender

ByteStr

Адрес отправителя транзакции

senderPublicKey

PublicKeyAccount

Открытый ключ отправителя транзакции

fee

Long

Комиссия за транзакцию в WE Mainnet

timestamp

Long

Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле

proofs

List(ByteStr)

Массив подтверждений транзакции (в формате base58)

version

Byte

Версия транзакции

contractId

ByteStr

ID смарт-контракта

params

List[DataEntry[_]]

Входные и выходные данные смарт-контракта. Вносятся при помощи полей type value и key через запятую - опциональное поле

params.key

Byte

Ключ параметра

params.type

Byte

Тип данных параметра. Возможные значения: binary bool integer string

params.value

Byte

Значение параметра

JSON-представление:

Подписание:

{
    "contractId": "2sqPS2VAKmK77FoNakw1VtDTCbDSa7nqh5wTXvJeYGo2",
    "fee": 10,
    "sender": "3PKyW5FSn4fmdrLcUnDMRHVyoDBxybRgP58",
    "password": "",
    "type": 104,
    "params":
    [
        {
           "type": "integer",
           "key": "a",
           "value": 1
        },
        {
           "type": "integer",
           "key": "b",
           "value": 100

        }
    ],
    "version": 2,
    "contractVersion": 1
}

Публикация:

{
    "type": 104,
    "id": "9fBrL2n5TN473g1gNfoZqaAqAsAJCuHRHYxZpLexL3VP",
    "sender": "3PKyW5FSn4fmdrLcUnDMRHVyoDBxybRgP58",
    "senderPublicKey": "2YvzcVLrqLCqouVrFZynjfotEuPNV9GrdauNpgdWXLsq",
    "fee": 10,
    "timestamp": 1549365736923,
    "proofs": [ "2q4cTBhDkEDkFxr7iYaHPAv1dzaKo5rDaTxPF5VHryyYTXxTPvN9Wb3YrsDYixKiUPXBnAyXzEcnKPFRCW9xVp4v" ],
    "version": 2,
    "contractVersion": 1,
    "contractId": "2sqPS2VAKmK77FoNakw1VtDTCbDSa7nqh5wTXvJeYGo2",
    "params":
    [
        {
        "key": "a",
        "type": "integer",
        "value": 1
        },
        {
        "key": "b",
        "type": "integer",
        "value": 100
        }
    ]
}

Подписание:

{
    "contractId": "Dgk1hR7xRnDT1KJreaXCVtZLrnd5LJ8uUYtoZyQrV1LJ",
    "fee": 10000000,
    "sender": "3NpkC1FSW9xNfmAMuhRSRArLgnfyGyEry7w",
    "password": "",
    "type": 104,
    "params":
    [ {
      "type" : "string",
      "value" : "value",
      "key" : "data"
    }, {
      "type" : "integer",
      "value" : 500,
      "key" : "length"
    } ],
    "version": 3,
    "contractVersion": 1,
}

Публикация:

{
  "senderPublicKey" : "9Kgnqqxr5MU3PNrLgf1dkZL2HH6LBktB5Pv9L1cVELi1",
  "fee" : 10000000,
  "type" : 104,
  "params" : [ {
    "type" : "string",
    "value" : "data_response",
    "key" : "action"
  }, {
    "type" : "string",
    "value" : "000008_regular_data_request_2m3SgcnQz9LXVi9ETy3CFHVGM1EyiqJi3vvRRQUM3oPp",
    "key" : "request_id"
  }, {
    "type" : "string",
    "value" : "76.33",
    "key" : "value"
  }, {
    "type" : "string",
    "value" : "1627678789267",
    "key" : "timestamp"
  } ],
  "version" : 3,
  "contractVersion" : 1,
  "sender" : "3NpkC1FSW9xNfmAMuhRSRArLgnfyGyEry7w",
  "feeAssetId" : null,
  "proofs" : [ "4aanqYjaTVNot8Fbz5ixjwKSdqS5x3DdvzxQ4WsTaPcftYdoFx99xwLC3UPN91VAtez4RTMzaYb1TECaVxHHT9AH" ],
  "contractId" : "Dgk1hR7xRnDT1KJreaXCVtZLrnd5LJ8uUYtoZyQrV1LJ",
  "id" : "55imLuEXyVpBXb1S64R5PRx9acQQHaEATPwYwUVpqjAT",
  "timestamp" : 1627678789267,
  "height" : 1076064
}

Подписание:

{
    "contractId": "HSLdKYqLq4LcZpq9LPki8Yv4ZRkFapVyHEYw1vZW2MoG",
    "fee": 10000000,
    "sender": "3PKyW5FSn4fmdrLcUnDMRHVyoDBxybRgP58",
    "password": "",
    "type": 104,
    "params":
    [ {
      "type" : "string",
      "value" : "value",
      "key" : "data"
    }, {
      "type" : "integer",
      "value" : 500,
      "key" : "length"
    } ],
    "version": 4,
    "contractVersion": 3,
    "atomicBadge" : null
}

Публикация:

{
  "senderPublicKey" : "CgqRPcPnexY533gCh2SSvBXh5bca1qMs7KFGntawHGww",
  "fee" : 10000000,
  "type" : 104,
  "params" : [ {
    "type" : "string",
    "value" : "value",
    "key" : "data"
  }, {
    "type" : "integer",
    "value" : 500,
    "key" : "length"
  } ],
  "version" : 4,
  "contractVersion" : 3,
  "atomicBadge" : null,
  "sender" : "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
  "feeAssetId" : null,
  "proofs" : [ "2bpALen4diR7DTFhNQCrZKPueCPds2gFFPxe1KVzQwfRuGaK6QfvtpN8oqaZMsStoEHAa5DrTkKM8AuzHPYyMPVP" ],
  "contractId" : "HSLdKYqLq4LcZpq9LPki8Yv4ZRkFapVyHEYw1vZW2MoG",
  "id" : "GBfibn8VjGmDS9ex4Nd4JNRLvDyvJjj8jLUUcbYwFTCf",
  "timestamp" : 1625732766458,
  "height" : 1028132
}

105. ExecutedContract Transaction

Запись результата исполнения смарт-контракта в его стейт. Байтовое представление этой транзакции после ее подписания не должно превышать 150 килобайт.

Транзакция 105 содержит все поля (тело) транзакции 103, 104 или 107 смарт-контракта, результат исполнения которого необходимо записать в его стейт (поле tx). Результат исполнения смарт-контракта вносится в его стейт из соответствующих параметров поля params транзакции 103 или 104.

Подписание транзакции производится нодой, формирующей блок после отправки запроса на публикацию транзакции.

Структура данных на публикацию транзакции

Поле

Тип данных

Описание

type

Byte

Номер транзакции (105)

id

Byte

ID транзакции исполнения контракта

sender

ByteStr

Адрес отправителя транзакции

senderPublicKey

PublicKeyAccount

Открытый ключ отправителя транзакции

password

String

Пароль от ключевой пары в keystore ноды - опциональное поле

fee

Long

Комиссия за транзакцию в WE Mainnet

timestamp

Long

Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле

proofs

List(ByteStr)

Массив подтверждений транзакции (в формате base58)

version

Byte

Версия транзакции

tx

Array

Тело транзакции 103 или 104 исполняемого смарт-контракта

results

List[DataEntry[_]]

Список возможных результатов исполнения смарт-контракта

height

Byte

Высота выполнения транзакции

JSON-представление:

Публикация:

{
    "type": 105,
    "id": "38GmSVC5s8Sjeybzfe9RQ6p1Mb6ajb8LYJDcep8G8Umj",
    "sender": "3N3YTj1tNwn8XUJ8ptGKbPuEFNa9GFnhqew",
    "senderPublicKey": "3kW7vy6nPC59BXM67n5N56rhhAv38Dws5skqDsjMVT2M",
    "password": "",
    "fee": 500000,
    "timestamp": 1550591780234,
    "proofs": [ "5whBipAWQgFvm3myNZe6GDd9Ky8199C9qNxLBHqDNmVAUJW9gLf7t9LBQDi68CKT57dzmnPJpJkrwKh2HBSwUer6" ],
    "version": 2,
    "tx":
         {
            "type": 103,
            "id": "ULcq9R7PvUB2yPMrmBdxoTi3bcRmQPT3JDLLLZVj4Ky",
            "sender": "3N3YTj1tNwn8XUJ8ptGKbPuEFNa9GFnhqew",
            "senderPublicKey": "3kW7vy6nPC59BXM67n5N56rhhAv38Dws5skqDsjMVT2M",
            "fee": 500000,
            "timestamp": 1550591678479,
            "proofs": [ "yecRFZm9iBLyDy93bDVaNo1PR5Qkkic7196GAgUt9TNH1cnQphq4yGQQ8Fxj4BYA4TaqYVw5qxtWzGMPQyVeKYv" ],
            "version": 2,
            "image": "stateful-increment-contract:latest",
            "imageHash": "7d3b915c82930dd79591aab040657338f64e5d8b842abe2d73d5c8f828584b65",
            "contractName": "stateful-increment-contract",
            "params": [],
            "height": 1619
          },
    "results": [],
    "height": 1619,
    "atomicBadge" : null
}

106. DisableContract Transaction

Отключение смарт-контракта. Байтовое представление этой транзакции после ее подписания не должно превышать 150 килобайт.

Подписание транзакции 106 может производиться только пользователем с ролью contract_developer.

Структуры данных транзакции

Подписание:

Поле

Тип данных

Описание

sender

ByteStr

Адрес отправителя транзакции

password

String

Пароль от ключевой пары в keystore ноды - опциональное поле

contractId

ByteStr

ID смарт-контракта

fee

Long

Комиссия за транзакцию в WE Mainnet

type

Byte

Номер транзакции (106)

version

Byte

Версия транзакции

Публикация:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (106)

id

Byte

ID транзакции отключения контракта

sender

ByteStr

Адрес отправителя транзакции

senderPublicKey

PublicKeyAccount

Открытый ключ отправителя транзакции

fee

Long

Комиссия за транзакцию в WE Mainnet

proofs

List(ByteStr)

Массив подтверждений транзакции (в формате base58)

version

Byte

Версия транзакции

contractId

ByteStr

ID смарт-контракта

height

Byte

Высота выполнения транзакции

JSON-представление:

Подписание:

{
    "sender": "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
    "password": "",
    "contractId": "HKftkVDTcQp6kxdqVYNdzB9d4rhND4YRKxwJV1thMXcr",
    "fee": 1000000,
    "type": 106,
    "version": 2,
}

Публикация:

{
  "senderPublicKey" : "CgqRPcPnexY533gCh2SSvBXh5bca1qMs7KFGntawHGww",
  "sender" : "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
  "feeAssetId" : "7QpXWLGuaspzrMsESRaHTgksndq5mcvfbVrqBTuLbxuy",
  "proofs" : [ "3FKPGT8YbLVun5cffZi1sHkgr9JZVxkeN7z2kUqDVLfhB5CwMtCAfyStRz1tpZuriKsR3MaBqNfReGx5sM2qey8i" ],
  "fee" : 1000000,
  "contractId" : "HKftkVDTcQp6kxdqVYNdzB9d4rhND4YRKxwJV1thMXcr",
  "id" : "5hXuHs5HVhZSfek153t76HfW6egmCLdZmi5AeFzYBFN",
  "type" : 106,
  "version" : 2,
  "timestamp" : 1625648619321,
  "height" : 1025992
}

Подписание:

{
    "sender": "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
    "password": "",
    "contractId": "75PumcfCVxzV3v7RAPYQUwCtSpU21hxfaWFhureCRTLM",
    "fee": 1000000,
    "type": 106,
    "version": 3,
  "atomicBadge" : {
    "trustedSender" : "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx"
  }
}

Публикация:

{
  "senderPublicKey" : "7GiFGcGaEN87ycK8v71Un6b7RUoeKBU4UvUHPYbeHaki",
  "atomicBadge" : {
    "trustedSender" : "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx"
  },
  "sender" : "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx",
  "feeAssetId" : null,
  "proofs" : [ "22tK24qHhgbTDjtRmR86z3WeLLqLnqPvhUhQrz8ohfbCwQ9nrwmHESuT9aFuwABeBRJ7MfVob1FiJnqg3y2PHLSj" ],
  "fee" : 1000000,
  "contractId" : "75PumcfCVxzV3v7RAPYQUwCtSpU21hxfaWFhureCRTLM",
  "id" : "7opPrLd6x1hATRr9R5oXnEbYjYQzo5cn4Qpkiz12Mw9b",
  "type" : 106,
  "version" : 3,
  "timestamp" : 1619186857911,
  "height" : 861644
}

107. UpdateContract Transaction

Обновление кода смарт-контракта. Байтовое представление этой транзакции после ее подписания не должно превышать 150 килобайт.

Подписание транзакции 107, как и обновление смарт-контракта, может производиться только пользователем с ролью contract_developer.

Структуры данных транзакции

Подписание:

Поле

Тип данных

Описание

image

Array[Bytes]

Имя Docker-образа смарт-контракта

sender

ByteStr

Адрес отправителя транзакции

password

String

Пароль от ключевой пары в keystore ноды - опциональное поле

fee

Long

Комиссия за транзакцию в WE Mainnet

contractId

ByteStr

ID смарт-контракта

imageHash

Array[Bytes]

Хэш Docker-образа смарт-контракта

type

Byte

Номер транзакции (107)

version

Byte

Версия транзакции

apiVersion

Byte

Версия API для gRPC-методов смарт-контракта (см. Сервисы gRPC используемые смарт-контрактом).

validationPolicy.type

String

Тип политики валидации смарт-контрактов.

Публикация:

Поле

Тип данных

Описание

senderPublicKey

PublicKeyAccount

Открытый ключ отправителя транзакции

tx

Array

Тело транзакции 105 обновляемого контракта

JSON-представление:

Подписание:

 {
 "image" : "vostok-sc/grpc-contract-example:2.2-test-update",
 "sender" : "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
 "password": "",
 "fee" : 100000000,
 "contractId" : "BWzX4mRBEnHKgn3HB78My5DZzDAqnCLWCCNpCuRkZrJA",
 "imageHash" : "075ad1607f193cc6fdb5e85c201f9ca3907c622718d75706bbc2a94a330de5b5",
 "type" : 107,
 "version" : 2
}

Публикация:

{
  "senderPublicKey" : "CgqRPcPnexY533gCh2SSvBXh5bca1qMs7KFGntawHGww",
  "image" : "vostok-sc/grpc-contract-example:2.2-test-update",
  "fee" : 100000000,
  "imageHash" : "075ad1607f193cc6fdb5e85c201f9ca3907c622718d75706bbc2a94a330de5b5",
  "type" : 107,
  "version" : 2,
  "sender" : "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
  "feeAssetId" : null,
  "proofs" : [ "RetQwzuWZWxpSNMqwB7k7o6hSm6nhFCc49zKUpwZEedzBYcohj9NVEPwAbKLW9RzRKX168xApV7Nu2qV2jaHAMg" ],
  "contractId" : "BWzX4mRBEnHKgn3HB78My5DZzDAqnCLWCCNpCuRkZrJA",
  "id" : "6oopqcEf4AF943SCAqkBPrghyeQhmwn64TrhtCZbAn3v",
  "timestamp" : 1625649822957,
  "height" : 1026022
}

Подписание:

 {
 "image" : "registry.vostokservices.com/vostok-sc/grpc-contract-example:2.2-test-update",
 "sender" : "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
 "password": "",
 "fee" : 100000000,
 "contractId" : "HTqdjXUPTHZqGen2KKUkEenTELAqQ8irN58LA8EcP17q",
 "imageHash" : "075ad1607f193cc6fdb5e85c201f9ca3907c622718d75706bbc2a94a330de5b5",
 "type" : 107,
 "version" : 3,
 "atomicBadge" : null
}

Публикация:

{
  "senderPublicKey" : "7GiFGcGaEN87ycK8v71Un6b7RUoeKBU4UvUHPYbeHaki",
  "image" : "registry.vostokservices.com/vostok-sc/grpc-contract-example:2.2-test-update",
  "fee" : 100000000,
  "imageHash" : "075ad1607f193cc6fdb5e85c201f9ca3907c622718d75706bbc2a94a330de5b5",
  "type" : 107,
  "version" : 3,
  "atomicBadge" : null,
  "sender" : "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx",
  "feeAssetId" : null,
  "proofs" : [ "3ncWfFPqBAdgh65YceCCvF2RhUWWokQc9MsnHk27YLrYmPj9gWgrbRcousymJVA7ARFSz5UJcdW4Sa62FFhR5en3" ],
  "contractId" : "HTqdjXUPTHZqGen2KKUkEenTELAqQ8irN58LA8EcP17q",
  "id" : "B7qjgCa9N6M6FwV63PbLwvtVpFo4bzB5gRZzGjwJpKJV",
  "timestamp" : 1619187337697,
  "height" : 861650
}

Подписание:

 {
 "image" : "vostok-sc/grpc_validatable_stateless:0.1",
 "sender" : "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
 "password": "",
 "fee" : 100000000,
 "contractId" : "HSLdKYqLq4LcZpq9LPki8Yv4ZRkFapVyHEYw1vZW2MoG",
 "imageHash" : "bd98a7d3e55506ff936d8ea15e170a24d27662edd1b47e4fd20801d10655af8d",
 "type" : 107,
 "version" : 4,
 "atomicBadge" : null
}

Публикация:

{
  "senderPublicKey" : "CgqRPcPnexY533gCh2SSvBXh5bca1qMs7KFGntawHGww",
  "image" : "vostok-sc/grpc_validatable_stateless:0.1",
  "fee" : 100000000,
  "imageHash" : "bd98a7d3e55506ff936d8ea15e170a24d27662edd1b47e4fd20801d10655af8d",
  "type" : 107,
  "version" : 4,
  "atomicBadge" : null,
  "apiVersion" : "1.0",
  "sender" : "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
  "feeAssetId" : null,
  "proofs" : [ "fZr9LpqSWbPcUzArSZxFDEuygN62hR63j2Cz1GyTFxPNRrNvVwkDhTDcC8zwRp235gA1gSM8fvPps9mvPTWDQ4p" ],
  "contractId" : "HSLdKYqLq4LcZpq9LPki8Yv4ZRkFapVyHEYw1vZW2MoG",
  "id" : "HWZy7219Nx5oxj2QnK3ReEuZiqsjoULbmfdQz8YysFSz",
  "validationPolicy" : {
    "type" : "any"
  },
  "timestamp" : 1625732772746,
  "height" : 1028132
}

В версии 4 данной транзакции настраивается валидация результатов исполнения обновляемого смарт-контракта при помощи поля validationPolicy.type (см. раздел Валидация смарт-контрактов).

Варианты политик валидации:

  • any – сохраняется действующая в сети общая политика валидации: для майнинга обновляемого смарт-контракта майнер подписывает соответствующую транзакцию 105. Также этот параметр устанавливается, если в вашей сети нет ни одного зарегистрированного валидатора.

  • majority – транзакция считается валидной, если она подтверждена большинством валидаторов: 2/3 от общего числа зарегистрированных адресов с ролью contract_validator.

  • majorityWithOneOf(List[Address]) – транзакция считается валидной, если собрано большинство валидаторов, среди которых присутствует хотя бы один из адресов, включенных в список параметра. Адреса, включаемые в список, должны иметь действующую роль contract_validator.

Предупреждение

При выборе политики валидации majorityWithOneOf(List[Address]), заполните список адресов, передача пустого списка запрещена.

110. GenesisRegisterNode Transaction

Регистрация ноды в генезис-блоке при старте блокчейна.

Данная транзакция не требует подписания.

Структура данных на публикацию транзакции

Поле

Тип данных

Описание

type

Byte

Номер транзакции (110)

id

Byte

ID транзакции регистрации ноды в генезис-блоке

fee

Long

Комиссия за транзакцию в WE Mainnet

timestamp

Long

Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле

signature

ByteStr

Подпись транзакции (в формате base58)

version

Byte

Версия транзакции

targetPubKey

Byte

Публичный ключ регистрируемой ноды

height

Byte

Высота выполнения транзакции

111. RegisterNode Transaction

Регистрация новой ноды в блокчейне или ее удаление.

Структуры данных транзакции

Подписание:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (111)

opType

String

Тип операции: add - добавить ноду; remove - удалить ноду

sender

ByteStr

Адрес отправителя транзакции

password

String

Пароль от ключевой пары в keystore ноды - опциональное поле

targetPubKey

Byte

Публичный ключ регистрируемой или удаляемой ноды

NodeName

Byte

Имя ноды

fee

Long

Комиссия за транзакцию в WE Mainnet

Публикация:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (111)

id

Byte

ID транзакции регистрации ноды

sender

ByteStr

Адрес отправителя транзакции

senderPublicKey

PublicKeyAccount

Открытый ключ отправителя транзакции

fee

Long

Комиссия за транзакцию в WE Mainnet

timestamp

Long

Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле

proofs

List(ByteStr)

Массив подтверждений транзакции (в формате base58)

version

Byte

Версия транзакции

targetPubKey

Byte

Публичный ключ регистрируемой или удаляемой ноды

NodeName

Byte

Имя ноды

opType

String

Тип операции: add - добавить ноду; remove - удалить ноду

height

Byte

Высота выполнения транзакции

password

String

Пароль от ключевой пары в keystore ноды - опциональное поле

JSON-представление:

Подписание:

{
  "type": 111,
  "opType": "add",
  "sender":"3NgSJRdMYu4ZbNpSbyRNZLJDX926W7e1EKQ",
  "password": "",
  "targetPubKey": "6caEKC1UBgRvgAe9A7L5PWcrawrnEZGxtsXynGESwSj7",
  "nodeName": "GATEs node",
  "fee": 1100000,
}

Публикация:

{
    "senderPublicKey" : "FWz5gZ2w2ZxXbKEiwhgEcZKT4we1Wneh9XqmCeGPsA4r",
    "nodeName" : "GATEs node",
    "fee" : 1100000,
    "opType" : "add",
    "type" : 111,
    "version" : 1,
    "target" : "3NtieMGjVAH1nDsvnSEJ37BSW3hpJV2CneY",
    "sender" : "3NgSJRdMYu4ZbNpSbyRNZLJDX926W7e1EKQ",
    "proofs" : [ "FHEexr8MqMCkdqaVRrfxv7dnQFwo1VQxQFb4rW2VKh1NkuAhjhtzftKybBQCVbpKcCD1ZTRhwATpwERF9re2Viz" ],
    "id" : "6WnDGkBDeSjg5y6QqVdy3BFHUy5nnr4QsxZCeNXZtZoq",
    "targetPubKey" : "6caEKC1UBgRvgAe9A7L5PWcrawrnEZGxtsXynGESwSj7",
    "timestamp" : 1619078302988,
    "height" : 858895
}

112. CreatePolicy Transaction

Создание группы доступа к конфиденциальным данным из указанных адресов.

Структуры данных транзакции

Подписание:

Поле

Тип данных

Описание

sender

ByteStr

Адрес отправителя транзакции

policyName

String

Имя создаваемой группы доступа

password

String

Пароль от ключевой пары в keystore ноды - опциональное поле

recipients

Aray[Bytes]

Массив адресов участников группы доступа к конфиденциальным данным через запятую

fee

Long

Комиссия за транзакцию в WE Mainnet

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

Комиссия за транзакцию в WE Mainnet

timestamp

Long

Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле

proofs

List(ByteStr)

Массив подтверждений транзакции (в формате base58)

height

Byte

Высота выполнения транзакции

description

Array[byte]

Произвольное описание транзакции (в формате base58)

version

Byte

Версия транзакции

JSON-представление:

Подписание:

 {
    "sender": "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
    "policyName": "Policy# 7777",
    "password":"sfgKYBFCF@#$fsdf()%",
    "recipients": [
      "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
      "3NotQaBygbSvYZW4ftJ2ZwLXex4rTHY1Qzn",
      "3Nm84ERiJqKfuqSYxzMAhaJXdj2ugA7Ve7T",
          "3NtNJV44wyxRXv2jyW3yXLxjJxvY1vR88TF",
          "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx"
    ],
    "fee": 15000000,
    "description": "Buy bitcoin by 1c",
    "owners": [
      "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
      "3NotQaBygbSvYZW4ftJ2ZwLXex4rTHY1Qzn",
      "3Nm84ERiJqKfuqSYxzMAhaJXdj2ugA7Ve7T"
    ],
    "type": 112,
    "version": 2,
}

Публикация:

 {
    "sender": "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
    "policyName": "Policy# 7777",
    "password":"sfgKYBFCF@#$fsdf()%",
    "recipients": [
      "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
      "3NotQaBygbSvYZW4ftJ2ZwLXex4rTHY1Qzn",
      "3Nm84ERiJqKfuqSYxzMAhaJXdj2ugA7Ve7T",
          "3NtNJV44wyxRXv2jyW3yXLxjJxvY1vR88TF",
          "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx"
    ],
    "fee": 15000000,
    "description": "Buy bitcoin by 1c",
    "owners": [
      "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
      "3NotQaBygbSvYZW4ftJ2ZwLXex4rTHY1Qzn",
      "3Nm84ERiJqKfuqSYxzMAhaJXdj2ugA7Ve7T"
    ],
    "type": 112,
    "version": 2,
}

Подписание:

 {
    "sender": "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx",
    "policyName": "Policy_v3_for_demo_txs",
    "password":"sfgKYBFCF@#$fsdf()%",
    "recipients" : [ "3Nm84ERiJqKfuqSYxzMAhaJXdj2ugA7Ve7T", "3NtNJV44wyxRXv2jyW3yXLxjJxvY1vR88TF", "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx", "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d", "3NotQaBygbSvYZW4ftJ2ZwLXex4rTHY1Qzn" ],
    "fee": 100000000,
    "description": "",
    "owners" : [ "3Nm84ERiJqKfuqSYxzMAhaJXdj2ugA7Ve7T", "3NtNJV44wyxRXv2jyW3yXLxjJxvY1vR88TF", "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx", "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d", "3NotQaBygbSvYZW4ftJ2ZwLXex4rTHY1Qzn" ],
    "type": 112,
    "version": 3
}

Публикация:

{
    "senderPublicKey" : "7GiFGcGaEN87ycK8v71Un6b7RUoeKBU4UvUHPYbeHaki",
    "policyName" : "Policy_v3_for_demo_txs",
    "fee" : 100000000,
    "description" : "",
    "owners" : [ "3Nm84ERiJqKfuqSYxzMAhaJXdj2ugA7Ve7T", "3NtNJV44wyxRXv2jyW3yXLxjJxvY1vR88TF", "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx", "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d", "3NotQaBygbSvYZW4ftJ2ZwLXex4rTHY1Qzn" ],
    "type" : 112,
    "version" : 3,
    "atomicBadge" : null,
    "sender" : "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx",
    "feeAssetId" : null,
    "proofs" : [ "4NccZyPCgchDjeMdMmFKu7kxyU8AFF4e9cWaPFTQVQyYU1ZCCu3QmtmkfJkrDpDwGs4eJhYUVh5TnwYvjZYKPhLp" ],
    "recipients" : [ "3Nm84ERiJqKfuqSYxzMAhaJXdj2ugA7Ve7T", "3NtNJV44wyxRXv2jyW3yXLxjJxvY1vR88TF", "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx", "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d", "3NotQaBygbSvYZW4ftJ2ZwLXex4rTHY1Qzn" ],
    "id" : "5aYtmTr1AYYG8BrYvTTSqKzfJZxfgorx1BLGVwSAhwrz",
    "timestamp" : 1619186864092,
    "height" : 861637
}

113. UpdatePolicy Transaction

Изменение группы доступа к конфиденциальным данным.

Структуры данных транзакции

Подписание:

Поле

Тип данных

Описание

policyId

String

Идентификатор создаваемой группы доступа

password

String

Пароль от ключевой пары в keystore ноды - опциональное поле

sender

ByteStr

Адрес отправителя транзакции

recipients

Aray[Bytes]

Массив адресов участников группы доступа к конфиденциальным данным через запятую

fee

Long

Комиссия за транзакцию в WE Mainnet

opType

String

Тип операции: add - добавить участников; remove - удалить участников

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

Комиссия за транзакцию в WE Mainnet

timestamp

Long

Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле

proofs

List(ByteStr)

Массив подтверждений транзакции (в формате base58)

height

Byte

Высота выполнения транзакции

opType

String

Тип операции: add - добавить роль; remove - отозвать роль

description

Array[byte]

Произвольное описание транзакции (в формате base58)

version

Byte

Версия транзакции

JSON-представление:

Подписание:

{
  "policyId": "UkvoboGXiwWpASr1GLG9M1MUbhrEMo4NBS7kquxVMw5",
  "password":"sfgKYBFCF@#$fsdf()*%",
  "sender": "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx",
  "recipients" : [ "3NtNJV44wyxRXv2jyW3yXLxjJxvY1vR88TF" ],
   "fee": 50000000,
   "opType": "remove",
  "owners" : [ "3NtNJV44wyxRXv2jyW3yXLxjJxvY1vR88TF" ],
  "type": 113,
  "version": 2
 }

Публикация:

{
  "senderPublicKey" : "7GiFGcGaEN87ycK8v71Un6b7RUoeKBU4UvUHPYbeHaki",
  "fee" : 50000000,
  "opType" : "remove",
  "owners" : [ "3NtNJV44wyxRXv2jyW3yXLxjJxvY1vR88TF" ],
  "type" : 113,
  "version" : 2,
  "policyId" : "UkvoboGXiwWpASr1GLG9M1MUbhrEMo4NBS7kquxVMw5",
  "sender" : "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx",
  "feeAssetId" : null,
  "proofs" : [ "2CKd57kU3wbxdrHxMPNbrWHptnf5ZcydYjqxMPk46miMcUUAxgFGXcy621cjYFXC3vjpKNNrB2QcgtKe1Yx9TcLY" ],
  "recipients" : [ "3NtNJV44wyxRXv2jyW3yXLxjJxvY1vR88TF" ],
  "id" : "6o4azRwzmMg9SqWUq6rv6GAe5gzTYJvE5ek1v9VM3Mb",
  "timestamp" : 1619004195630,
  "height" : 856970
}

Подписание:

{
  "policyId": "5aYtmTr1AYYG8BrYvTTSqKzfJZxfgorx1BLGVwSAhwrz",
  "password":"sfgKYBFCF@#$fsdf()*%",
  "sender": "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
  "recipients" : [ "3NtNJV44wyxRXv2jyW3yXLxjJxvY1vR88TF" ],
   "fee": 50000000,
   "opType": "remove",
  "owners" : [ "3NtNJV44wyxRXv2jyW3yXLxjJxvY1vR88TF" ],
  "type": 113,
  "version": 3
 }

Публикация:

{
  "senderPublicKey" : "7GiFGcGaEN87ycK8v71Un6b7RUoeKBU4UvUHPYbeHaki",
  "fee" : 50000000,
  "opType" : "remove",
  "owners" : [ "3NtNJV44wyxRXv2jyW3yXLxjJxvY1vR88TF" ],
  "type" : 113,
  "version" : 3,
  "atomicBadge" : null,
  "policyId" : "5aYtmTr1AYYG8BrYvTTSqKzfJZxfgorx1BLGVwSAhwrz",
  "sender" : "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx",
  "feeAssetId" : null,
  "proofs" : [ "2QMGoz6rycNsDLhN3mDce2mqGRQQ8r26vDDw551pnYcAecpFBDA8j38FVqDjLTGuFHs6ScX32fsGcaemmptpCFHk" ],
  "recipients" : [ "3NtNJV44wyxRXv2jyW3yXLxjJxvY1vR88TF" ],
  "id" : "Hwqf8LgpQfEcUYX9nMNG8uU2Cw1xSuGFqYxmuACpvU1L",
  "timestamp" : 1619187450552,
  "height" : 861653
}

114. PolicyDataHash Transaction

Отправка хэша конфиденциальных данных в сеть. Эта транзакция создается автоматически при отправке в сеть конфиденциальных данных при помощи REST API метода POST /privacy/sendData.

Данная транзакция не требует подписания.

Структура данных на публикацию транзакции

Поле

Тип данных

Описание

type

Byte

Номер транзакции (114)

id

Byte

ID транзакции

sender

ByteStr

Адрес отправителя транзакции

senderPublicKey

PublicKeyAccount

Открытый ключ отправителя транзакции

policyId

String

Имя создаваемой группы доступа

dataHash

String

Хэш конфиденциальных данных для отправки

fee

Long

Комиссия за транзакцию в WE Mainnet

timestamp

Long

Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле

proofs

List(ByteStr)

Массив подтверждений транзакции (в формате base58)

height

Byte

Высота выполнения транзакции

version

Byte

Версия транзакции

120. AtomicTransaction

Атомарная транзакция: помещает в контейнер другие транзакции для их атомарного выполнения. Транзакция этого типа исполняется полностью (ни одна из включенных транзакций не отклоняется) или не исполняется в принципе.

Поддерживается включение 2 и более транзакций следующих типов:

Атомарная транзакция сама по себе не требует комиссии: общая сумма складывается из комиссий за транзакции, помещенные в атомарную транзакцию.

Подробнее об атомарных транзакциях: Атомарные транзакции

Структуры данных транзакции

Подписание:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (120)

sender

ByteStr

Адрес отправителя транзакции

transactions

Array

Полные тела включаемых транзакций

password

String

Пароль от ключевой пары в keystore ноды - опциональное поле

fee

Long

Комиссия за транзакцию в WE Mainnet

version

Byte

Версия транзакции

Публикация:

Поле

Тип данных

Описание

type

Byte

Номер транзакции (114)

id

Byte

ID транзакции

sender

ByteStr

Адрес отправителя транзакции

senderPublicKey

PublicKeyAccount

Открытый ключ отправителя транзакции

fee

Long

Комиссия за транзакцию в WE Mainnet

timestamp

Long

Временная метка в формате Unix Timestamp (в миллисекундах) - опциональное поле

proofs

List(ByteStr)

Массив подтверждений транзакции (в формате base58)

height

Byte

Высота выполнения транзакции

transactions

Array

Полные тела включаемых транзакций

miner

String

Публичный ключ майнера блока; заполняется в ходе раунда майнинга

password

String

Пароль от ключевой пары в keystore ноды - опциональное поле

version

Byte

Версия транзакции

JSON-представление:

Подписание:

{
    "sender": sender_0,
    "transactions": [
        signed_transfer_tx,
        signed_transfer_tx2
    ],
    "type": 120,
    "version": 1,
    "password":"lskjbJJk$%^#298",
    "fee": 0,
}

Публикация:

{
  "sender": "3MufokZsFzaf7heTV1yreUtm1uoJXPoFzdP",
  "transactions": [
        signed_transfer_tx,
        signed_transfer_tx2
  ],
  "type": 120,
  "version": 1,
}
Смотрите также