Как устроена платформа
Описание транзакций¶
Блокчейн-платформа Waves Enterprise поддерживает 28 типов транзакций. Для каждой из них предусмотрен свой набор данных, отправляемых в блокчейн.
Запросы и ответы, передаваемые в рамках каждой транзакции по REST API-интерфейсу ноды, имеют формат JSON. Формат запросов и ответов, передающихся по gRPC-интерфейсу ноды, определяется соответствующими proto-схемами. JSON и protobuf-представления запросов и ответов каждой транзакции приведены ниже.
Подсказка
В случае если вы защитили ключевую пару вашей ноды паролем при генерации аккаунта, укажите пароль от вашей ключевой пары в поле password
транзакции.
1. Genesis Transaction¶
Первая транзакция нового блокчейна, которая осуществляет первоначальную привязку баланса к адресам созданных нод.
Подписание этой транзакции не требуется, поэтому выполняется только ее публикация. Транзакция не версионируется.
3. Issue Transaction¶
Транзакция, инициирующая выпуск токенов в обращение.
Важно
Если в поле 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¶
Транзакция для перевода токенов с одного адреса на другой.
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¶
Транзакция для довыпуска нативных токенов.
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¶
Транзакция для сжигания нативных токенов: уменьшает количество токенов на счету отправителя, тем самым снижая общее количество токенов в обращении. Сожженные токены невозможно восстановить.
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 блоков.
Передача токенов в лизинг может проводиться для повышения вероятности выбора ноды в качестве майнера следующего раунда. Как правило, в обмен на аренду токенов получатель делится вознаграждением, полученным за генерацию блока, с адресом, предоставившим токены в лизинг.
Токены, переданные в лизинг, остаются заблокированными на адресе отправителя. Отмена лизинга производится с помощью транзакции отмены лизинга.
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
данной транзакции не заполняется: нода автоматически заполняет ее при предоставлении данных о транзакции.
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¶
Создание псевдонима для адреса отправителя. Псевдоним может использоваться для проведения транзакций в качестве идентификатора получателя.
В третьей версии транзакции реализована возможность оплаты комиссии в другом токене. В четвёртой версии транзакции появилась возможность включения транзакцию в атомик.
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 адресов). Комиссия за транзакцию зависит от количества задействованных адресов.
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
.
Структура данных запроса на подписание транзакции:
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¶
Транзакция для привязки скрипта к аккаунту или удаления скрипта. Аккаунт с привязанным к нему скриптом называется смарт-аккаунтом.
Скрипт позволяет верифицировать транзакции, передаваемые от имени аккаунта, без использования механизма верификации транзакций блокчейна.
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.
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¶
Транзакция для установки или удаления скрипта ассета для адреса. Скрипт ассета позволяет верифицировать транзакции с участием того или иного ассета (токена) без использования механизма верификации транзакций блокчейна.
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¶
Транзакция для назначения первого администратора сети, который раздает роли другим участникам.
102. Permission Transaction¶
Выдача или отзыв роли участника. Отправлять транзакцию 102 в блокчейн может только участник с ролью permissioner.
Возможные роли для указания в поле role
:
permissioner
sender
blacklister
miner
issuer
contract_developer
connection_manager
contract_validator
banned
Описание ролей см. в статье Роли участников.
Начиная со второй версии транзакцию 102. Permission Transaction можно включать в атомарную транзакцию.
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.
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
(см. раздел Валидация смарт-контрактов).
Версия 5¶
В версии 5 данной транзакции пользователь может перевести свои активы на баланс контракта. Для этого в поле payments
указывается массив ассетов и их количество. Можно передать как системный токен WEST, так и любые другие ассеты, созданные в сети. Использование версии 5 данной транзакции возможно начиная с релиза 1.12 после активации функциональной возможности 1120.
При работе в частной сети транзакция 103 предусматривает загрузку Docker-образа контракта не только из репозиториев, указанных в секции docker-engine
конфигурационного файла ноды.
Если вам необходимо загрузить смарт-контракт из репозитория, не внесенного в конфигурационный файл, укажите в поле name
транзакции полный адрес смарт-контракта в созданном вами репозитории.
Версия 6¶
В версии 6 данной транзакции реализована поддержка конфиденциальных смарт-контрактов. При регистрации контракта с помощью шестой версии транзакции можно указать, что контракт является конфиденциальным, и определить множество адресов нод, имеющих доступ к приватным данным смарт-контракта. Ниже описаны реализованные для этого поля.
Использование версии 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.16.0 WASM смарт-контракты могут быть конфиденциальными. Поддержка транзакций WASM смарт-контрактов в атомарных контейнерах ожидается в следующих релизах, поэтому для WASM смарт-контракта поле atomicBadge
должно отсутствовать в JSON на подписание или иметь значение null
("atomicBadge" : null,
).
104. CallContract Transaction¶
Вызов смарт-контракта на исполнение. Байтовое представление этой транзакции после ее подписания не должно превышать 150 килобайт.
Подписание транзакции производится инициатором исполнения контракта.
В поле contractVersion
транзакции указывается версия контракта:
1
– для нового контракта;2
– для обновленного контракта.
Данное поле доступно только для транзакций второй версии и выше: если в поле version
транзакции вызова смарт-контракта указано значение >= 2
.
Контракт обновляется при помощи транзакции 107.
До релиза 1.14.0 если контракт не выполнялся или выполнялся с ошибкой, то транзакции 103 и 104 удалялись и не попадали в блок. Начиная с релиза 1.14.0 исполнение смарт-контракта в случае ошибки также сохраняется в блокчейне. Подробнее о алгоритме обработки ошибок смарт-контрактов см. раздел 105. ExecutedContract Transaction – Версия 5.
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.16.0 WASM смарт-контракты могут быть конфиденциальными. Поддержка транзакций WASM смарт-контрактов в атомарных контейнерах ожидается в следующих релизах, поэтому для WASM смарт-контракта поле atomicBadge
должно отсутствовать в JSON на подписание или иметь значение null
("atomicBadge" : null,
).
105. ExecutedContract Transaction¶
Запись результата исполнения смарт-контракта в его стейт. Байтовое представление этой транзакции после ее подписания не должно превышать 150 килобайт.
Транзакция 105 содержит все поля (тело) транзакции 103. CreateContract, 104. CallContract, 107. UpdateContract смарт-контракта, результат исполнения которого необходимо записать в его стейт (поле tx
).
Результат исполнения смарт-контракта вносится в его стейт из соответствующих параметров поля params
транзакции 103 или 104.
Подписание транзакции производится нодой, формирующей блок после отправки запроса на публикацию транзакции.
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¶
Отключение смарт-контракта.
Важно
Транзакция является необратимой, то есть отключенным контрактом нельзя будет пользоваться ни при каких условиях.
Подписать транзакцию 106 может только пользователь с ролью contract_developer.
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, ранее создавший транзакцию 103 CreateContract Transaction для этого смарт-контракта.
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
(см. раздел Валидация смарт-контрактов).
Версия 5¶
В версии 5 данной транзакции реализованы поля, необходимые для работы с конфиденциальными смарт-контрактами.
Использование версии 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.16.0 WASM смарт-контракты могут быть конфиденциальными. Поддержка транзакций WASM смарт-контрактов в атомарных контейнерах ожидается в следующих релизах, поэтому для WASM смарт-контракта поле atomicBadge
должно отсутствовать в JSON на подписание или иметь значение null
("atomicBadge" : null,
).
110. GenesisRegisterNode Transaction¶
Регистрация ноды в генезис-блоке при старте блокчейна.
Данная транзакция не требует подписания.
111. RegisterNode Transaction¶
Регистрация новой ноды в блокчейне или ее удаление.
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¶
Создание группы доступа к конфиденциальным данным из указанных адресов.
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¶
Изменение группы доступа к конфиденциальным данным.
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 или gRPC метода SendData.
Данная транзакция не требует подписания.
Примечание
При включении транзакции 114 в атомарный контейнер транзакция не должна содержать адрес trustedSender
.
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¶
Атомарная транзакция помещает в контейнер другие транзакции для их атомарного выполнения. Транзакция этого типа исполняется полностью (ни одна из включенных транзакций не отклоняется) или не исполняется в принципе.
Поддерживается включение в атомарную транзакцию двух и более транзакций. Типы и версии транзакций, которые могут быть включены в атомарную, перечислены в разделе Атомарные транзакции, там же дана более подробная информация об обработке этого типа транзакций.
Атомарная транзакция сама по себе не требует комиссии: общая сумма складывается из комиссий за транзакции, помещенные в атомарную транзакцию.
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,
}