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

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

Блокчейн-платформа 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

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

Важно

Если в поле reissuable указано значение False, то есть довыпуск токенов запрещён, то в дальнейшем изменить это значение невозможно.

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
}

Подписание:

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

Публикация:

{
    "type": 3,
    "id": "DnK5Xfi2wXUJx9BjK9X6ZpFdTLdq2GtWH9pWrcxcmrhB",
    "sender": "3N65yEf31ojBZUvpu4LCo7n8D73juFtheUJ",
    "senderPublicKey": "C1ADP1tNGuSLTiQrfNRPhgXx59nCrwrZFRV4AHpfKBpZ",
    "fee": 100000000,
    "timestamp": 1549378509516,
    "proofs": [ "NqZGcbcQ82FZrPh6aCEjuo9nNnkPTvyhrNq329YWydaYcZTywXUwDxFAknTMEGuFrEndCjXBtrueLWaqbJhpeiG" ],
    "version": 3,
    "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
  "atomicBadge" : {
    "trustedSender" : "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx"
  },
}

Публикация:

{
  "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
}

Подписание:

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

Публикация:

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

Важно

Если в поле reissuable указано значение False, то есть последующий довыпуск токенов запрещён, то в дальнейшем изменить это значение невозможно.

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
}

Подписание:

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

Публикация:

{
    "senderPublicKey": "Fbt5fKHesnQG2CXmsKf4TC8v9oB7bsy2AY56CUopa6H3",
    "amount": 1000,
    "sender": "3N9vL3apA4j2L5PojHW8TYmfHx9Lo2ZaKPB",
    "chainId": 84,
    "proofs": [ "kzTwsNXjJkzk6dpFFZZXyeimYo6iLTVbCnCXBD4xBtyrNjysPqZfGKk9NdJUTP3xeAPhtEgU9hsdwzRVo1hKMgS" ],
    "assetId": "7bE3JPwZC3QcN9edctFrLAKYysjfMEk1SDjZx5gitSGg",
    "fee": 100000,
    "id": "3yd2HZq7sgun7GakisLH88UeKcpYMUEL4sy57aprAN5E",
    "type": 6,
    "version": 3,
    "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
}

Подписание:

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

Публикация:

{
    "senderPublicKey": "Fbt5fKHesnQG2CXmsKf4TC8v9oB7bsy2AY56CUopa6H3",
    "amount": 1000,
    "sender": "3N9vL3apA4j2L5PojHW8TYmfHx9Lo2ZaKPB",
    "proofs": [ "5jvmWKmU89HnxXFXNAd9X41zmiB5fSGoXMirsaJ9tNeyiCAJmjm7MR48g789VucckQw2UExaVXfhsdEBuUrchvrq" ],
    "fee": 100000,
    "recipient": "3N1ksBqc6uSksdiYjCzMtvEpiHhS1JjkbPh",
    "id": "6Tn7ir9MycHW6Gq2F2dGok2stokSwXJadPh4hW8eZ8Sp",
    "type": 8,
    "version": 3,
    "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
}

Подписание:

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

Публикация:

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

10. CreateAlias Transaction

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

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

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

Подписание:

Поле

Тип данных

Описание

type

Byte

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

version

Byte

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

fee

Long

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

feeAssetId

Byte

ID токена комиссии – опциональное поле

sender

ByteStr

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

password

String

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

alias

Byte

Псевдоним

Публикация:

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

Поле

Тип данных

Описание

type

Byte

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

id

Byte

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

sender

ByteStr

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

senderPublicKey

PublicKeyAccount

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

fee

Long

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

feeAssetId

Byte

ID токена комиссии – опциональное поле

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
}

Подписание:

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

Публикация:

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

Подписание:

{
    "type": 10,
    "version": 4,
    "fee": 100000000,
    "feeAssetId": DnK5Xfi2wXUJx9BjK9X6ZpFdTLdq2GtWH9pWrcxcmrhB,
    "sender": "3NwTvbW7TMckBc785XjtGTUfHmcesaWBe1A",
    "password": "",
    "alias": "1@k1_kv29"
    "atomicBadge":{
      "trustedSender":"3MufokZsFzaf7heTV1yreUtm1uoJXPoFzdP"
}

Публикация:

{
  "senderPublicKey" : "C4eRfdUFaZMRkfUp91bYr7uMgdBRnUfAxuAjetxmK7KY",
  "sender" : "3NwTvbW7TMckBc785XjtGTUfHmcesaWBe1A",
  "proofs" : [ "3fhJztBNnTDjppmqgi4GugAYo1aS1mzZhVhPdnNsqYqCEyLLHfzgb75psRPntHD4uBZgk8jByFP9mwwx2Ezsdg59" ],
  "fee" : 100000000,
  "feeAssetId": DnK5Xfi2wXUJx9BjK9X6ZpFdTLdq2GtWH9pWrcxcmrhB,
  "alias" : "1@k1_kv29",
  "id" : "AavgVzV7avPMpERro6YqikwFESAgG2wViprtPJUtXP6F",
  "type" : 10,
  "version" : 4,
  "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

feeAssetId

Byte

ID токена комиссии – опциональное поле

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
}

Подписание:

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

Публикация:

{
  "senderPublicKey" : "AMhAY8RMy5QsPqj58xeMY3fJxTZKx71QztsjDzqWprHo",
  "fee" : 30000000,
  "type" : 11,
  "transferCount" : 4,
  "version" : 3,
  "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

feeAssetId

Byte

ID токена комиссии – опциональное поле

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
}

Подписание:

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

Публикация:

{
  "senderPublicKey" : "7GiFGcGaEN87ycK8v71Un6b7RUoeKBU4UvUHPYbeHaki",
  "data" : [
    ...
  ],
  "author" : "3NxAooHUoLsAQvxBSqjE91WK3LwWGjiiCxx",
  "fee" : 150000000,
  "type" : 12,
  "version" : 3,
  "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
}

Подписание:

{
    "sender": "3JWDUsqyJEkVa1aivNPP8VCAa5zGuxiwD9t",
    "assetId": "G16FvJk9vabwxjQswh9CQAhbZzn3QrwqWjwnZB3qNVox",
    "fee": 100000000,
    "isEnabled": false,
    "type": 14,
    "password": "1234",
    "version": 2,
    "atomicBadge":{
      "trustedSender":"3MufokZsFzaf7heTV1yreUtm1uoJXPoFzdP"
    }
}

Публикация:

{
    "type": 14,
    "id": "Ht6kpnQJHJskN8kwszF8rck3E5tQiuiM1fEN42wGfdk7",
    "sender": "3JWDUsqyJEkVa1aivNPP8VCAa5zGuxiwD9t",
    "senderPublicKey": "Gt55fKHesnQG2CXmsKf4TC8v9oB7bsy2AY56CUophy89",
    "fee": 100000000,
    "assetId": "G16FvJk9vabwxjQswh9CQAhbZzn3QrwqWjwnZB3qNVox",
    "timestamp": 1545986757233,
    "proofs": [ "5TfgYS2dqh8QyN7Vu2tAYaioX5WM6rTSDPGbt4zrWS7QKTzojmR2kjppvGNj4tDPsYPbcDunqBaqhaudLyMeGFh7" ],
    "chainId": 84,
    "version": 2,
    "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

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

Начиная со второй версии транзакцию 102. Permission Transaction можно включать в атомарную транзакцию.

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

Подписание:

Поле

Тип данных

Описание

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

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

atomicBadge

Boolean

Флаг, который указывает, можно ли включать транзакцию в атомарную транзакцию

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"
  "version": 1
}

Подписание:

{
  "type": 102,
  "sender": "3GLWx8yUFcNSL3DER8kZyE4TpyAyNiEYsKG",
  "password": "",
  "senderPublicKey": "4WnvQPit2Di1iYXDgDcXnJZ5yroKW54vauNoxdNeMi2g",
  "fee": 0,
  "target": "3GPtj5osoYqHpyfmsFv7BMiyKsVzbG1ykfL",
  "opType": "add",
  "role": "contract_developer",
  "dueTimestamp": null,
  "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"
  "version": 2
  "atomicBadge": null
}

103. CreateContract Transaction

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

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

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

Подписание:

Поле

Тип данных

Описание

fee

Long

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

feeAssetId

Byte

ID токена комиссии – опциональное поле

image

Array[Bytes]

Имя Docker-образа Docker смарт-контракта; поле используется до 6-й версии транзакции включительно; начиная с 7-й версии вместо него используется поле storedContract.image

imageHash

Array[Bytes]

Хэш Docker-образа Docker смарт-контракта; поле используется до 6-й версии транзакции включительно; начиная с 7-й версии вместо него используется поле storedContract.imageHash

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-методов Docker смарт-контракта (см. Сервисы gRPC, используемые смарт-контрактом); поле используется до 6-й версии транзакции включительно; начиная с 7-й версии вместо него используется поле storedContract.apiVersion

validationPolicy.type

String

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

payments.amount

Целое число, которое определяет количество передаваемых контракту ассетов; в поле amount младшие разряды соответствуют дробным частям количества передаваемого ассета, если его decimals не нулевой – опциональное поле

payments.assetId

Идентификатор передаваемого контракту ассета; для передачи системного токена WEST поле assetId должно быть пустым – опциональное поле

atomicBadge

Boolean

Флаг, который указывает, можно ли включать транзакцию в атомарную транзакцию

isConfidential

Boolean

Флаг, который указывает, будет ли контракт поддерживать работу в конфиденциальном режиме

groupParticipants

Set[Address]

Адреса, которым разрешен доступ к конфиденциальным данным

groupOwners

Set[Address]

Адреса, которые могут изменять списки groupParticipants и groupOwners

storedContract.bytecode

Array[Byte]

Байткод WASM смарт-контракта; поле используется начиная с 7-й версии транзакции

storedContract.bytecodeHash

Array[Bytes]

Хэш байткода WASM смарт-контракта; поле используется начиная с 7-й версии транзакции

storedContract.image

Array[Bytes]

Имя Docker-образа Docker смарт-контракта; поле используется начиная с 7-й версии транзакции

storedContract.imageHash

Array[Bytes]

Хэш Docker-образа Docker смарт-контракта; поле используется начиная с 7-й версии транзакции

storedContract.apiVersion

Byte

Версия API для gRPC-методов Docker смарт-контракта (см. Сервисы gRPC, используемые смарт-контрактом); поле используется начиная с 7-й версии транзакции; поле не используется для WASM смарт-контрактов

Публикация:

Поле

Тип данных

Описание

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]

Имя Docker смарт-контракта (при загрузке из предустановленного репозитория) или его полный адрес (если репозиторий Docker смарт-контракта не указан в конфигурационном файле ноды); поле используется до 6-й версии транзакции включительно; начиная с 7-й версии вместо него используется поле storedContract.image

imageHash

Array[Bytes]

Хэш Docker-образа Docker смарт-контракта; поле используется до 6-й версии транзакции включительно; начиная с 7-й версии вместо него используется поле storedContract.imageHash

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-методов Docker смарт-контракта (см. Сервисы gRPC, используемые смарт-контрактом); поле используется до 6-й версии транзакции включительно; начиная с 7-й версии вместо него используется поле storedContract.apiVersion

validationPolicy.type

String

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

payments.amount

Целое число, которое определяет количество передаваемых контракту ассетов; в поле amount младшие разряды соответствуют дробным частям количества передаваемого ассета, если его decimals не нулевой – опциональное поле

payments.assetId

Идентификатор передаваемого контракту ассета; для передачи системного токена WEST поле assetId должно быть пустым – опциональное поле

atomicBadge

Boolean

Флаг, который указывает, можно ли включать транзакцию в атомарную транзакцию

isConfidential

Boolean

Флаг, который указывает, будет ли контракт поддерживать работу в конфиденциальном режиме

groupParticipants

Set[Address]

Адреса, которым разрешен доступ к конфиденциальным данным

groupOwners

Set[Address]

Адреса, которые могут изменять списки groupParticipants и groupOwners

storedContract.bytecode

Array[Byte]

Байткод WASM смарт-контракта; поле используется начиная с 7-й версии транзакции

storedContract.bytecodeHash

Array[Bytes]

Хэш байткода WASM смарт-контракта; поле используется начиная с 7-й версии транзакции

storedContract.image

Array[Bytes]

Имя Docker-образа Docker смарт-контракта; поле используется начиная с 7-й версии транзакции

storedContract.imageHash

Array[Bytes]

Хэш Docker-образа Docker смарт-контракта; поле используется начиная с 7-й версии транзакции

storedContract.apiVersion

Byte

Версия API для gRPC-методов Docker смарт-контракта (см. Сервисы gRPC, используемые смарт-контрактом); поле используется начиная с 7-й версии транзакции; поле не используется для WASM смарт-контрактов

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

Подписание:

{
  "type": 103,
  "version": 2,
  "sender": "3NpN3HyHzGj7Ny1k5F9zMMQ2n54TZg86G9D",
  "password": "signing-key-password",
  "contractName": "Your contract name",
  "image": "registry.yourdomain.com/test-docker-repo/contract:v1.0.0",
  "imageHash": "573387bbf50cfdeda462054b8d85d6c24007f91044501250877392e43ff5ed50",
  "params": [
    {
      "type": "string",
      "key": "test_key",
      "value": "test_value"
    }
  ],
  "fee": 100000000,
  "timestamp": 1651487626477,
  "feeAssetId": null
}

Публикация:

{
  "id": "4WVhw3QdiinpE5QXDG7QfqLiLanM7ewBw4ChX4qyGjs2",
  "type": 103,
  "version": 2,
  "sender": "3NpN3HyHzGj7Ny1k5F9zMMQ2n54TZg86G9D",
  "senderPublicKey": "YNpp7chAaudMqEtSZZPyN4GYLJ5ZTXdjCXrQdszzuRp",
  "contractName": "Your contract name",
  "image": "registry.yourdomain.com/test-docker-repo/contract:v1.0.0",
  "imageHash": "573387bbf50cfdeda462054b8d85d6c24007f91044501250877392e43ff5ed50",
  "params": [
    {
      "type": "string",
      "key": "test_key",
      "value": "test_value"
    }
  ],
  "fee": 100000000,
  "timestamp": 1651487626477,
  "feeAssetId": null,
  "proofs": [
    "4vqLnpJRFpcDgM5vgi78DpZnVfqztsARHNb7Hbmq3mQBjS3SRnzFAiYjRvPazEVMhBM9cE4Rcp6H5K29kk75Uxyh"
  ]
}

Подписание:

{
  "type": 103,
  "version": 3,
  "sender": "3NpN3HyHzGj7Ny1k5F9zMMQ2n54TZg86G9D",
  "password": "signing-key-password",
  "contractName": "Your contract name",
  "image": "registry.yourdomain.com/test-docker-repo/contract:v1.0.0",
  "imageHash": "573387bbf50cfdeda462054b8d85d6c24007f91044501250877392e43ff5ed50",
  "params": [
    {
      "type": "string",
      "key": "test_key",
      "value": "test_value"
    }
  ],
  "fee": 100000000,
  "timestamp": 1651487626477,
  "feeAssetId": null,
  "atomicBadge": null
}

Публикация:

{
  "id": "4WVhw3QdiinpE5QXDG7QfqLiLanM7ewBw4ChX4qyGjs2",
  "type": 103,
  "version": 3,
  "sender": "3NpN3HyHzGj7Ny1k5F9zMMQ2n54TZg86G9D",
  "senderPublicKey": "YNpp7chAaudMqEtSZZPyN4GYLJ5ZTXdjCXrQdszzuRp",
  "contractName": "Your contract name",
  "image": "registry.yourdomain.com/test-docker-repo/contract:v1.0.0",
  "imageHash": "573387bbf50cfdeda462054b8d85d6c24007f91044501250877392e43ff5ed50",
  "params": [
    {
      "type": "string",
      "key": "test_key",
      "value": "test_value"
    }
  ],
  "fee": 100000000,
  "timestamp": 1651487626477,
  "feeAssetId": null,
  "atomicBadge": null,
  "proofs": [
    "4vqLnpJRFpcDgM5vgi78DpZnVfqztsARHNb7Hbmq3mQBjS3SRnzFAiYjRvPazEVMhBM9cE4Rcp6H5K29kk75Uxyh"
  ]
}

Подписание:

{
  "type": 103,
  "version": 4,
  "sender": "3NpN3HyHzGj7Ny1k5F9zMMQ2n54TZg86G9D",
  "password": "signing-key-password",
  "contractName": "Your contract name",
  "image": "registry.yourdomain.com/test-docker-repo/contract:v1.0.0",
  "imageHash": "573387bbf50cfdeda462054b8d85d6c24007f91044501250877392e43ff5ed50",
  "params": [
    {
      "type": "string",
      "key": "test_key",
      "value": "test_value"
    }
  ],
  "fee": 100000000,
  "timestamp": 1651487626477,
  "feeAssetId": null,
  "atomicBadge": null,
  "validationPolicy": {
    "type": "majority"
  },
  "apiVersion": "1.0"
}

Публикация:

{
  "id": "4WVhw3QdiinpE5QXDG7QfqLiLanM7ewBw4ChX4qyGjs2",
  "type": 103,
  "version": 4,
  "sender": "3NpN3HyHzGj7Ny1k5F9zMMQ2n54TZg86G9D",
  "senderPublicKey": "YNpp7chAaudMqEtSZZPyN4GYLJ5ZTXdjCXrQdszzuRp",
  "contractName": "Your contract name",
  "image": "registry.yourdomain.com/test-docker-repo/contract:v1.0.0",
  "imageHash": "573387bbf50cfdeda462054b8d85d6c24007f91044501250877392e43ff5ed50",
  "params": [
    {
      "type": "string",
      "key": "test_key",
      "value": "test_value"
    }
  ],
  "fee": 100000000,
  "timestamp": 1651487626477,
  "feeAssetId": null,
  "atomicBadge": null,
  "proofs": [
    "4vqLnpJRFpcDgM5vgi78DpZnVfqztsARHNb7Hbmq3mQBjS3SRnzFAiYjRvPazEVMhBM9cE4Rcp6H5K29kk75Uxyh"
  ]
}

Подписание:

{
  "type": 103,
  "version": 5,
  "sender": "3NpN3HyHzGj7Ny1k5F9zMMQ2n54TZg86G9D",
  "password": "signing-key-password",
  "contractName": "Your contract name",
  "image": "registry.yourdomain.com/test-docker-repo/contract:v1.0.0",
  "imageHash": "573387bbf50cfdeda462054b8d85d6c24007f91044501250877392e43ff5ed50",
  "params": [
    {
      "type": "string",
      "key": "test_key",
      "value": "test_value"
    }
  ],
  "fee": 100000000,
  "timestamp": 1651487626477,
  "feeAssetId": null,
  "atomicBadge": null,
  "validationPolicy": {
    "type": "majority"
  },
  "apiVersion": "1.0"
}

Публикация:

{
  "id": "4WVhw3QdiinpE5QXDG7QfqLiLanM7ewBw4ChX4qyGjs2",
  "type": 103,
  "version": 5,
  "sender": "3NpN3HyHzGj7Ny1k5F9zMMQ2n54TZg86G9D",
  "senderPublicKey": "YNpp7chAaudMqEtSZZPyN4GYLJ5ZTXdjCXrQdszzuRp",
  "contractName": "SOME_CONTRACT_NAME",
  "image": "registry.yourdomain.com/test-docker-repo/contract:v1.0.0",
  "imageHash": "573387bbf50cfdeda462054b8d85d6c24007f91044501250877392e43ff5ed50",
  "params": [
    {
      "key": "int",
      "type": "integer",
      "value": 24
    },
    {
      "key": "bool",
      "type": "boolean",
      "value": true
    },
    {
      "key": "blob",
      "type": "binary",
      "value": "base64:YWxpY2U="
    }
  ],
  "fee": 0,
  "timestamp": 1665267880,
  "feeAssetId": null,
  "atomicBadge": {
    "trustedSender": "SOME_SENDER_ACCOUNT_ADDRESS"
  },
  "proofs": [
    "32mNYSefBTrkVngG5REkmmGAVv69ZvNhpbegmnqDReMTmXNyYqbECPgHgXrX2UwyKGLFS45j7xDFyPXjF8jcfw94"
  ],
  "validationPolicy": {
    "type": "SOME_VALIDATION_POLICY_NAME"
  },
  "apiVersion": "SOME_API_VERSION",
  "payments": [
    {
      "amount": 100
    },
    {
      "assetId": "SOME_ASSET_ID",
      "amount": 100
    }
  ]
}

Подписание:

{
  "type": 103,
  "version": 6,
  "sender": "3NpN3HyHzGj7Ny1k5F9zMMQ2n54TZg86G9D",
  "password": "signing-key-password",
  "contractName": "Your contract name",
  "image": "registry.yourdomain.com/test-docker-repo/contract:v1.0.0",
  "imageHash": "573387bbf50cfdeda462054b8d85d6c24007f91044501250877392e43ff5ed50",
  "params": [
    {
      "type": "string",
      "key": "test_key",
      "value": "test_value"
    }
  ],
  "fee": 100000000,
  "timestamp": 1651487626477,
  "feeAssetId": null,
  "atomicBadge": null,
  "validationPolicy": {
    "type": "majority"
  },
  "apiVersion": "1.0"
  "isConfidential": true
  "groupParticipants" : [ "3NgSJRdMYu4ZbNpSbyRNZLJDX926W7e1EKQ", "3NtieMGjVAH1nDsvnSEJ37BSW3hpJV2CneY"],
  "groupOwners" : [ "3NgSJRdMYu4ZbNpSbyRNZLJDX926W7e1EKQ", "3NtieMGjVAH1nDsvnSEJ37BSW3hpJV2CneY"]
}

Публикация:

{
  "id": "4WVhw3QdiinpE5QXDG7QfqLiLanM7ewBw4ChX4qyGjs2",
  "type": 103,
  "version": 6,
  "sender": "3NpN3HyHzGj7Ny1k5F9zMMQ2n54TZg86G9D",
  "senderPublicKey": "YNpp7chAaudMqEtSZZPyN4GYLJ5ZTXdjCXrQdszzuRp",
  "contractName": "SOME_CONTRACT_NAME",
  "image": "registry.yourdomain.com/test-docker-repo/contract:v1.0.0",
  "imageHash": "573387bbf50cfdeda462054b8d85d6c24007f91044501250877392e43ff5ed50",
  "params": [
    {
      "key": "int",
      "type": "integer",
      "value": 24
    },
    {
      "key": "bool",
      "type": "boolean",
      "value": true
    },
    {
      "key": "blob",
      "type": "binary",
      "value": "base64:YWxpY2U="
    }
  ],
  "fee": 0,
  "timestamp": 1665267880,
  "feeAssetId": null,
  "atomicBadge": {
    "trustedSender": "SOME_SENDER_ACCOUNT_ADDRESS"
  },
  "proofs": [
    "32mNYSefBTrkVngG5REkmmGAVv69ZvNhpbegmnqDReMTmXNyYqbECPgHgXrX2UwyKGLFS45j7xDFyPXjF8jcfw94"
  ],
  "validationPolicy": {
    "type": "SOME_VALIDATION_POLICY_NAME"
  },
  "apiVersion": "SOME_API_VERSION",
  "payments": [
    {
      "amount": 100
    },
    {
      "assetId": "SOME_ASSET_ID",
      "amount": 100
    }
  ]
  "isConfidential": true
  "groupParticipants" : [ "3NgSJRdMYu4ZbNpSbyRNZLJDX926W7e1EKQ", "3NtieMGjVAH1nDsvnSEJ37BSW3hpJV2CneY"],
  "groupOwners" : [ "3NgSJRdMYu4ZbNpSbyRNZLJDX926W7e1EKQ", "3NtieMGjVAH1nDsvnSEJ37BSW3hpJV2CneY"]
}

Подписание:

{
  "type": 103,
  "version": 7,
  "sender": "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
  "password": "",
  "contractName": " not world",
  "params": [
    {
     "type": "integer",
     "value": 0,
     "key": "count"
    }
  ],
  "fee": 100000000,
  "feeAssetId": null,
  "validationPolicy":
    {
      "type": "any"
    },
  "payments": [],
  "isConfidential": false,
  "groupParticipants": [],
  "groupOwners": [],
  "storedContract":
    {
      "bytecode": "AGFzbQEAAAABNwdgA39/fgF/YAADf39/YAR/f39/AX9gBH9/f38Cf35gBH9/f38Df39/YAR/f39/An9/YAF+AX8CnAEHA2VudgZtZW1vcnkCAQIQBGVudjAPc2V0X3N0b3JhZ2VfaW50AAAEZW52MA1nZXRfdHhfc2VuZGVyAAEEZW52MBJzZXRfc3RvcmFnZV9iaW5hcnkAAgRlbnYwD2dldF9zdG9yYWdlX2ludAADBGVudjASZ2V0X3N0b3JhZ2VfYmluYXJ5AAQEZW52MA1iaW5hcnlfZXF1YWxzAAUDBAMGBgYGEAN/AUEQC38AQRoLfwBBIAsHRwUMX2NvbnN0cnVjdG9yAAYHY291bnRlcgAHD3Jlc3RvcmVfY291bnRlcgAICl9fZGF0YV9lbmQDAQtfX2hlYXBfYmFzZQMCCvcBA0sBA38CQEGQgICAAEEFIAAQgICAgAAiAQ0AEIGAgIAAGiECIgENABCBgICAACEDGiIBDQBBlYCAgABBBSACIAMQgoCAgAAhAQsgAQs4AgF+AX8CQEEAQQBBkICAgABBBRCDgICAACEBIgINAEGQgICAAEEFIAEgAHwQgICAgAAhAgsgAgtwAQV/AkBBAEEAQZWAgIAAQQUQhICAgAAhAiEBIgMNABCBgICAABohBCIDDQAQgYCAgAAhBRoiAw0AIAEgAiAEIAUQhYCAgAAhASIDDQBBrAIhAyABQQFxRQ0AQZCAgIAAQQUgABCAgICAACEDCyADCwsQAQBBEAsKY291bnRvd25lcg==",
      "bytecodeHash": "083b7d0cb08b4a30f3d9f96a30ede04680623f73527432f947d5d5880e670625"
    }
}

Публикация:

{
  "senderPublicKey" : "5oKuxwiRmqHnr7vCAHK3VRJBhg9andjskfX11HpmJcYp8JifBXisz4KEKFD3pbRum3PWHDf4ZKkoCAgrrsLbp8HH",
  "isConfidential" : false,
  "fee" : 100000000,
  "payments" : [ ],
  "groupOwners" : [ ],
  "type" : 103,
  "params" : [ ],
  "version" : 7,
  "atomicBadge" : null,
  "groupParticipants" : [ ],
  "sender" : "3Hakpx6EE4fDb7Vd7EaWMG1HT9UJezLeVcG",
  "feeAssetId" : null,
  "storedContract" : {
    "bytecode" : "AGFzbQEAAAABJQVgBH9/f38Df39/YAN/f34Bf2AEf39/fwJ/fmAAAX9gAn9/AX8CSgQDZW52Bm1lbW9yeQIBAhAEZW52MARqb2luAAAEZW52MA9zZXRfc3RvcmFnZV9pbnQAAQRlbnYwD2dldF9zdG9yYWdlX2ludAACAwMCAwQGEAN/AUEQC38AQSALfwBBIAsHOQQMX2NvbnN0cnVjdG9yAAMLaW5jcmVtZW50XzEABApfX2RhdGFfZW5kAwELX19oZWFwX2Jhc2UDAgrXAQJwAQR/QQAhAANAAkAgAEEKRw0AQQAPCwJAQZqAgIAAQQBBmoCAgABBBhCAgICAACECIQEiAw0AIAEgAiAAQZCAgIAAakEBEICAgIAAIQIhASIDDQAgAEEBaiEAIAEgAkIAEIGAgIAAIgNFDQELCyADC2QCA38BfgJAQZqAgIAAQQBBmoCAgABBBhCAgICAACEDIQIiBA0AIAIgAyAAIAEQgICAgAAhASEAIgQNAEEAQQAgACABEIKAgIAAIQUiBA0AIAAgASAFQgF8EIGAgIAAIQQLIAQLCxYBAEEQCxAwMTIzNDU2Nzg5c2hhcmRf",
    "bytecodeHash" : "c2f116a528291d6cbcadc308edd8a1f294c4656009705916f3f0929150838388"
  },
  "contractName" : "name",
  "id" : "GQ4CaT9vyKUsK7tFrg2F7bfqEspwVeaPFtE2tpAwAtye",
  "validationPolicy" : {
    "type" : "any"
  },
  "timestamp" : 1704962852721
}

Версия 4

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

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

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

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

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

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

Версия 5

В версии 5 данной транзакции пользователь может перевести свои активы на баланс контракта. Для этого в поле payments указывается массив ассетов и их количество. Можно передать как системный токен WEST, так и любые другие ассеты, созданные в сети. Использование версии 5 данной транзакции возможно начиная с релиза 1.12 после активации функциональной возможности 1120.

При работе в частной сети транзакция 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" : 5,
  "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
}

Версия 6

В версии 6 данной транзакции реализована поддержка конфиденциальных смарт-контрактов. При регистрации контракта с помощью шестой версии транзакции можно указать, что контракт является конфиденциальным, и определить множество адресов нод, имеющих доступ к приватным данным смарт-контракта. Ниже описаны реализованные для этого поля.

Поля для работы с конфиденциальными смарт-контрактами:

Для этого реализованы следующие поля:

  • флаг isConfidential определяет, является ли смарт-контракт конфиденциальным;

  • в поле groupParticipants определяется состав группы (политики), нодам-участникам которой разрешён доступ к данным конфиденциального смарт-контракта; максимальный размер группы – 1024 участника;

  • в поле groupOwners задаются ноды, которые могут изменять списки groupParticipants и groupOwners при помощи транзакции UpdateContract; в поле можно указать не более 1024 нод.

Важно

Нельзя при создании контракта присвоить полю isConfidential значение true, если в поле groupParticipants указано менее трёх участников с ролью contract-validator.

Нельзя при создании контракта присвоить полю isConfidential значение false, если поля groupParticipants и groupOwners не пусты.

Нельзя при создании контракта присвоить полю payments какое-либо значение, если полю isConfidential присвоено значение true.

Нельзя при создании контракта передавать параметры в поле params, если полю isConfidential присвоено значение true.

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

Версия 7 – Create Wasm Contract Transaction

В версии 7 данной транзакции реализована поддержка WASM смарт-контрактов. Для этого удалены поля image, imageHash, apiVersion и реализовано поле storedContract. В зависимости от типа смарт-контракта это поле имеет следующую структуру:

  • для Docker смарт-контрактов:

    "storedContract" : {
       "image" : <image docker> in Array[Byte]
       "imageHash": ssh256 от image docker
       "apiVersion" : "1.10",
    }
    
  • для WASM смарт-контрактов:

    "storedContract" : {
       "bytecode" : <bytecode contracts> in Array[Byte]
       "bytecodeHash" : "Sha256 от <bytecode contracts>"
    }
    

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

Важно

В релизе 1.14.0 WASM смарт-контракты не поддерживают атомарные транзакции и конфиденциальные смарт-контракты. Поэтому для WASM смарт-контракта следующие поля должны иметь следующие значения:

...
"atomicBadge" : null,
...
"isConfidential": false,
"groupParticipants": [],
"groupOwners": [],
...

104. CallContract Transaction

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

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

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

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

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

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

До релиза 1.14.0 если контракт не выполнялся или выполнялся с ошибкой, то транзакции 103 и 104 удалялись и не попадали в блок. Начиная с релиза 1.14.0 исполнение смарт-контракта в случае ошибки также сохраняется в блокчейне. Подробнее о алгоритме обработки ошибок смарт-контрактов см. раздел 105. ExecutedContract Transaction – Версия 5.

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

Подписание:

Поле

Тип данных

Описание

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

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

inputCommitment

Commitment

Поле используется в 6-й версии транзакции для работы с конфиденциальными смарт-контрактами. Длина поля – константа, равная длине хеша в текущей криптографии

inputCommitmentOpt

Commitment

Поле используется в 7-й версии транзакции и аналогично полю inputCommitmentопциональное поле

contractVersion

Версия контракта: для нового контракта указывается значение 1, для обновленного контракта – 2

feeAssetId

Byte

ID токена комиссии – опциональное поле

payments.amount

Целое число, которое определяет количество передаваемых контракту ассетов; в поле amount младшие разряды соответствуют дробным частям количества передаваемого ассета, если его decimals не нулевой – опциональное поле

payments.assetId

Идентификатор передаваемого контракту ассета; для передачи системного токена WEST поле assetId должно быть пустым – опциональное поле

atomicBadge

Boolean

Флаг, который указывает, можно ли включать транзакцию в атомарную транзакцию

callFunc

Название функции контракта

contractEngine

Тип вызываемого контракта: docker или wasm

Публикация:

Поле

Тип данных

Описание

type

Byte

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

id

Byte

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

sender

ByteStr

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

senderPublicKey

PublicKeyAccount

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

fee

Long

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

feeAssetId

Byte

ID токена комиссии – опциональное поле

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

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

contractVersion

Версия контракта: для нового контракта указывается значение 1, для обновленного контракта – 2

payments.amount

Целое число, которое определяет количество передаваемых контракту ассетов; в поле amount младшие разряды соответствуют дробным частям количества передаваемого ассета, если его decimals не нулевой – опциональное поле

payments.assetId

Идентификатор передаваемого контракту ассета; для передачи системного токена WEST поле assetId должно быть пустым – опциональное поле

atomicBadge

Boolean

Флаг, который указывает, можно ли включать транзакцию в атомарную транзакцию

inputCommitment

Commitment

Поле используется в 6-й версии транзакции для работы с конфиденциальными смарт-контрактами. Длина поля – константа и равна длине хеша в текущей криптографии

inputCommitmentOpt

Commitment

Поле используется в 7-й версии транзакции и аналогично полю inputCommitmentопциональное поле

callFunc

Название функции контракта

contractEngine

Тип вызываемого контракта: docker или wasm

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
}

Подписание:

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

Публикация:

{
  "senderPublicKey": "CgqRPcPnexY533gCh2SSvBXh5bca1qMs7KFGntawHGww",
    "fee": 0,
    "type": 104,
    "params": [
      {
        "key": "int",
        "type": "integer",
        "value": 24
      },
      {
        "key": "bool",
        "type": "boolean",
        "value": true
      },
      {
        "key": "blob",
        "type": "binary",
        "value": "base64:YWxpY2U="
      }
    ],
    "version": 5,
    "contractVersion": "3",
    "atomicBadge": {
      "trustedSender": "SOME_SENDER_ACCOUNT_ADDRESS"
    },
    "sender": "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
    "feeAssetId": null,
    "proofs": [
      "32mNYSefBTrkVngG5REkmmGAVv69ZvNhpbegmnqDReMTmXNyYqbECPgHgXrX2UwyKGLFS45j7xDFyPXjF8jcfw94"
    ],
    "contractId": "HSLdKYqLq4LcZpq9LPki8Yv4ZRkFapVyHEYw1vZW2MoG",
    "id": "GBfibn8VjGmDS9ex4Nd4JNRLvDyvJjj8jLUUcbYwFTCf",
    "timestamp": 1665267880,
    "payments": [
      {
        "amount": 100
      },
      {
        "assetId": "SOME_ASSET_ID",
        "amount": 100
      }
    ]
  }

Подписание:

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

Публикация:

{
  "senderPublicKey": "CgqRPcPnexY533gCh2SSvBXh5bca1qMs7KFGntawHGww",
  "fee": 0,
  "type": 104,
  "params": [
    {
      "key": "int",
      "type": "integer",
      "value": 24
    },
    {
      "key": "bool",
      "type": "boolean",
      "value": true
    },
    {
      "key": "blob",
      "type": "binary",
      "value": "base64:YWxpY2U="
    }
  ],
  "version": 6,
  "contractVersion": "3",
  "atomicBadge": {
    "trustedSender": "SOME_SENDER_ACCOUNT_ADDRESS"
  },
  "sender": "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
  "feeAssetId": null,
  "proofs": [
    "32mNYSefBTrkVngG5REkmmGAVv69ZvNhpbegmnqDReMTmXNyYqbECPgHgXrX2UwyKGLFS45j7xDFyPXjF8jcfw94"
  ],
  "contractId": "HSLdKYqLq4LcZpq9LPki8Yv4ZRkFapVyHEYw1vZW2MoG",
  "id": "GBfibn8VjGmDS9ex4Nd4JNRLvDyvJjj8jLUUcbYwFTCf",
  "timestamp": 1665267880,
  "payments": [
    {
      "amount": 100
    },
    {
      "assetId": "SOME_ASSET_ID",
      "amount": 100
    }
  ]
  "inputCommitment" : "SOME_COMMITMENT"
}

Подписание:

{
  "contractId": "2TUhT1eRvpKcwxUfpUEB7BHEiXNVZnEbEMgZKnxuPXHJ",
  "fee": 10000000,
  "sender": "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
  "password": "",
  "type": 104,
  "params": [
    {
      "type": "integer",
      "value": 7,
      "key": "count"
    }
  ],
  "version": 7,
  "contractVersion": 1,
  "feeAssetId": null,
  "payments": [],
  "callFunc": "restore_counter",
  "contractEngine": "wasm"
}

Публикация:

{
  "senderPublicKey" : "5oKuxwiRmqHnr7vCAHK3VRJBhg9andjskfX11HpmJcYp8JifBXisz4KEKFD3pbRum3PWHDf4ZKkoCAgrrsLbp8HH",
  "fee" : 100000000,
  "type" : 104,
  "params" : [
    {
      "type" : "boolean",
      "value" : true,
      "key" : "bool_value"
    },
    {
      "type" : "integer",
      "value" : 100000000,
      "key" : "int_value"
    },
    {
      "type" : "string",
      "value" : "Hello World",
      "key" : "string_value"
    },
    {
      "type" : "string",
      "value" : "3Hakpx6EE4fDb7Vd7EaWMG1HT9UJezLeVcG",
      "key" : "address_value"
    }
  ],
  "version" : 7,
  "contractVersion" : 1,
  "atomicBadge" : null,
  "sender" : "3Hakpx6EE4fDb7Vd7EaWMG1HT9UJezLeVcG",
  "feeAssetId" : null,
  "contractId" : "GyDvD8r2yXE1Kdu31TMkYtSW9i7F4qXXkfWpfKgkYxX",
  "id" : "3bGqThohX5KX79k9snWENduwgkmpfKDMjqtK3QGMH1me",
  "timestamp" : 1704963915571
  "payments" : [ ],
  "callFunc" : "update_storage",
  "contractEngine" : "wasm"
}

Версия 5

В версии 5 данной транзакции пользователь может перевести свои активы на баланс контракта. Для этого в поле payments указывается массив ассетов и их количество. Можно передать как системный токен WEST, так и любые другие ассеты, созданные в сети. Использование версии 5 данной транзакции возможно начиная с релиза 1.12 после активации функциональной возможности 1120.

Версия 6

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

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

Версия 7

В версии 7 данной транзакции реализована поддержка WASM смарт-контрактов. Для этого реализованы следующие поля:

  • contractEngine – определяет, какой тип контракта будет вызван; доступные значения:

    • wasm

    • docker

  • callFunc – название функции WASM смарт-контракта, которую необходимо вызвать; в этом поле нельзя указать функцию _constructor, так как она вызывается только при создании контракта; для Docker смарт-контракта поле должно остаться пустым: callFunc: null.

    Внимание

    Важен порядок и тип параметров, переданных функции: в JSON на подписание в поле params параметры должны быть указаны именно в том порядке, в каком их ожидает функция, заданная в поле callFunc.

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

Важно

В релизе 1.14.0 WASM смарт-контракты не поддерживают атомарные транзакции и конфиденциальные смарт-контракты, поэтому для WASM смарт-контракта в JSON на подписание поле inputCommitmentOpt должно отсустствовать, а поле atomicBadge должно отсустствовать или иметь значение null.

105. ExecutedContract Transaction

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

Транзакция 105 содержит все поля (тело) транзакции 103. CreateContract, 104. CallContract, 107. UpdateContract смарт-контракта, результат исполнения которого необходимо записать в его стейт (поле 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[_]]

Список возможных результатов исполнения смарт-контракта; поле используется до 4-й версии транзакции включительно; начиная с 5-й версии вместо него используется поле resultsMap

resultsMap

Map[ByteStr, List]

Множество списков возможных результатов исполнения смарт-контрактов; поле используется начиная с 5-й версии; в более ранних версиях вместо него используется поле results

height

Byte

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

assetOperations

Упорядоченный список действий смарт-контракта с доступными ему ассетами, в том числе
  • выпуск нового ассета,

  • перевыпуск ассета,

  • сжигание ассета,

  • перевод доступного контракту ассета другому пользователю,

  • передача доступного контракту ассета в аренду (лизинг) другому пользователю,

  • отмена лизинга

Поле используется до 4-й версии транзакции включительно; начиная с 5-й версии вместо него используется поле assetOperationsMap

assetOperations.operationType

Служебное поле, представляющее тип операции. Поле может принимать следующие значения:

issue, reissue, burn, transfer, lease, cancel-lease

assetOperations.version

Служебное поле, представляющее версию объекта

assetOperations.assetId

При выпуске ассетов значение поля вычисляется посредством gRPC-метода CalculateAssetId сервиса ContractService.

При перевыпуске или сжигании ассета идентификатор определяет, перевыпуск или сжигание какого токена осуществляется.

При переводе ассета идентификатор определяет, передача какого ассета осуществляется.

В случае отправки системного токена WEST поле assetId должно быть опущено или равно null.

assetOperations.name

Имя ассета

assetOperations.description

Описание ассета

assetOperations.quantity

При выпуске ассетов в поле задаётся суммарное количество выпускаемого ассета.

При перевыпуске ассета – количество довыпускаемого ассета

assetOperations.decimals

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

assetOperations.isReissuable

Флаг, указывающий на возможность перевыпускать ассет

assetOperations.nonce

При выпуске ассетов значение поля используется для расчёта assetId. Не может быть равным 0.

Диапазон допустимых значений: от -128 до 127.

В рамках одного вызова контракта не может быть выпущено несколько ассетов с одинаковым nonce

assetOperations.amount

При сжигании ассетов в поле задаётся количество сжигаемого ассета.

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

assetOperations.recipient

При переводе ассетов в поле задаётся адрес пользователя, которому контракт осуществляет передачу активов

assetOperationsMap

Map[ByteStr, List]

Поле аналогично полю assetOperations, используется начиная с 5-й версии транзакции

readings

ReadDescriptor

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

readingsHash

ByteStr

Поле используется для работы с конфиденциальными смарт-контрактами и представляет собой хеш от readings и результатов чтения. Поле имеет фиксированную длину

outputCommitment

Commitment

Поле используется в 4-й версии транзакции для работы с конфиденциальными смарт-контрактами. Длина поля – константа, равная длине хеша в текущей криптографии

outputCommitmentOpt

Commitment

Поле используется в 5-й версии транзакции и аналогично полю outputCommitmentопциональное поле

statusCode

Integer

Статус исполнения смарт контракта. Доступны следующие значения: 0, 1, 2

errorMessage

String

Описание ошибки с кодом ошибки

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

Публикация:

{
    "type": 105,
    "version": 2,
    "id": "38GmSVC5s8Sjeybzfe9RQ6p1Mb6ajb8LYJDcep8G8Umj",
    "sender": "3N3YTj1tNwn8XUJ8ptGKbPuEFNa9GFnhqew",
    "senderPublicKey": "3kW7vy6nPC59BXM67n5N56rhhAv38Dws5skqDsjMVT2M",
    "password": "",
    "fee": 500000,
    "timestamp": 1550591780234,
    "proofs": [ "5whBipAWQgFvm3myNZe6GDd9Ky8199C9qNxLBHqDNmVAUJW9gLf7t9LBQDi68CKT57dzmnPJpJkrwKh2HBSwUer6" ],
    "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
}

Публикация:

{
    "type": 105,
    "version": 3,
    "id": "SOME_TX_ID",
    "sender": "3N3YTj1tNwn8XUJ8ptGKbPuEFNa9GFnhqew",
    "senderPublicKey": "3kW7vy6nPC59BXM67n5N56rhhAv38Dws5skqDsjMVT2M",
    "fee": 0,
    "timestamp": 1665267880,
    "proofs": [
    "32mNYSefBTrkVngG5REkmmGAVv69ZvNhpbegmnqDReMTmXNyYqbECPgHgXrX2UwyKGLFS45j7xDFyPXjF8jcfw94"
    ],
    "tx": { // inner (executed) tx json-object
      "id": "SOME_INNER_TX_ID",
      // ...
          },
    "results": [
        {
          "key": "int",
          "type": "integer",
          "value": 24
        },
        {
          "key": "bool",
          "type": "boolean",
          "value": true
        },
        {
          "key": "blob",
          "type": "binary",
          "value": "base64:YWxpY2U="
        }
      ],
    "assetOperations": [
        {
          "operationType": "issue",
          "version": 1,
          "assetId": "SOME_ASSET_ID",
          "name": "Gigacoin",
          "description": "Gigacoin",
          "quantity": 10000000000,
          "decimals": 8,
          "isReissuable": true,
          "nonce": 1 // SOME_NONCE
        },
        {
          "operationType": "burn",
          "version": 1,
          "assetId": "SOME_ASSET_ID",
          "amount": 1000
        },
        {
          "operationType": "reissue",
          "version": 1,
          "assetId": "SOME_ASSET_ID",
          "quantity": 10000000000,
          "isReissuable": true
        },
        {
          "operationType": "transfer",
          "version": 1,
          "recipient": "SOME_RECIPIENT_ACCOUNT_ADDRESS",
          "assetId": "SOME_ASSET_ID",
          "amount": 1000
        }
        {
          "operationType": "lease",
          "leaseId":  "SOME_LEASE_ID",
          "nonce": 1,
          "recipient": "SOME_RECIPIENT_ACCOUNT_ADDRESS"
          "amount": 1000
        }
        {
          "operationType": "cancel-lease",
          "leaseId":  "SOME_LEASE_ID"
        }
      ]
    "resultsHash": "SOME_RESULTS_HASH",
    "validationProofs": [],
 }

Публикация:

{
   "type": 105,
   "version": 4,
   "id": "SOME_TX_ID",
   "sender": "3N3YTj1tNwn8XUJ8ptGKbPuEFNa9GFnhqew",
   "senderPublicKey": "3kW7vy6nPC59BXM67n5N56rhhAv38Dws5skqDsjMVT2M",
   "fee": 0,
   "timestamp": 1665267880,
   "proofs": [
   "32mNYSefBTrkVngG5REkmmGAVv69ZvNhpbegmnqDReMTmXNyYqbECPgHgXrX2UwyKGLFS45j7xDFyPXjF8jcfw94"
    ],
   "tx": { // inner (executed) tx json-object
     "id": "SOME_INNER_TX_ID",
     // ...
         },
   "results": [
       {
          "key": "int",
          "type": "integer",
          "value": 24
       },
       {
          "key": "bool",
          "type": "boolean",
          "value": true
       },
       {
         "key": "blob",
         "type": "binary",
         "value": "base64:YWxpY2U="
       }
     ],
   "assetOperations": [
       {
         "operationType": "issue",
         "version": 1,
         "assetId": "SOME_ASSET_ID",
         "name": "Gigacoin",
         "description": "Gigacoin",
         "quantity": 10000000000,
         "decimals": 8,
         "isReissuable": true,
         "nonce": 1 // SOME_NONCE
       },
       {
         "operationType": "burn",
         "version": 1,
         "assetId": "SOME_ASSET_ID",
         "amount": 1000
       },
       {
         "operationType": "reissue",
         "version": 1,
         "assetId": "SOME_ASSET_ID",
         "quantity": 10000000000,
         "isReissuable": true
       },
       {
         "operationType": "transfer",
         "version": 1,
         "recipient": "SOME_RECIPIENT_ACCOUNT_ADDRESS",
         "assetId": "SOME_ASSET_ID",
         "amount": 1000
       }
       {
         "operationType": "lease",
         "leaseId":  "SOME_LEASE_ID",
         "nonce": 1,
         "recipient": "SOME_RECIPIENT_ACCOUNT_ADDRESS"
         "amount": 1000
       }
       {
         "operationType": "cancel-lease",
         "leaseId":  "SOME_LEASE_ID"
       }
     ]
   "resultsHash": "SOME_RESULTS_HASH",
   "validationProofs": [],
   "readings": [ReadDescriptor1, ..., ReadDescriptorN],
   "readingsHash" : "SOME_READINGS_HASH",
   "outputCommitment" : "SOME_COMMITMENT"
}

Публикация:

{
   "type": 105,
   "version": 5,
   "id": "HydNFEUeCj5DXFfHm32CrpcohvRvTABqdoFERtosgf5a",
   "sender": "3NdJB3vGAAQm2xQc2SAEhGNqDtXpL7YCn3v",
   "senderPublicKey": "9e4poNdEc9KF1qRxRJLbhqx6hrcjieQP2YcPiBdd3fpT",
   "fee": 0,
   "timestamp": 1708355888775,
   "proofs": [
      "3VHTSQh5HKkt1KGwhZg39WhPVNbNE5GnmyAD82no92e8CbYthh1KepjECyAcXXVu8QPoduscdZnnnrPtyfHZYjSR"
   ],

   "tx":
        {
          "type": 104,
          "version": 7,
          "sender": "3Nremv58EXSYK2qa5bhMeGnm1f2pRqLnv34",
          "senderPublicKey": "4sCvMtLD9MJUaw6dQrjnzWhrM6D32nrQcgQk5ULtQUXw",
          "contractEngine": "docker",
          "callFunc": null,
          "fee": 10000000,
          "feeAssetId": null,
          "payments": [],
          "params": [
            {
              "type": "integer",
              "value": 1,
              "key": "error_code"
            }
          ],
          "contractVersion": 1,
          "atomicBadge": null,
          "proofs": [
            "emoXX9D1tknstbNjkxAdERQsVz59AM9XchH9fwfeyUYNdkwSmBEU1FRfH71gDyyPHs3t4e6hrXqNiNUTrLkQ7pc"
          ],
          "contractId": "4K6gRgAhnzzbHXaGSRbWnjtU2r4kYUw61uwPuKJq1ims",
          "id": "Ecectk1L6T6TFAtUcQH2XerXNGT4gm7tMKBf2NnNKBjK",
          "timestamp": 1708355888031
        },
   "resultsHash": "xyw95Bsby3s4mt6f4FmFDnFVpQBAeJxBFNGzu2cX4dM",
   "validationProofs": [],
   "readings": [],
   "readingsHash" : null,
   "resultsMap": {},
   "assetOperationsMap": {},
   "statusCode": 2,
   "errorMessage": "Rejected because the CircuitBreaker is in the Open state, attempting to close in 53 millis"
 }

Версия 3

В версии 3 данной транзакции в поле assetOperations можно передать последовательность операций над ассетами, например перевод токенов с баланса пользователя на баланс контракта.

  • При помощи операции перевода токенов (transfer) можно передать как системный токен WEST, так и любые другие ассеты, созданные в сети.

  • Операции issue, reissue, burn можно осуществить с любыми токенами, кроме системного токена WEST.

  • Операции lease и cancel-lease работают только с системным токеном WEST.

Важно

Если в поле isReissuable указано значение False, то есть довыпуск токенов запрещён, то в дальнейшем изменить это значение невозможно.

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

Использование операций lease и cancel-lease возможно начиная с релиза 1.12.3 после активации функциональной возможности 1123.

Версия 4

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

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

Версия 5

В версии 5 данной транзакции изменён алгоритм обработки ошибок смарт-контрактов:

  • В случае успешного исполнения нода (как и в предыдущих версиях) формирует и отправляет в блокчейн транзакцию 105, которая содержит в себе детали изменения стейта в рамках исходной 103-й или 104-й транзакций в следующем формате:

    "results": [
      {
        "type": "string",
        "value": "[{\"accountNumber\":\"1119810\"}]",
        "key": "accounts"
      }
    ]
    
  • В случае ошибки также происходит генерация транзакции 105, и исполнение смарт-контракта с ошибкой сохраняется в блокчейне при наборе транзакцией кворума.

В этой версии транзакции реализованы поля, необходимые для фиксации статусов исполнения смарт-контракта:

  • statusCode – статус исполнения смарт контракта; доступны следующие значения:

    • 0 – Success – успешное исполнение контракта, получен предполагаемый результат;

    • 1 – Error – ошибка бизнес-логики; контракт закончился с ошибкой, но может завершиться успешно в будущем;

    • 2 – Failure – системная ошибка; отказала компонента блокчейна, например в случае timeout.

  • errorMessage – описание ошибки; в случае WASM смарт-контракта поле содержит код ошибки; в случае Docker смарт-контракта может быть возвращена ошибка, заданная пользователем, или другая ошибка.

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

  • поле results заменено на поле resultsMap, в котором может быть передан список результатов для каждого из смарт-контрактов;

  • поле assetOperations заменено на поле assetOperationsMap, в котором может быть передан ряд упорядоченных списков действий смарт-контрактов с доступными им ассетами.

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

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

feeAssetId

Byte

ID токена комиссии – опциональное поле

proofs

List(ByteStr)

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

version

Byte

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

contractId

ByteStr

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

height

Byte

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

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

Подписание:

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

Публикация:

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

Подписание:

{
    "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-образа Docker смарт-контракта; поле используется до 5-й версии транзакции включительно; начиная с 6-й версии вместо него используется поле storedContract.image

imageHash

Array[Bytes]

Хэш Docker-образа Docker смарт-контракта; поле используется до 5-й версии транзакции включительно; начиная с 6-й версии вместо него используется поле storedContract.imageHash

sender

ByteStr

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

password

String

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

fee

Long

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

contractId

ByteStr

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

type

Byte

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

version

Byte

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

feeAssetId

Byte

ID токена комиссии – опциональное поле

apiVersion

Byte

Версия API для gRPC-методов Docker смарт-контракта (см. Сервисы gRPC, используемые смарт-контрактом); поле используется до 5-й версии транзакции включительно; начиная с 6-й версии вместо него используется поле storedContract.apiVersion

validationPolicy.type

String

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

groupParticipants

Set[Address]

Адреса, которым разрешен доступ к конфиденциальным данным

groupOwners

Set[Address]

Адреса, которые могут изменять списки groupParticipants и groupOwners

storedContract.bytecode

Array[Byte]

Байткод WASM смарт-контракта; поле используется начиная с 6-й версии транзакции

storedContract.bytecodeHash

Array[Bytes]

Хэш байткода WASM смарт-контракта; поле используется начиная с 6-й версии транзакции

storedContract.image

Array[Bytes]

Имя Docker-образа Docker смарт-контракта; поле используется начиная с 6-й версии транзакции

storedContract.imageHash

Array[Bytes]

Хэш Docker-образа Docker смарт-контракта; поле используется начиная с 6-й версии транзакции

storedContract.apiVersion

Byte

Версия API для gRPC-методов Docker смарт-контракта (см. Сервисы gRPC, используемые смарт-контрактом); поле используется начиная с 6-й версии транзакции; поле не используется для WASM смарт-контрактов

Публикация:

Поле

Тип данных

Описание

senderPublicKey

PublicKeyAccount

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

tx

Array

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

fee

Long

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

feeAssetId

Byte

ID токена комиссии – опциональное поле

apiVersion

Byte

Версия API для gRPC-методов Docker смарт-контракта (см. Сервисы gRPC, используемые смарт-контрактом); поле используется до 5-й версии транзакции включительно; начиная с 6-й версии вместо него используется поле storedContract.apiVersion

type

Byte

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

version

Byte

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

image

Array[Bytes]

Имя Docker смарт-контракта (при загрузке из предустановленного репозитория) или его полный адрес (если репозиторий Docker смарт-контракта не указан в конфигурационном файле ноды); поле используется до 5-й версии транзакции включительно; начиная с 6-й версии вместо него используется поле storedContract.image

imageHash

Array[Bytes]

Хэш Docker-образа Docker смарт-контракта; поле используется до 5-й версии транзакции включительно; начиная с 6-й версии вместо него используется поле storedContract.imageHash

sender

ByteStr

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

proofs

List(ByteStr)

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

contractId

ByteStr

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

id

Byte

ID транзакции обновления контракта

timestamp

Long

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

atomicBadge

Boolean

Флаг, который указывает, можно ли включать транзакцию в атомарную транзакцию

groupParticipants

Set[Address]

Адреса, которым разрешен доступ к конфиденциальным данным

groupOwners

Set[Address]

Адреса, которые могут изменять списки groupParticipants и groupOwners

validationPolicy.type

String

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

storedContract.bytecode

Array[Byte]

Байткод WASM смарт-контракта; поле используется начиная с 6-й версии транзакции

storedContract.bytecodeHash

Array[Bytes]

Хэш байткода WASM смарт-контракта; поле используется начиная с 6-й версии транзакции

storedContract.image

Array[Bytes]

Имя Docker-образа Docker смарт-контракта; поле используется начиная с 6-й версии транзакции

storedContract.imageHash

Array[Bytes]

Хэш Docker-образа Docker смарт-контракта; поле используется начиная с 6-й версии транзакции

storedContract.apiVersion

Byte

Версия API для gRPC-методов Docker смарт-контракта (см. Сервисы gRPC, используемые смарт-контрактом); поле используется начиная с 6-й версии транзакции; поле не используется для WASM смарт-контрактов

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

Подписание:

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

Публикация:

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

Подписание:

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

Публикация:

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

Подписание:

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

Публикация:

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

Подписание:

{
  "image" : "we-sc/grpc_validatable_stateless:0.1",
  "imageHash" : "bd98a7d3e55506ff936d8ea15e170a24d27662edd1b47e4fd20801d10655af8d",
  "sender" : "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
  "password": "",
  "fee" : 100000000,
  "contractId" : "HSLdKYqLq4LcZpq9LPki8Yv4ZRkFapVyHEYw1vZW2MoG",
  "type" : 107,
  "version" : 5,
  "atomicBadge" : null
  "groupParticipants" : [ "3NgSJRdMYu4ZbNpSbyRNZLJDX926W7e1EKQ", "3NtieMGjVAH1nDsvnSEJ37BSW3hpJV2CneY"],
  "groupOwners" : [ "3NgSJRdMYu4ZbNpSbyRNZLJDX926W7e1EKQ", "3NtieMGjVAH1nDsvnSEJ37BSW3hpJV2CneY"],
  "validationPolicy" : {
    "type" : "any"
}

Публикация:

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

Подписание:

{
  "sender": "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
  "password": "",
  "fee": 100000000,
  "contractId": "HcJTMMpcLaMXme2hLzC7JqZ5Dn8ecfNeKkwHNYCVfdFZ",
  "type": 107,
  "version": 6,
  "feeAssetId": null,
  "groupParticipants": [],
  "groupOwners": [],
  "validationPolicy": {"type": "any"},
  "storedContract":
    {
      "bytecode": "AGFzbQEAAAABGgRgA39/fgF/YAR/f39/An9+YAABf2ABfgF/Aj4DA2VudgZtZW1vcnkCAQIQBGVudjAPc2V0X3N0b3JhZ2VfaW50AAAEZW52MA9nZXRfc3RvcmFnZV9pbnQAAQMEAwICAwYQA38BQRALfwBBFwt/AEEgCwdFBQxfY29uc3RydWN0b3IAAgtpbmNyZW1lbnRfMQADCWluY3JlbWVudAAECl9fZGF0YV9lbmQDAQtfX2hlYXBfYmFzZQMCCoYBAxIAQZCAgIAAQQdCABCAgICAAAs4AgF+AX8CQEEAQQBBkICAgABBBxCBgICAACEAIgENAEGQgICAAEEHIABCAXwQgICAgAAhAQsgAQs4AgF+AX8CQEEAQQBBkICAgABBBxCBgICAACEBIgINAEGQgICAAEEHIAEgAHwQgICAgAAhAgsgAgsLDQEAQRALB2NvdW50ZXI=",
      "bytecodeHash": "2d52876455a4d8cd599c16fa0e0ad6f028b76b8494e40f6c4651598f29066013"
    }
}

Публикация:

{
  "senderPublicKey" : "CgqRPcPnexY533gCh2SSvBXh5bca1qMs7KFGntawHGww",
  "fee" : 100000000,
  "type" : 107,
  "version" : 6,
  "sender" : "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
  "feeAssetId" : None,
  'proofs': ['5x2giusM21s5jgSzQDkZABpnRGNrPyDxpTFm2RS1znP9DSEHEuccyPMUmhpPq78U1bKksbemYeRo8mApVWuGybpb'],
  "contractId" : "HcJTMMpcLaMXme2hLzC7JqZ5Dn8ecfNeKkwHNYCVfdFZ",
  "id" : "8PrdyjiM443kYSrBpeU6BVBKkCbnTKcMmAsWHieMvW8n",
  "timestamp" : 1708435405364
  "atomicBadge" : None,
  "groupOwners" : [ ],
  "groupParticipants" : [ ],
  "validationPolicy" : {
    "type" : "any"
  },
  "storedContract" : {
    "bytecode" : "AGFzbQEAAAABLwZgA39/fwF/YAN/f34Bf2AEf39/fwF/YAJ/fwN/f39gAAN/f39gBn9+f39/fwF/ApcBBwNlbnYGbWVtb3J5AgECEARlbnYwEHNldF9zdG9yYWdlX2Jvb2wAAARlbnYwD3NldF9zdG9yYWdlX2ludAABBGVudjASc2V0X3N0b3JhZ2Vfc3RyaW5nAAIEZW52MAdiYXNlXzU4AAMEZW52MBJzZXRfc3RvcmFnZV9iaW5hcnkAAgRlbnYwDWdldF90eF9zZW5kZXIABAMDAgUFBhIDfwFBEAt/AEHBAAt/AEHQAAsHPAQMX2NvbnN0cnVjdG9yAAYOdXBkYXRlX3N0b3JhZ2UABwpfX2RhdGFfZW5kAwELX19oZWFwX2Jhc2UDAgqqAgKrAQACQEGQgICAAEEKIAAQgICAgAAiAA0AQZqAgIAAQQkgARCBgICAACIADQBBo4CAgABBDCACIAMQgoCAgAAiAA0AIAQgBRCDgICAABohAyIADQAgBCAFEIOAgIAAIQIaIgANAEGvgICAAEENIAMgAhCEgICAACIADQAQhYCAgAAaIQMiAA0AEIWAgIAAIQIaIgANAEG8gICAAEEFIAMgAhCEgICAACEACyAAC3sAAkBBkICAgABBCiAAEICAgIAAIgANAEGagICAAEEJIAEQgYCAgAAiAA0AQaOAgIAAQQwgAiADEIKAgIAAIgANACAEIAUQg4CAgAAaIQMiAA0AIAQgBRCDgICAACECGiIADQBBr4CAgABBDSADIAIQhICAgAAhAAsgAAsLNwEAQRALMWJvb2xfdmFsdWVpbnRfdmFsdWVzdHJpbmdfdmFsdWVhZGRyZXNzX3ZhbHVlb3duZXI=",
    "bytecodeHash" : "1afd57a7be47a0f762821bdbe2099c9590efd4471a716e5f0da60a06bc317ec6"
  },
}

Версия 4

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

Поля для настройки валидации смарт-контракта:

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

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

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

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

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

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

Версия 5

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

Поля для работы с конфиденциальными смарт-контрактами:
  • в поле groupParticipants определяется состав группы (политики), нодам-участникам которой разрешён доступ к данным конфиденциального смарт-контракта; максимальный размер группы – 1024 участника;

  • в поле groupOwners задаются ноды, которые могут изменять списки groupParticipants и groupOwners при помощи транзакции UpdateContract; в поле можно указать не более 1024 нод.

Изменять значения полей groupParticipants и groupOwners может только отправитель транзакции UpdateContract, чей адрес указан в поле groupOwners.

Создатель контракта может изменять сам контракт (поля image, imageHash и apiVersion), но поля groupParticipants и groupOwners он может изменять только если его адрес перечислен в поле groupOwners.

Владелец группы (адрес из поля groupOwners) не может изменять сам контракт: поля image, imageHash и apiVersion.

Поля groupParticipants и groupOwners должны быть пустыми, если при создании контракта параметру isConfidential было задано значение false.

Важно

Нельзя обновить контракт, при создании которого параметру isConfidential было задано значение true, если в поле groupParticipants указано менее трёх участников с ролью contract-validator.

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

Версия 6

В версии 6 данной транзакции реализована поддержка WASM смарт-контрактов. Для этого удалены поля image, imageHash, apiVersion и реализовано поле storedContract:

  • для Docker смарт-контрактов:

    "storedContract" : {
       "image" : String
       "imageHash": String
       "apiVersion" : Byte,
    }
    
  • Для WASM смарт-контрактов:

    "storedContract" : {
       "bytecode" : <bytecode contracts>
       "bytecodeHash" : "Sha256 от <bytecode contracts>"
    }
    

Важно

Невозможно обновить Docker смарт-контракт на WASM смарт-контракт.

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

Важно

В релизе 1.14.0 WASM смарт-контракты не поддерживают атомарные транзакции и конфиденциальные смарт-контракты. Поэтому для WASM смарт-контракта поле atomicBadge должно отсустствовать в JSON на подписание или иметь значение null; следующие поля должны иметь следующие значения:

...
"groupParticipants": [],
"groupOwners": [],
...

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
}

Подписание:

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

Публикация:

{
  "senderPublicKey" : "FWz5gZ2w2ZxXbKEiwhgEcZKT4we1Wneh9XqmCeGPsA4r",
  "nodeName" : "GATEs node",
  "fee" : 1100000,
  "opType" : "add",
  "type" : 111,
  "version" : 2,
  "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

Array[Bytes]

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

fee

Long

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

description

Array[byte]

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

owners

Array[Bytes]

Массив адресов-администраторов группы доступа через запятую: администраторы имеют право изменять группу доступа

type

Byte

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

version

Byte

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

Публикация:

Поле

Тип данных

Описание

type

Byte

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

id

Byte

ID транзакции создания группы доступа

sender

ByteStr

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

senderPublicKey

PublicKeyAccount

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

policyName

String

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

recipients

Array[Bytes]

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

owners

Array[Bytes]

Массив адресов-администраторов группы доступа через запятую: администраторы имеют право изменять группу доступа

fee

Long

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

feeAssetId

Byte

ID токена комиссии – опциональное поле

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": 1,
}

Публикация:

 {
    "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": 1,
}

Подписание:

{
  "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,
    "feeAssetId" : null,
    "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"
  ],
  "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

Array[Bytes]

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

fee

Long

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

opType

String

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

owners

Array[Bytes]

Массив адресов-администраторов группы доступа через запятую: администраторы имеют право изменять группу доступа

type

Byte

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

version

Byte

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

Публикация:

Поле

Тип данных

Описание

type

Byte

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

id

Byte

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

sender

ByteStr

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

senderPublicKey

PublicKeyAccount

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

policyId

String

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

recipients

Array[Bytes]

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

owners

Array[Bytes]

Массив адресов-администраторов группы доступа через запятую: администраторы имеют право изменять группу доступа

fee

Long

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

feeAssetId

Byte

ID токена комиссии – опциональное поле

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": 1
 }

Публикация:

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

Подписание:

{
  "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

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

feeAssetId

Byte

ID токена комиссии – опциональное поле

timestamp

Long

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

proofs

List(ByteStr)

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

height

Byte

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

version

Byte

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

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

Публикация:

{
  "senderPublicKey":   "4L4XEpNpesX9r6rVJ8hW1TrMiNCZ6SMvRuWPKB7T47wKfnp4D84XBUv7xsa36CGwoyK3fzfojivwonHNrsX2fLBL",
  "dataHash": "8GPtHQeLxhtt8HianM9c8otS2EeAHNVZCfpCRUmYbSFi",
  "fee": 0,
  "type": 114,
  "version": 1,
  "policyId": "75rGACZxkTE5x5seNjEzJUEe73fTzkQiBrr28hCjMMVq",
  "sender": "3M3ybNZvLG7o7rnM4F7ViRPnDTfVggdfmRX",
  "proofs": [

  "5uW8SeX4k3nb8esuMeRY27MyZ6dnWijwbGhSo53zSKY1FjjofWiE4mPfNwUhYKgqyAtHtUvwsdTMyL87LGNqwp5o"
  ],
  "id": "52zCNUhfne9HYfHr7sEYBGFHqnzHKBdkGbGnsYfCYXug",
  "timestamp": 1632916536685,
  "height": 1585580
}

Публикация:

{
  "senderPublicKey":   "4L4XEpNpesX9r6rVJ8hW1TrMiNCZ6SMvRuWPKB7T47wKfnp4D84XBUv7xsa36CGwoyK3fzfojivwonHNrsX2fLBL",
  "dataHash": "8GPtHQeLxhtt8HianM9c8otS2EeAHNVZCfpCRUmYbSFi",
  "fee": 0,
  "type": 114,
  "version": 2,
  "policyId": "75rGACZxkTE5x5seNjEzJUEe73fTzkQiBrr28hCjMMVq",
  "sender": "3M3ybNZvLG7o7rnM4F7ViRPnDTfVggdfmRX",
  "feeAssetId": null,
  "proofs": [

  "5uW8SeX4k3nb8esuMeRY27MyZ6dnWijwbGhSo53zSKY1FjjofWiE4mPfNwUhYKgqyAtHtUvwsdTMyL87LGNqwp5o"
  ],
  "id": "52zCNUhfne9HYfHr7sEYBGFHqnzHKBdkGbGnsYfCYXug",
  "timestamp": 1632916536685,
  "height": 1585580
}

Публикация:

{
  "senderPublicKey": "4L4XEpNpesX9r6rVJ8hW1TrMiNCZ6SMvRuWPKB7T47wKfnp4D84XBUv7xsa36CGwoyK3fzfojivwonHNrsX2fLBL",
  "dataHash": "8GPtHQeLxhtt8HianM9c8otS2EeAHNVZCfpCRUmYbSFi",
  "fee": 0,
  "type": 114,
  "version": 3,
  "atomicBadge": {
    "trustedSender": "3M3ybNZvLG7o7rnM4F7ViRPnDTfVggdfmRX"
  },
  "policyId": "75rGACZxkTE5x5seNjEzJUEe73fTzkQiBrr28hCjMMVq",
  "sender": "3M3ybNZvLG7o7rnM4F7ViRPnDTfVggdfmRX",
  "feeAssetId": null,
  "proofs": [

  "5uW8SeX4k3nb8esuMeRY27MyZ6dnWijwbGhSo53zSKY1FjjofWiE4mPfNwUhYKgqyAtHtUvwsdTMyL87LGNqwp5o"
  ],
  "id": "52zCNUhfne9HYfHr7sEYBGFHqnzHKBdkGbGnsYfCYXug",
  "timestamp": 1632916536685,
  "height": 1585580
}

120. Atomic Transaction

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

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

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

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

Подписание:

Поле

Тип данных

Описание

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,
}
Смотрите также