waves_logo Docs
  • Обзор
    Обзор
  • Практические руководства
    • Получение данных из блокчейна
      Получение данных из блокчейна
    • Создание и отправка транзакций
      Создание и отправка транзакций
    • Токенизация
      Токенизация
    • Распространение токена (airdrop)
      Распространение токена (airdrop)
    • Прием платежей
      Прием платежей
    • Обмен токенов
      Обмен токенов
    • Простое голосование
      Простое голосование
    • Список как аргумент
      Список как аргумент
    Практические руководства
  • Смарт-контракты Waves
    Смарт-контракты Waves
  • dApp
    • Создание и запуск dApp
      Создание и запуск dApp
    dApp
  • Cмарт-аккаунт
    • Создание смарт-аккаунта
      Создание смарт-аккаунта
    • [en] Creating and deploying a script manually
      [en] Creating and deploying a script manually
    • [en] Video tutorials
      [en] Video tutorials
    Cмарт-аккаунт
  • Cмарт-ассет
    Cмарт-ассет
  • Инструменты разработчика
    • Waves IDE
      Waves IDE
    • Расширение для VS Code
      Расширение для VS Code
    • Surfboard
      Surfboard
    • Ride REPL
      Ride REPL
    Инструменты разработчика
  • Signer ◆
    Signer ◆
  • Waves API
    • Data Service API
      Data Service API
    • Node REST API 🡥
      Node REST API 🡥
    • Node gRPC Server 🡥
      Node gRPC Server 🡥
    • Blockchain Updates 🡥
      Blockchain Updates 🡥
    Waves API
  • Клиентские библиотеки
    • Waves C#
      • Установка SDK
        Установка SDK
      • Запуск кода
        • Отправка транзакций
          Отправка транзакций
        • Использование криптографических утилит
          Использование криптографических утилит
        • Взаимодействие с нодой
          Взаимодействие с нодой
        • Развертывание смарт-контрактов
          Развертывание смарт-контрактов
        Запуск кода
      Waves C#
    • Gowaves
      • Установка SDK
        Установка SDK
      • Запуск кода
        • Отправка транзакций
          Отправка транзакций
        • Использование криптографических утилит
          Использование криптографических утилит
        • Взаимодействие с нодой
          Взаимодействие с нодой
        • Развертывание смарт-контрактов
          Развертывание смарт-контрактов
        Запуск кода
      Gowaves
    • WavesJ
      • Установка SDK
        Установка SDK
      WavesJ
    • Ts-lib-crypto
      • Установка SDK
        Установка SDK
      Ts-lib-crypto
    • Waves-PHP
      • Установка SDK
        Установка SDK
      Waves-PHP
    • Waves-python
      • Установка SDK
        Установка SDK
      Waves-python
    • Waves-rust
      • Установка SDK
        Установка SDK
      Waves-rust
    Клиентские библиотеки
      • English
      • Русский
      On this page
        • Требования
        • Руководство
      waves_logo Docs

          # Отправка транзакций

          Убедитесь в выполнении требований для отправки транзакций.

          # Требования

          • Кошелёк: Создайте кошелёк с помощью Keeper Wallet или WX Network .

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

          • Токены: Получите токены WAVES для оплаты комиссии каждой транзакции:
            • Для сети Mainnet: Приобретите 0.001 WAVES через доступные способы пополнения кошелька .
            • Для сети Testnet: Приобретите 0.001 WAVES через Faucet .
            • Для сети Stagenet: Приобретите 0.001 WAVES через Faucet .

          # Руководство

          Выполните шаги инструкции для необходимого типа транзакции:

          • Issue.
          • Reissue.
          • Burn.
          • Transfer.
          • Mass Transfer.
          • Exchange.
          • Lease.
          • Lease Cancel.
          • Create Alias.
          • Data.
          • Set Script.
          • Set Asset Script.
          • Update Asset Info.
          • Invoke Script.
          • Sponsor Fee.

          # Issue

          О транзакции Issue.

          В директории проекта:

          1. Замените содержимое файла waves.go следующим блоком кода:
            package main
            
            // Необходимые импорты.
            import (
                "bytes"
                "context"
                "encoding/binary"
                "fmt"
                "net/http"
                "time"
            
                "github.com/wavesplatform/gowaves/pkg/client"
                "github.com/wavesplatform/gowaves/pkg/crypto"
                "github.com/wavesplatform/gowaves/pkg/proto"
            )
            
            func main() {
                /*
                Укажите сеть:
                - Mainnet: `proto.MainNetScheme`
                - Testnet: `proto.TestNetScheme`
                - Stagenet: `proto.StageNetScheme`
                */
                const network = proto.TestNetScheme
                nodeClient, err := client.NewClient(client.Options{
                    /*
                    Укажите ссылку на сеть:
                    - Mainnet: "https://nodes.wavesnodes.com/"
                    - Testnet: "https://nodes-testnet.wavesnodes.com/"
                    - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
                    */
                    BaseUrl: "https://nodes-testnet.wavesnodes.com/",
                    Client:  &http.Client{},
                    ChainID: network,
                })
            
                // Вывод ошибки при её нахождении.
                if err != nil {
                    panic(err)
                }
            
                // Укажите параметры кошелька.
                const (
                    accountNumber = 0 // Порядковый номер кошелька. 0 по умолчанию.
                    // Укажите сид-фразу вашего кошелька.
                    seedPhrase = "УКАЖИТЕ СИД-ФРАЗУ"
                )
            
                // Преобразование сид-фразы в необходимый формат.
                accountNumConcatSeedPhrase := bytes.Join([][]byte{
                    binary.BigEndian.AppendUint32(nil, accountNumber),
                    []byte(seedPhrase),
                }, nil)
                
                // Получение деталей сид-фразы.
                accountSeed, err := crypto.SecureHash(accountNumConcatSeedPhrase)
                if err != nil {
                    panic(err)
                }
            
                // Генерация пары приватного и публичного ключей из сид-фразы.
                senderPrivateKey, senderPublicKey, err := crypto.GenerateKeyPair(accountSeed.Bytes())
                if err != nil {
                    panic(err)
                }
            
                // Текущее время в миллисекундах.
                currentTime := uint64(time.Now().UnixMilli())       
            
                // Опционально. Укажите скрипт ассета.
                rideScript := `
                    {-# STDLIB_VERSION 6 #-}
                    {-# CONTENT_TYPE EXPRESSION #-}
                    {-# SCRIPT_TYPE ASSET #-}
                    
                    func trueReturner () = {
                        true
                    }
            
                    trueReturner()
                `
            
                // Компиляция Ride-скрипта.
                compiledScript, errList := compiler.Compile(rideScript, true, true)
                if errList != nil && len(errList) > 0 {
                    // Поиск ошибок на этапе компиляции.
                    panic(fmt.Sprintf("Ошибка компиляции скрипта: %v", errList))
                }
            
                // Создание Issue-транзакцию.
                createTx := proto.NewUnsignedIssueWithProofs(
                    2,                     // Версия транзакции.
                    senderPublicKey,       // Публичный ключ отправителя.
                    "НАИМЕНОВАНИЕ_ТОКЕНА", // Наименование.
                    "ОПИСАНИЕ_ТОКЕНА",     // Описание.
                    uint64(9876543210),    // Количество.
                    byte(2),               // Знаков после запятой.
                    true,                  // Флаг, указывающий на возможность повторного выпуска актива.
                    compiledScript,        // Скрипт ассета или `nil`.
                    currentTime,           // Временная метка.
                    100000000,             // Комиссия в WAVES в наименьшей единице. Например, `100000000` для 1 токена.
                )
            
                // Подпись транзакции приватным ключом отправителя.
                err = createTx.Sign(network, senderPrivateKey)
                if err != nil {
                    panic(err)
                }
            
                // Контекст для отмены выполнения запроса по таймауту.
                contextcreateTx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
                defer cancel()
            
                // Отправка транзакции на ноду.
                _, err = nodeClient.Transactions.Broadcast(contextcreateTx, createTx)
                if err != nil {
                    panic(err)
                }
            
                // Вывод сообщения об успешности отправки транзакции.
                fmt.Printf("Транзакция %q успешно отправлена\n", createTx.ID.String())
            
                // Задержка времени для ожидания появления транзакции в блокчейне.
                time.Sleep(5 * time.Second)
            
                // Получение информации о транзакции от ноды.
                createTxInfo, _, err := nodeClient.Transactions.Info(contextcreateTx, *createTx.ID)
                if err != nil {
                    panic(err)
                }
            
                // Вывод информации о транзакции.
                fmt.Printf("Информация о транзакции: %+v\n", createTxInfo)
            }
            
          2. Установите необходимые зависимости:
            go mod tidy
            
          3. Запустите приложение:
            go run waves.go
            

          # Reissue

          О транзакции Reissue.

          Обратите внимание: Вы можете перевевыпустить только ассет, созданный вами с флагом перевыпускаемости (reissue) со значением true.

          В директории проекта:

          1. Замените содержимое файла waves.go следующим блоком кода:
            package main
            
            // Необходимые импорты.
            import (
                "bytes"
                "context"
                "encoding/binary"
                "fmt"
                "net/http"
                "time"
            
                "github.com/wavesplatform/gowaves/pkg/client"
                "github.com/wavesplatform/gowaves/pkg/crypto"
                "github.com/wavesplatform/gowaves/pkg/proto"
            )
            
            func main() {
                /*
                Укажите сеть:
                - Mainnet: `proto.MainNetScheme`
                - Testnet: `proto.TestNetScheme`
                - Stagenet: `proto.StageNetScheme`
                */
                const network = proto.TestNetScheme
                nodeClient, err := client.NewClient(client.Options{
                    /*
                    Укажите ссылку на сеть:
                    - Mainnet: "https://nodes.wavesnodes.com/"
                    - Testnet: "https://nodes-testnet.wavesnodes.com/"
                    - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
                    */
                    BaseUrl: "https://nodes-testnet.wavesnodes.com/",
                    Client:  &http.Client{},
                    ChainID: network,
                })
            
                // Вывод ошибки при её нахождении.
                if err != nil {
                    panic(err)
                }
            
                // Укажите параметры кошелька.
                const (
                    accountNumber = 0 // Порядковый номер кошелька. 0 по умолчанию.
                    // Укажите сид-фразу вашего кошелька.
                    seedPhrase = "УКАЖИТЕ СИД-ФРАЗУ"
                )
            
                // Преобразование сид-фразы в необходимый формат.
                accountNumConcatSeedPhrase := bytes.Join([][]byte{
                    binary.BigEndian.AppendUint32(nil, accountNumber),
                    []byte(seedPhrase),
                }, nil)
                
                // Получение деталей сид-фразы.
                accountSeed, err := crypto.SecureHash(accountNumConcatSeedPhrase)
                if err != nil {
                    panic(err)
                }
            
                // Генерация пары приватного и публичного ключей из сид-фразы.
                senderPrivateKey, senderPublicKey, err := crypto.GenerateKeyPair(accountSeed.Bytes())
                if err != nil {
                    panic(err)
                }
            
                // Текущее время в миллисекундах.
                currentTime := uint64(time.Now().UnixMilli())
            
                // Укажите ID перевыпускаемого актива.
                assetID, err := crypto.NewDigestFromBase58("УКАЖИТЕ ID АКТИВА")
                if err != nil {
                    panic(err)
                }
            
                // Build a Reissue Еransaction.
                createTx := proto.NewUnsignedReissueWithSig(
                    senderPublicKey, // Публичный ключ отправителя транзакции.
                    assetID,         // ID актива.
                    100,             // Новое количество токена в наименьшей единице. Например, `100` для 1.
                    true,            // Новое значение флага перевыпускаемости актива.
                    currentTime,     // Текущее время.
                    100000000,       // Комиссия в WAVES в наименьшей единице. Например, `100000000` для 1 токена.
                )
            
                // Подпись транзакции приватным ключом отправителя.
                err = createTx.Sign(network, senderPrivateKey)
                if err != nil {
                    panic(err)
                }
            
                // Контекст для отмены выполнения запроса по таймауту.
                contextcreateTx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
                defer cancel()
            
                // Отправка транзакции на ноду.
                _, err = nodeClient.Transactions.Broadcast(contextcreateTx, createTx)
                if err != nil {
                    panic(err)
                }
            
                // Вывод сообщения об успешности отправки транзакции.
                fmt.Printf("Транзакция %q успешно отправлена\n", createTx.ID.String())
            
                // Задержка времени для ожидания появления транзакции в блокчейне.
                time.Sleep(5 * time.Second)
            
                // Получение информации о транзакции от ноды.
                createTxInfo, _, err := nodeClient.Transactions.Info(contextcreateTx, *createTx.ID)
                if err != nil {
                    panic(err)
                }
            
                // Вывод информации о транзакции.
                fmt.Printf("Информация о транзакции: %+v\n", createTxInfo)
            }
            
          2. Установите необходимые зависимости:
            go mod tidy
            
          3. Запустите приложение:
            go run waves.go
            

          # Burn

          О транзакции Burn.

          В директории проекта:

          1. Замените содержимое файла waves.go следующим блоком кода:
            package main
            
            // Необходимые импорты.
            import (
                "bytes"
                "context"
                "encoding/binary"
                "fmt"
                "net/http"
                "time"
            
                "github.com/wavesplatform/gowaves/pkg/client"
                "github.com/wavesplatform/gowaves/pkg/crypto"
                "github.com/wavesplatform/gowaves/pkg/proto"
            )
            
            func main() {
                /*
                Укажите сеть:
                - Mainnet: `proto.MainNetScheme`
                - Testnet: `proto.TestNetScheme`
                - Stagenet: `proto.StageNetScheme`
                */
                const network = proto.TestNetScheme
                nodeClient, err := client.NewClient(client.Options{
                    /*
                    Укажите ссылку на сеть:
                    - Mainnet: "https://nodes.wavesnodes.com/"
                    - Testnet: "https://nodes-testnet.wavesnodes.com/"
                    - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
                    */
                    BaseUrl: "https://nodes-testnet.wavesnodes.com/",
                    Client:  &http.Client{},
                    ChainID: network,
                })
            
                // Вывод ошибки при её нахождении.
                if err != nil {
                    panic(err)
                }
            
                // Укажите параметры кошелька.
                const (
                    accountNumber = 0 // Порядковый номер кошелька. 0 по умолчанию.
                    // Укажите сид-фразу вашего кошелька.
                    seedPhrase = "УКАЖИТЕ СИД-ФРАЗУ"
                )
            
                // Преобразование сид-фразы в необходимый формат.
                accountNumConcatSeedPhrase := bytes.Join([][]byte{
                    binary.BigEndian.AppendUint32(nil, accountNumber),
                    []byte(seedPhrase),
                }, nil)
                
                // Получение деталей сид-фразы.
                accountSeed, err := crypto.SecureHash(accountNumConcatSeedPhrase)
                if err != nil {
                    panic(err)
                }
            
                // Генерация пары приватного и публичного ключей из сид-фразы.
                senderPrivateKey, senderPublicKey, err := crypto.GenerateKeyPair(accountSeed.Bytes())
                if err != nil {
                    panic(err)
                }
            
                // Текущее время в миллисекундах.
                currentTime := uint64(time.Now().UnixMilli())
            
                // Укажите ID сжигаемого ассета.
                assetID, err := crypto.NewDigestFromBase58("УКАЖИТЕ ID АССЕТА")
                if err != nil {
                    panic(err)
                }
            
                // Создание Burn-транзакции.
                createTx := proto.NewUnsignedBurnWithSig(
                    senderPublicKey, // Публичный ключ отправителя транзакции.
                    assetID,         // ID актива.
                    100,    	     // Количество токена в наименьшей единице. Например, `100` для 1.
                    currentTime,     // Текущее время.
                    1000000,         // Комиссия в WAVES в наименьшей единице. Например, `100000000` для 1 токена.
                )
            
                // Подпись транзакции приватным ключом отправителя.
                err = createTx.Sign(network, senderPrivateKey)
                if err != nil {
                    panic(err)
                }
            
                // Контекст для отмены выполнения запроса по таймауту.
                contextcreateTx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
                defer cancel()
            
                // Отправка транзакции на ноду.
                _, err = nodeClient.Transactions.Broadcast(contextcreateTx, createTx)
                if err != nil {
                    panic(err)
                }
            
                // Вывод сообщения об успешности отправки транзакции.
                fmt.Printf("Транзакция %q успешно отправлена\n", createTx.ID.String())
            
                // Задержка времени для ожидания появления транзакции в блокчейне.
                time.Sleep(5 * time.Second)
            
                // Получение информации о транзакции от ноды.
                createTxInfo, _, err := nodeClient.Transactions.Info(contextcreateTx, *createTx.ID)
                if err != nil {
                    panic(err)
                }
            
                // Вывод информации о транзакции.
                fmt.Printf("Информация о транзакции: %+v\n", createTxInfo)
            }
            
          2. Установите необходимые зависимости:
            go mod tidy
            
          3. Запустите приложение:
            go run waves.go
            

          # Transfer

          О транзакции Transfer.

          В директории проекта:

          1. Замените содержимое файла waves.go следующим блоком кода:
            package main
            
            // Необходимые импорты.
            import (
                "bytes"
                "context"
                "encoding/binary"
                "fmt"
                "net/http"
                "time"
            
                "github.com/wavesplatform/gowaves/pkg/client"
                "github.com/wavesplatform/gowaves/pkg/crypto"
                "github.com/wavesplatform/gowaves/pkg/proto"
            )
            
            func main() {
                /*
                Укажите сеть:
                - Mainnet: `proto.MainNetScheme`
                - Testnet: `proto.TestNetScheme`
                - Stagenet: `proto.StageNetScheme`
                */
                const network = proto.TestNetScheme
                nodeClient, err := client.NewClient(client.Options{
                    /*
                    Укажите ссылку на сеть:
                    - Mainnet: "https://nodes.wavesnodes.com/"
                    - Testnet: "https://nodes-testnet.wavesnodes.com/"
                    - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
                    */
                    BaseUrl: "https://nodes-testnet.wavesnodes.com/",
                    Client:  &http.Client{},
                    ChainID: network,
                })
            
                // Вывод ошибки при её нахождении.
                if err != nil {
                    panic(err)
                }
            
                // Укажите параметры кошелька.
                const (
                    accountNumber = 0 // Порядковый номер кошелька. 0 по умолчанию.
                    // Укажите сид-фразу вашего кошелька.
                    seedPhrase = "УКАЖИТЕ СИД-ФРАЗУ"
                )
            
                // Преобразование сид-фразы в необходимый формат.
                accountNumConcatSeedPhrase := bytes.Join([][]byte{
                    binary.BigEndian.AppendUint32(nil, accountNumber),
                    []byte(seedPhrase),
                }, nil)
                
                // Получение деталей сид-фразы.
                accountSeed, err := crypto.SecureHash(accountNumConcatSeedPhrase)
                if err != nil {
                    panic(err)
                }
            
                // Генерация пары приватного и публичного ключей из сид-фразы.
                senderPrivateKey, senderPublicKey, err := crypto.GenerateKeyPair(accountSeed.Bytes())
                if err != nil {
                    panic(err)
                }
            
                // Текущее время в миллисекундах.
                currentTime := uint64(time.Now().UnixMilli())
            
                // Укажите адрес получателя.
                recipientAddr, err := proto.NewAddressFromString("УКАЖИТЕ АДРЕС ПОЛУЧАТЕЛЯ")
                if err != nil {
                    panic(err)
                }
                recipient := proto.NewRecipientFromAddress(recipientAddr)
            
                /* 
                Укажите ассет для трансфера:
                - Введите "WAVES" для транзакции в нативном WAVES-токене.
                - Или введите ID ассета.
                */
                amountAsset, err := proto.NewOptionalAssetFromString("WAVES")
                if err != nil {
                    panic(err)
                }
            
                // Укажите WAVES в качестве актива для уплаты комиссии.
                feeAsset, err := proto.NewOptionalAssetFromString("WAVES")
                if err != nil {
                    panic(err)
                }
            
                // Добавьте приложение.
                attachment := []byte("ВВЕДИТЕ СООБЩЕНИЕ ПРИЛОЖЕНИЯ")
            
                // Создайте Transfer-транзакцию.
                createTx := proto.NewUnsignedTransferWithSig(
                    senderPublicKey, // Публичный ключ отправителя транзакции.
                    *amountAsset,    // Количество актива.
                    *feeAsset,       // Актив для уплаты комиссии транзакции.
                    currentTime,     // Текущее время.
                    200000000,       // Сумма трансфера в наименьшей единице. Например, `100000000` для 1 токена.
                    100000,          // Комиссия в WAVES в наименьшей единице. Например, `100000000` для 1 токена.
                    recipient,       // Адрес получателя.
                    attachment,      // Сообщение приложения.
                )	
            
                // Подпись транзакции приватным ключом отправителя.
                err = createTx.Sign(network, senderPrivateKey)
                if err != nil {
                    panic(err)
                }
            
                // Контекст для отмены выполнения запроса по таймауту.
                contextcreateTx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
                defer cancel()
            
                // Отправка транзакции на ноду.
                _, err = nodeClient.Transactions.Broadcast(contextcreateTx, createTx)
                if err != nil {
                    panic(err)
                }
            
                // Вывод сообщения об успешности отправки транзакции.
                fmt.Printf("Транзакция %q успешно отправлена\n", createTx.ID.String())
            
                // Задержка времени для ожидания появления транзакции в блокчейне.
                time.Sleep(5 * time.Second)
            
                // Получение информации о транзакции от ноды.
                createTxInfo, _, err := nodeClient.Transactions.Info(contextcreateTx, *createTx.ID)
                if err != nil {
                    panic(err)
                }
            
                // Вывод информации о транзакции.
                fmt.Printf("Информация о транзакции: %+v\n", createTxInfo)
            }
            
          2. Установите необходимые зависимости:
            go mod tidy
            
          3. Запустите приложение:
            go run waves.go
            

          # Mass Transfer

          О транзакции Mass Transfer.

          В директории проекта:

          1. Замените содержимое файла waves.go следующим блоком кода:
            package main
            
            // Необходимые импорты.
            import (
                "bytes"
                "context"
                "encoding/binary"
                "fmt"
                "net/http"
                "time"
            
                "github.com/wavesplatform/gowaves/pkg/client"
                "github.com/wavesplatform/gowaves/pkg/crypto"
                "github.com/wavesplatform/gowaves/pkg/proto"
            )
            
            func main() {
                /*
                Укажите сеть:
                - Mainnet: `proto.MainNetScheme`
                - Testnet: `proto.TestNetScheme`
                - Stagenet: `proto.StageNetScheme`
                */
                const network = proto.TestNetScheme
                nodeClient, err := client.NewClient(client.Options{
                    /*
                    Укажите ссылку на сеть:
                    - Mainnet: "https://nodes.wavesnodes.com/"
                    - Testnet: "https://nodes-testnet.wavesnodes.com/"
                    - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
                    */
                    BaseUrl: "https://nodes-testnet.wavesnodes.com/",
                    Client:  &http.Client{},
                    ChainID: network,
                })
            
                // Вывод ошибки при её нахождении.
                if err != nil {
                    panic(err)
                }
            
                // Укажите параметры кошелька.
                const (
                    accountNumber = 0 // Порядковый номер кошелька. 0 по умолчанию.
                    // Укажите сид-фразу вашего кошелька.
                    seedPhrase = "УКАЖИТЕ СИД-ФРАЗУ"
                )
            
                // Преобразование сид-фразы в необходимый формат.
                accountNumConcatSeedPhrase := bytes.Join([][]byte{
                    binary.BigEndian.AppendUint32(nil, accountNumber),
                    []byte(seedPhrase),
                }, nil)
                
                // Получение деталей сид-фразы.
                accountSeed, err := crypto.SecureHash(accountNumConcatSeedPhrase)
                if err != nil {
                    panic(err)
                }
            
                // Генерация пары приватного и публичного ключей из сид-фразы.
                senderPrivateKey, senderPublicKey, err := crypto.GenerateKeyPair(accountSeed.Bytes())
                if err != nil {
                    panic(err)
                }
            
                // Текущее время в миллисекундах.
                currentTime := uint64(time.Now().UnixMilli())
            
                // Укажите адрес первого получателя.
                addr1, err := proto.NewAddressFromString("УКАЖИТЕ АДРЕС ПЕРВОГО ПОЛУЧАТЕЛЯ")
                if err != nil {
                    panic(err)
                }
            
                // Укажите адрес второго получателя.
                addr2, err := proto.NewAddressFromString("УКАЖИТЕ АДРЕС ВТОРОГО ПОЛУЧАТЕЛЯ")
                if err != nil {
                    panic(err)
                }
            
                // Укажите адрес третьего получателя.
                addr3, err := proto.NewAddressFromString("УКАЖИТЕ АДРЕС ТРЕЬЕГО ПОЛУЧАТЕЛЯ")
                if err != nil {
                    panic(err)
                }
            
                // Форматирование адресов получателей.
                recipient1 := proto.NewRecipientFromAddress(addr1)
                recipient2 := proto.NewRecipientFromAddress(addr2)
                recipient3 := proto.NewRecipientFromAddress(addr3)
            
                /* 
                Укажите ассет для трансфера:
                - Введите "WAVES" для транзакции в нативном WAVES-токене.
                - Или введите ID ассета.
                */
                asset, err := proto.NewOptionalAssetFromString("WAVES")
                if err != nil {
                    panic(err)
                }
            
                // Укажите сумму трансфера для каждого из получателей.
                transfers := []proto.MassTransferEntry{
                    {Recipient: recipient1, Amount: 100000},
                    {Recipient: recipient2, Amount: 100000},
                    {Recipient: recipient3, Amount: 100000},
                }
            
                // Добавьте приложение.
                attachment := []byte("ВВЕДИТЕ СООБЩЕНИЕ ПРИЛОЖЕНИЯ")
            
                // Создайте транзакцию Mass Transfer.
                createTx := proto.NewUnsignedMassTransferWithProofs(
                    1,               // Версия транзакции.
                    senderPublicKey, // Публичный ключ отправителя.
                    *asset,          // Актив для перевода.
                    transfers,       // Список получателей и сумм трансферов.
                    300000,          // Комиссия в WAVES в наименьшей единице. Например, `100000000` для 1 токена.
                    currentTime,     // Текущее время.
                    attachment,      // Приложенное сообщение.
                )
                        
                // Подпись транзакции приватным ключом отправителя.
                err = createTx.Sign(network, senderPrivateKey)
                if err != nil {
                    panic(err)
                }
            
                // Контекст для отмены выполнения запроса по таймауту.
                contextcreateTx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
                defer cancel()
            
                // Отправка транзакции на ноду.
                _, err = nodeClient.Transactions.Broadcast(contextcreateTx, createTx)
                if err != nil {
                    panic(err)
                }
            
                // Вывод сообщения об успешности отправки транзакции.
                fmt.Printf("Транзакция %q успешно отправлена\n", createTx.ID.String())
            
                // Задержка времени для ожидания появления транзакции в блокчейне.
                time.Sleep(5 * time.Second)
            
                // Получение информации о транзакции от ноды.
                createTxInfo, _, err := nodeClient.Transactions.Info(contextcreateTx, *createTx.ID)
                if err != nil {
                    panic(err)
                }
            
                // Вывод информации о транзакции.
                fmt.Printf("Информация о транзакции: %+v\n", createTxInfo)
            }
            
          2. Установите необходимые зависимости:
            go mod tidy
            
          3. Запустите приложение:
            go run waves.go
            

          # Exchange

          О транзакции Exchange.

          В директории проекта:

          1. Замените содержимое файла waves.go следующим блоком кода:
            package main
            
            // Необходимые импорты.
            import (
                "bytes"
                "context"
                "encoding/binary"
                "fmt"
                "net/http"
                "time"
            
                "github.com/wavesplatform/gowaves/pkg/client"
                "github.com/wavesplatform/gowaves/pkg/crypto"
                "github.com/wavesplatform/gowaves/pkg/proto"
            )
            
            func main() {
                /*
                Укажите сеть:
                - Mainnet: `proto.MainNetScheme`
                - Testnet: `proto.TestNetScheme`
                - Stagenet: `proto.StageNetScheme`
                */
                const network = proto.TestNetScheme
                nodeClient, err := client.NewClient(client.Options{
                    /*
                    Укажите ссылку на сеть:
                    - Mainnet: "https://nodes.wavesnodes.com/"
                    - Testnet: "https://nodes-testnet.wavesnodes.com/"
                    - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
                    */
                    BaseUrl: "https://nodes-testnet.wavesnodes.com/",
                    Client:  &http.Client{},
                    ChainID: network,
                })
            
                // Вывод ошибки при её нахождении.
                if err != nil {
                    panic(err)
                }
            
                // Укажите параметры кошелька.
                const (
                    accountNumber = 0 // Порядковый номер кошелька. 0 по умолчанию.
                    // Укажите сид-фразу вашего кошелька.
                    seedPhrase = "УКАЖИТЕ СИД-ФРАЗУ"
                )
            
                // Преобразование сид-фразы в необходимый формат.
                accountNumConcatSeedPhrase := bytes.Join([][]byte{
                    binary.BigEndian.AppendUint32(nil, accountNumber),
                    []byte(seedPhrase),
                }, nil)
            
                // Получение деталей сид-фразы.
                accountSeed, err := crypto.SecureHash(accountNumConcatSeedPhrase)
                if err != nil {
                    panic(err)
                }
            
                // Генерация пары приватного и публичного ключей из сид-фразы.
                senderPrivateKey, senderPublicKey, err := crypto.GenerateKeyPair(accountSeed.Bytes())
                if err != nil {
                    panic(err)
                }
            
                // Текущее время в миллисекундах.
                currentTime := uint64(time.Now().UnixMilli())
            
                // Укажите ID актива, подлежащего обмену.
                amountAsset, err := proto.NewOptionalAssetFromString("УКАЖИТЕ ID АКТИВА")
                if err != nil {
                    panic(err)
                }
            
                // Укажите стоимость актива.
                priceAsset, err := proto.NewOptionalAssetFromString("")
                if err != nil {
                    panic(err)
                }
            
                // Время истечения срока действия ордера.
                expiration := currentTime + 100*1000
            
                // Создайте ордер на покупку.
                buyOrder := proto.NewUnsignedOrderV1(
                    senderPublicKey, // Публичный ключ отправителя.
                    senderPublicKey, // Публичный ключ матчера (`senderPublicKey` указан в качестве примера).
                    *amountAsset,    // Актив для покупки.
                    *priceAsset,     // Актив, используемый для оплаты: WAVES.
                    proto.Buy,       // Тип ордера: покупка.
                    100,             // Цена в `priceAsset` за `amountAsset`, в наименьшей единице.
                    100,             // Общая сумма оредера, в наименьшей единице.
                    currentTime,     // Временная метка ордера.
                    expiration,      // Время истечения срока действия ордера.
                    1000000,         // Комиссия в WAVES в наименьшей единице. Например, `100000000` для 1 токена.
                )
                err = buyOrder.Sign(proto.TestNetScheme, senderPrivateKey)
                if err != nil {
                    panic(err)
                }
            
                // Создайте ордер на продажу.
                sellOrder := proto.NewUnsignedOrderV1(
                    senderPublicKey, // Публичный ключ отправителя.
                    senderPublicKey, // Публичный ключ матчера (`senderPublicKey` указан в качестве примера).
                    *amountAsset,    // Актив для продажи.
                    *priceAsset,     // Получаемый актив.
                    proto.Sell,      // Тип ордера: продажа.
                    100,             // Цена. Должна соответствовать ордеру на покупку.
                    100,             // Сумма для продажи.
                    currentTime,     // Время создания ордера.
                    expiration,      // Время истечения срока действия ордера.
                    1000000,         // Комиссия в WAVES в наименьшей единице. Например, `100000000` для 1 токена.
                )
                err = sellOrder.Sign(proto.TestNetScheme, senderPrivateKey)
                if err != nil {
                    panic(err)
                }
            
                // Укажите параметры транзакции обмена.
                price := sellOrder.Price      // Цена обоих заказов должна совпадать.
                amount := uint64(456)         // Сумма обмена.
                buyMatcherFee := uint64(789)  // Комиссия матчера на покупку.
                sellMatcherFee := uint64(987) // Комиссия матчера на продажу.
                fee := uint64(3000000)        // Комиссия сети за отправку транзакции.
            
                // Создайте Exchange-транзакцию.
                createTx := proto.NewUnsignedExchangeWithSig(
                    buyOrder,       // Ордер на покупку.
                    sellOrder,      // Ордер на продажу.
                    price,          // Согласованная цена ордера.
                    amount,         // Сумма обмениваемого актива.
                    buyMatcherFee,  // Комиссия матчера на покупку.
                    sellMatcherFee, // Комиссия матчера на продажу.
                    fee,            // Комиссия транзакции.
                    currentTime,    // Временная метка.
                )
            
                // Подпись транзакции приватным ключом отправителя.
                err = createTx.Sign(proto.TestNetScheme, senderPrivateKey)
                if err != nil {
                    panic(err)
                }
            
                // Контекст для отмены выполнения запроса по таймауту.
                ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
                defer cancel()
            
                // Отправка транзакции на ноду.
                _, err = nodeClient.Transactions.Broadcast(ctx, createTx)
                if err != nil {
                    panic(err)
                }
            
                // Вывод сообщения об успешности отправки транзакции.
                fmt.Printf("Транзакция %q успешно отправлена\n", createTx.ID.String())
            
                // Задержка времени для ожидания появления транзакции в блокчейне.
                time.Sleep(5 * time.Second)
            
                // Получение информации о транзакции от ноды.
                createTxInfo, _, err := nodeClient.Transactions.Info(ctx, *createTx.ID)
                if err != nil {
                    panic(err)
                }
            
                // Вывод информации о транзакции.
                fmt.Printf("Информация о транзакции: %+v\n", createTxInfo)
            }
            
          2. Установите необходимые зависимости:
            go mod tidy
            
          3. Запустите приложение:
            go run waves.go
            

          # Lease

          О транзакции Lease.

          В директории проекта:

          1. Замените содержимое файла waves.go следующим блоком кода:
            package main
            
            // Необходимые импорты.
            import (
                "bytes"
                "context"
                "encoding/binary"
                "fmt"
                "net/http"
                "time"
            
                "github.com/wavesplatform/gowaves/pkg/client"
                "github.com/wavesplatform/gowaves/pkg/crypto"
                "github.com/wavesplatform/gowaves/pkg/proto"
            )
            
            func main() {
                /*
                Укажите сеть:
                - Mainnet: `proto.MainNetScheme`
                - Testnet: `proto.TestNetScheme`
                - Stagenet: `proto.StageNetScheme`
                */
                const network = proto.TestNetScheme
                nodeClient, err := client.NewClient(client.Options{
                    /*
                    Укажите ссылку на сеть:
                    - Mainnet: "https://nodes.wavesnodes.com/"
                    - Testnet: "https://nodes-testnet.wavesnodes.com/"
                    - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
                    */
                    BaseUrl: "https://nodes-testnet.wavesnodes.com/",
                    Client:  &http.Client{},
                    ChainID: network,
                })
            
                // Вывод ошибки при её нахождении.
                if err != nil {
                    panic(err)
                }
            
                // Укажите параметры кошелька.
                const (
                    accountNumber = 0 // Порядковый номер кошелька. 0 по умолчанию.
                    // Укажите сид-фразу вашего кошелька.
                    seedPhrase = "УКАЖИТЕ СИД-ФРАЗУ"
                )
            
                // Преобразование сид-фразы в необходимый формат.
                accountNumConcatSeedPhrase := bytes.Join([][]byte{
                    binary.BigEndian.AppendUint32(nil, accountNumber),
                    []byte(seedPhrase),
                }, nil)
                
                // Получение деталей сид-фразы.
                accountSeed, err := crypto.SecureHash(accountNumConcatSeedPhrase)
                if err != nil {
                    panic(err)
                }
            
                // Генерация пары приватного и публичного ключей из сид-фразы.
                senderPrivateKey, senderPublicKey, err := crypto.GenerateKeyPair(accountSeed.Bytes())
                if err != nil {
                    panic(err)
                }
            
                // Текущее время в миллисекундах.
                currentTime := uint64(time.Now().UnixMilli())
            
                // Укажите адрес получателя лизинга.
                recipientAddr, err := proto.NewAddressFromString("УКАЖИТЕ АДРЕС ПОЛУЧАТЕЛЯ")
                if err != nil {
                    panic(err)
                }
                recipient := proto.NewRecipientFromAddress(recipientAddr)
            
                // Укажите сумму лизинга.
                leaseAmount := uint64(1234567890)
            
                // Укажите комиссию за транзакцию.
                leaseFee := uint64(100000) // Рекомендуемая минимальная комиссия за Lease-транзакцию.
            
                // Создайте Lease-транзакцию.
                createTx := proto.NewUnsignedLeaseWithSig(
                    senderPublicKey, // Публичный ключ отправителя транзакции.
                    recipient,       // Получатель актива.
                    leaseAmount,     // Сумма лизинга.
                    leaseFee,        // Комиссия за транзакцию.
                    currentTime,     // Текущее время.
                )
            
                // Подпись транзакции приватным ключом отправителя.
                err = createTx.Sign(network, senderPrivateKey)
                if err != nil {
                    panic(err)
                }
            
                // Контекст для отмены выполнения запроса по таймауту.
                contextcreateTx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
                defer cancel()
            
                // Отправка транзакции на ноду.
                _, err = nodeClient.Transactions.Broadcast(contextcreateTx, createTx)
                if err != nil {
                    panic(err)
                }
            
                // Вывод сообщения об успешности отправки транзакции.
                fmt.Printf("Транзакция %q успешно отправлена\n", createTx.ID.String())
            
                // Задержка времени для ожидания появления транзакции в блокчейне.
                time.Sleep(5 * time.Second)
            
                // Получение информации о транзакции от ноды.
                createTxInfo, _, err := nodeClient.Transactions.Info(contextcreateTx, *createTx.ID)
                if err != nil {
                    panic(err)
                }
            
                // Вывод информации о транзакции.
                fmt.Printf("Информация о транзакции: %+v\n", createTxInfo)
            }
            
          2. Установите необходимые зависимости:
            go mod tidy
            
          3. Запустите приложение:
            go run waves.go
            

          # Lease Cancel

          О транзакции Lease Cancel.

          В директории проекта:

          1. Замените содержимое файла waves.go следующим блоком кода:
            package main
            
            // Необходимые импорты.
            import (
                "bytes"
                "context"
                "encoding/binary"
                "fmt"
                "net/http"
                "time"
            
                "github.com/wavesplatform/gowaves/pkg/client"
                "github.com/wavesplatform/gowaves/pkg/crypto"
                "github.com/wavesplatform/gowaves/pkg/proto"
            )
            
            func main() {
                /*
                Укажите сеть:
                - Mainnet: `proto.MainNetScheme`
                - Testnet: `proto.TestNetScheme`
                - Stagenet: `proto.StageNetScheme`
                */
                const network = proto.TestNetScheme
                nodeClient, err := client.NewClient(client.Options{
                    /*
                    Укажите ссылку на сеть:
                    - Mainnet: "https://nodes.wavesnodes.com/"
                    - Testnet: "https://nodes-testnet.wavesnodes.com/"
                    - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
                    */
                    BaseUrl: "https://nodes-testnet.wavesnodes.com/",
                    Client:  &http.Client{},
                    ChainID: network,
                })
            
                // Вывод ошибки при её нахождении.
                if err != nil {
                    panic(err)
                }
            
                // Укажите параметры кошелька.
                const (
                    accountNumber = 0 // Порядковый номер кошелька. 0 по умолчанию.
                    // Укажите сид-фразу вашего кошелька.
                    seedPhrase = "УКАЖИТЕ СИД-ФРАЗУ"
                )
            
                // Преобразование сид-фразы в необходимый формат.
                accountNumConcatSeedPhrase := bytes.Join([][]byte{
                    binary.BigEndian.AppendUint32(nil, accountNumber),
                    []byte(seedPhrase),
                }, nil)
                
                // Получение деталей сид-фразы.
                accountSeed, err := crypto.SecureHash(accountNumConcatSeedPhrase)
                if err != nil {
                    panic(err)
                }
            
                // Генерация пары приватного и публичного ключей из сид-фразы.
                senderPrivateKey, senderPublicKey, err := crypto.GenerateKeyPair(accountSeed.Bytes())
                if err != nil {
                    panic(err)
                }
            
                // Текущее время в миллисекундах.
                currentTime := uint64(time.Now().UnixMilli())
            
                // Укажите ID Lease-транзакции, которую требуется отменить.
                leaseID, err := crypto.NewDigestFromBase58("УКАЖИТЕ ID LEASE-ТРАНЗАКЦИИ")
                if err != nil {
                    panic(err)
                }
            
                // Укажите комиссию за транзакцию.
                cancelFee := uint64(100000) // Минимальная комиссия за транзакцию.
            
                // Создайте транзакцию Lease Cancel.
                createTx := proto.NewUnsignedLeaseCancelWithSig(
                    senderPublicKey, // Публичный ключ отправителя транзакции.
                    leaseID,         // ID Lease-транзакции.
                    cancelFee,       // Комиссия за транзакцию.
                    currentTime,     // Текущее время.
                )
            
                // Подпись транзакции приватным ключом отправителя.
                err = createTx.Sign(network, senderPrivateKey)
                if err != nil {
                    panic(err)
                }
            
                // Контекст для отмены выполнения запроса по таймауту.
                contextcreateTx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
                defer cancel()
            
                // Отправка транзакции на ноду.
                _, err = nodeClient.Transactions.Broadcast(contextcreateTx, createTx)
                if err != nil {
                    panic(err)
                }
            
                // Вывод сообщения об успешности отправки транзакции.
                fmt.Printf("Транзакция %q успешно отправлена\n", createTx.ID.String())
            
                // Задержка времени для ожидания появления транзакции в блокчейне.
                time.Sleep(5 * time.Second)
            
                // Получение информации о транзакции от ноды.
                createTxInfo, _, err := nodeClient.Transactions.Info(contextcreateTx, *createTx.ID)
                if err != nil {
                    panic(err)
                }
            
                // Вывод информации о транзакции.
                fmt.Printf("Информация о транзакции: %+v\n", createTxInfo)
            }
            
          2. Установите необходимые зависимости:
            go mod tidy
            
          3. Запустите приложение:
            go run waves.go
            

          # Create Alias

          О транзакции Create Alias.

          В директории проекта:

          1. Замените содержимое файла waves.go следующим блоком кода:
            package main
            
            // Необходимые импорты.
            import (
                "bytes"
                "context"
                "encoding/binary"
                "fmt"
                "net/http"
                "strconv"
                "time"
            
                "github.com/wavesplatform/gowaves/pkg/client"
                "github.com/wavesplatform/gowaves/pkg/crypto"
                "github.com/wavesplatform/gowaves/pkg/proto"
            )
            
            func main() {
                /*
                Укажите сеть:
                - Mainnet: `proto.MainNetScheme`
                - Testnet: `proto.TestNetScheme`
                - Stagenet: `proto.StageNetScheme`
                */
                const network = proto.TestNetScheme
                nodeClient, err := client.NewClient(client.Options{
                    /*
                    Укажите ссылку на сеть:
                    - Mainnet: "https://nodes.wavesnodes.com/"
                    - Testnet: "https://nodes-testnet.wavesnodes.com/"
                    - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
                    */
                    BaseUrl: "https://nodes-testnet.wavesnodes.com/",
                    Client:  &http.Client{},
                    ChainID: network,
                })
            
                // Вывод ошибки при её нахождении.
                if err != nil {
                    panic(err)
                }
            
                // Укажите параметры кошелька.
                const (
                    accountNumber = 0 // Порядковый номер кошелька. 0 по умолчанию.
                    // Укажите сид-фразу вашего кошелька.
                    seedPhrase = "УКАЖИТЕ СИД-ФРАЗУ"
                )
            
                // Преобразование сид-фразы в необходимый формат.
                accountNumConcatSeedPhrase := bytes.Join([][]byte{
                    binary.BigEndian.AppendUint32(nil, accountNumber),
                    []byte(seedPhrase),
                }, nil)
                
                // Получение деталей сид-фразы.
                accountSeed, err := crypto.SecureHash(accountNumConcatSeedPhrase)
                if err != nil {
                    panic(err)
                }
            
                // Генерация пары приватного и публичного ключей из сид-фразы.
                senderPrivateKey, senderPublicKey, err := crypto.GenerateKeyPair(accountSeed.Bytes())
                if err != nil {
                    panic(err)
                }
            
                // Текущее время в миллисекундах.
                currentTime := uint64(time.Now().UnixMilli())
            
                // Создание псевдонима с помощью текущего времени.
                alias := proto.NewAlias(network, strconv.FormatUint(currentTime, 10))
            
                // Создайте транзакцию Create Alias.
                createTx := proto.NewUnsignedCreateAliasWithProofs(
                    3,               // Версия транзакции.
                    senderPublicKey, // Публичный ключ отправителя.
                    *alias,          // Псевдоним.
                    100000,          // Комиссия в WAVES в наименьшей единице. Например, `100000000` для 1 токена.
                    currentTime)     // Текущее время в миллисекундах.
            
            
                // Подпись транзакции приватным ключом отправителя.
                err = createTx.Sign(network, senderPrivateKey)
                if err != nil {
                    panic(err)
                }
            
                // Контекст для отмены выполнения запроса по таймауту.
                contextcreateTx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
                defer cancel()
            
                // Отправка транзакции на ноду.
                _, err = nodeClient.Transactions.Broadcast(contextcreateTx, createTx)
                if err != nil {
                    panic(err)
                }
            
                // Вывод сообщения об успешности отправки транзакции.
                fmt.Printf("Транзакция %q успешно отправлена\n", createTx.ID.String())
            
                // Задержка времени для ожидания появления транзакции в блокчейне.
                time.Sleep(5 * time.Second)
            
                // Получение информации о транзакции от ноды.
                createTxInfo, _, err := nodeClient.Transactions.Info(contextcreateTx, *createTx.ID)
                if err != nil {
                    panic(err)
                }
            
                // Вывод информации о транзакции.
                fmt.Printf("Информация о транзакции: %+v\n", createTxInfo)
            }
            
          2. Установите необходимые зависимости:
            go mod tidy
            
          3. Запустите приложение:
            go run waves.go
            

          # Data

          О транзакции Data.

          В директории проекта:

          1. Замените содержимое файла waves.go следующим блоком кода:
            package main
            
            // Необходимые импорты.
            import (
                "bytes"
                "context"
                "encoding/binary"
                "fmt"
                "net/http"
                "time"
            
                "github.com/mr-tron/base58/base58"
                "github.com/wavesplatform/gowaves/pkg/client"
                "github.com/wavesplatform/gowaves/pkg/crypto"
                "github.com/wavesplatform/gowaves/pkg/proto"
            )
            
            func main() {
                /*
                Укажите сеть:
                - Mainnet: `proto.MainNetScheme`
                - Testnet: `proto.TestNetScheme`
                - Stagenet: `proto.StageNetScheme`
                */
                const network = proto.TestNetScheme
                nodeClient, err := client.NewClient(client.Options{
                    /*
                    Укажите ссылку на сеть:
                    - Mainnet: "https://nodes.wavesnodes.com/"
                    - Testnet: "https://nodes-testnet.wavesnodes.com/"
                    - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
                    */
                    BaseUrl: "https://nodes-testnet.wavesnodes.com/",
                    Client:  &http.Client{},
                    ChainID: network,
                })
            
                // Вывод ошибки при её нахождении.
                if err != nil {
                    panic(err)
                }
            
                // Укажите параметры кошелька.
                const (
                    accountNumber = 0 // Порядковый номер кошелька. 0 по умолчанию.
                    // Укажите сид-фразу вашего кошелька.
                    seedPhrase = "УКАЖИТЕ СИД-ФРАЗУ"
                )
            
                // Преобразование сид-фразы в необходимый формат.
                accountNumConcatSeedPhrase := bytes.Join([][]byte{
                    binary.BigEndian.AppendUint32(nil, accountNumber),
                    []byte(seedPhrase),
                }, nil)
                
                // Получение деталей сид-фразы.
                accountSeed, err := crypto.SecureHash(accountNumConcatSeedPhrase)
                if err != nil {
                    panic(err)
                }
            
                // Генерация пары приватного и публичного ключей из сид-фразы.
                senderPrivateKey, senderPublicKey, err := crypto.GenerateKeyPair(accountSeed.Bytes())
                if err != nil {
                    panic(err)
                }
            
                // Текущее время в миллисекундах.
                currentTime := uint64(time.Now().UnixMilli())
            
                // Создайте Data-транзакцию.
                createTx := proto.NewUnsignedDataWithProofs(
                    1,               // Версия транзакции.
                    senderPublicKey, // Публичный ключ отправителя.
                    100000,          // Комиссия в WAVES в наименьшей единице. Например, `100000000` для 1 токена.
                    currentTime,     // Текущее время.
                )
            
                // Декодирование бинарного значения, необходимого для транзакции.
                decoded, err := base58.Decode("4JMP6WwpP78EVYZzG9CKQKDUTPUdvMCYGKVNn4G3VdHmW5mZKNXbvHvuvA8Nj6p39k8htY9VkM6uSf5ombFzETJq") // Пример значения.
                if err != nil {
                    panic(err)
                }
            
                // Добавление записей данных.
                entries := []proto.DataEntry{
                    &proto.IntegerDataEntry{Key: "int-val", Value: 1234567890},
                    &proto.BooleanDataEntry{Key: "bool-val", Value: true},
                    &proto.BinaryDataEntry{Key: "bin-val", Value: decoded },
                    &proto.StringDataEntry{Key: "string-val", Value: "some string"},
                }
            
                // Обработка записей данных.
                for _, entry := range entries {
                    err := createTx.AppendEntry(entry)
                    if err != nil {
                        panic(err)
                    }
                }
            
                // Подпись транзакции приватным ключом отправителя.
                err = createTx.Sign(network, senderPrivateKey)
                if err != nil {
                    panic(err)
                }
            
                // Контекст для отмены выполнения запроса по таймауту.
                contextcreateTx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
                defer cancel()
            
                // Отправка транзакции на ноду.
                _, err = nodeClient.Transactions.Broadcast(contextcreateTx, createTx)
                if err != nil {
                    panic(err)
                }
            
                // Вывод сообщения об успешности отправки транзакции.
                fmt.Printf("Транзакция %q успешно отправлена\n", createTx.ID.String())
            
                // Задержка времени для ожидания появления транзакции в блокчейне.
                time.Sleep(5 * time.Second)
            
                // Получение информации о транзакции от ноды.
                createTxInfo, _, err := nodeClient.Transactions.Info(contextcreateTx, *createTx.ID)
                if err != nil {
                    panic(err)
                }
            
                // Вывод информации о транзакции.
                fmt.Printf("Информация о транзакции: %+v\n", createTxInfo)
            }
            
          2. Установите необходимые зависимости:
            go mod tidy
            
          3. Запустите приложение:
            go run waves.go
            

          # Set Script

          О транзакции Set Script.

          В директории проекта:

          1. Замените содержимое файла waves.go следующим блоком кода:
            package main
            
            // Необходимые импорты.
            import (
                "bytes"
                "context"
                "encoding/binary"
                "fmt"
                "net/http"
                "time"
            
                "github.com/wavesplatform/gowaves/pkg/client"
                "github.com/wavesplatform/gowaves/pkg/crypto"
                "github.com/wavesplatform/gowaves/pkg/proto"
                "github.com/wavesplatform/gowaves/pkg/ride/compiler"
            )
            
            func main() {
                /*
                Укажите сеть:
                - Mainnet: `proto.MainNetScheme`
                - Testnet: `proto.TestNetScheme`
                - Stagenet: `proto.StageNetScheme`
                */
                const network = proto.TestNetScheme
                nodeClient, err := client.NewClient(client.Options{
                    /*
                    Укажите ссылку на сеть:
                    - Mainnet: "https://nodes.wavesnodes.com/"
                    - Testnet: "https://nodes-testnet.wavesnodes.com/"
                    - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
                    */
                    BaseUrl: "https://nodes-testnet.wavesnodes.com/",
                    Client:  &http.Client{},
                    ChainID: network,
                })
            
                // Вывод ошибки при её нахождении.
                if err != nil {
                    panic(err)
                }
            
                // Укажите параметры кошелька.
                const (
                    accountNumber = 0 // Порядковый номер кошелька. 0 по умолчанию.
                    // Укажите сид-фразу вашего кошелька.
                    seedPhrase = "УКАЖИТЕ СИД-ФРАЗУ"
                )
            
                // Преобразование сид-фразы в необходимый формат.
                accountNumConcatSeedPhrase := bytes.Join([][]byte{
                    binary.BigEndian.AppendUint32(nil, accountNumber),
                    []byte(seedPhrase),
                }, nil)
            
                // Получение деталей сид-фразы.
                accountSeed, err := crypto.SecureHash(accountNumConcatSeedPhrase)
                if err != nil {
                    panic(err)
                }
            
                // Генерация пары приватного и публичного ключей из сид-фразы.
                senderPrivateKey, senderPublicKey, err := crypto.GenerateKeyPair(accountSeed.Bytes())
                if err != nil {
                    panic(err)
                }
            
                // Текущее время в миллисекундах.
                currentTime := uint64(time.Now().UnixMilli())
            
                // Укажите Ride-скрипта вашего аккаунта.
                rideScript := `
                    {-# STDLIB_VERSION 8 #-}
                    {-# CONTENT_TYPE DAPP #-}
                    {-# SCRIPT_TYPE ACCOUNT #-}
                    
                    @Callable(i)
                    func checkStorageUntouchedByAlias(accountAlias: String) = {
                        let alias = Alias(accountAlias)
                        let res = if isDataStorageUntouched(alias) then {
                            unit
                        } else {
                            throw("Data storage is not untouched by alias")
                        }
                        ([], res)
                    }
                `
            
                // Компиляция Ride-скрипта.
                compiledScript, errList := compiler.Compile(rideScript, true, true) // `true` для DApp и `true` для типа `ACCOUNT`.
                if errList != nil && len(errList) > 0 {
                    // Поиск ошибок на этапе компиляции.
                    panic(fmt.Sprintf("Ошибка компиляции скрипта: %v", errList))
                }
            
                // Создайте транзакцию Set Script.
                setScriptFee := uint64(1400000)
                createTx := proto.NewUnsignedSetScriptWithProofs(
                    1,               // Версия транзакции.
                    senderPublicKey, // Публичный ключ отправителя.
                    compiledScript,  // Скомпилированный скрипт или `nil` для удаления скрипта аккаунта.
                    setScriptFee,    // Комиссия за транзакцию.
                    currentTime,     // Текущее время.
                )
            
                // Подпись транзакции приватным ключом отправителя.
                err = createTx.Sign(network, senderPrivateKey)
                if err != nil {
                    panic(err)
                }
            
                // Контекст для отмены выполнения запроса по таймауту.
                contextcreateTx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
                defer cancel()
            
                // Отправка транзакции на ноду.
                _, err = nodeClient.Transactions.Broadcast(contextcreateTx, createTx)
                if err != nil {
                    panic(err)
                }
            
                // Вывод сообщения об успешности отправки транзакции.
                fmt.Printf("Транзакция %q успешно отправлена\n", createTx.ID.String())
            
                // Задержка времени для ожидания появления транзакции в блокчейне.
                time.Sleep(5 * time.Second)
            
                // Получение информации о транзакции от ноды.
                createTxInfo, _, err := nodeClient.Transactions.Info(contextcreateTx, *createTx.ID)
                if err != nil {
                    panic(err)
                }
            
                // Вывод информации о транзакции.
                fmt.Printf("Информация о транзакции: %+v\n", createTxInfo)
            }
            
          2. Установите необходимые зависимости:
            go mod tidy
            
          3. Запустите приложение:
            go run waves.go
            

          # Set Asset Script

          О транзакции Set Asset Script.

          Обратите внимание: Вы можете установить скрипт актива только для тех активов, которые были выпущены с установленным Ride-скриптом .

          В директории проекта:

          1. Замените содержимое файла waves.go следующим блоком кода:
            package main
            
            // Необходимые импорты.
            import (
                "bytes"
                "context"
                "encoding/binary"
                "fmt"
                "net/http"
                "time"
            
                "github.com/wavesplatform/gowaves/pkg/client"
                "github.com/wavesplatform/gowaves/pkg/crypto"
                "github.com/wavesplatform/gowaves/pkg/proto"
                "github.com/wavesplatform/gowaves/pkg/ride/compiler"
            )
            
            func main() {
                /*
                Укажите сеть:
                - Mainnet: `proto.MainNetScheme`
                - Testnet: `proto.TestNetScheme`
                - Stagenet: `proto.StageNetScheme`
                */
                const network = proto.TestNetScheme
                nodeClient, err := client.NewClient(client.Options{
                    /*
                    Укажите ссылку на сеть:
                    - Mainnet: "https://nodes.wavesnodes.com/"
                    - Testnet: "https://nodes-testnet.wavesnodes.com/"
                    - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
                    */
                    BaseUrl: "https://nodes-testnet.wavesnodes.com/",
                    Client:  &http.Client{},
                    ChainID: network,
                })
            
                // Вывод ошибки при её нахождении.
                if err != nil {
                    panic(err)
                }
            
                // Укажите параметры кошелька.
                const (
                    accountNumber = 0 // Порядковый номер кошелька. 0 по умолчанию.
                    // Укажите сид-фразу вашего кошелька.
                    seedPhrase = "УКАЖИТЕ СИД-ФРАЗУ"
                )
            
                // Преобразование сид-фразы в необходимый формат.
                accountNumConcatSeedPhrase := bytes.Join([][]byte{
                    binary.BigEndian.AppendUint32(nil, accountNumber),
                    []byte(seedPhrase),
                }, nil)
                
                // Получение деталей сид-фразы.
                accountSeed, err := crypto.SecureHash(accountNumConcatSeedPhrase)
                if err != nil {
                    panic(err)
                }
            
                // Генерация пары приватного и публичного ключей из сид-фразы.
                senderPrivateKey, senderPublicKey, err := crypto.GenerateKeyPair(accountSeed.Bytes())
                if err != nil {
                    panic(err)
                }
            
                // Текущее время в миллисекундах.
                currentTime := uint64(time.Now().UnixMilli())
            
                // Укажите ID актива.
                assetID, err := crypto.NewDigestFromBase58("УКАЖИТЕ ID АКТИВА")
                if err != nil {
                    panic(err)
                }
            
                // Укажите Ride-скрипт ассета.
                rideScript := `
                {-# STDLIB_VERSION 8 #-}
                {-# CONTENT_TYPE EXPRESSION #-}
                {-# SCRIPT_TYPE ASSET #-}
            
                true
                `
            
                // Компиляция Ride-скрипта.
                compiledScript, errList := compiler.Compile(rideScript, false, true)
                if errList != nil && len(errList) > 0 {
                    panic(fmt.Sprintf("Ошибка компиляции скрипта: %v", errList))
                }
            
                // Создайте транзакцию Set Asset Script.
                createTx := proto.NewUnsignedSetAssetScriptWithProofs(
                    1,               // Версия транзакции.
                    senderPublicKey, // Публичный ключ отправителя.
                    assetID,         // ID актива.
                    compiledScript,  // Скомпилированный Ride-скрипт.
                    99600000,        // Комиссия в WAVES в наименьшей единице. Например, `100000000` для 1 токена.
                    currentTime,     // Текущее время.
                )
            
                // Подпись транзакции приватным ключом отправителя.
                err = createTx.Sign(network, senderPrivateKey)
                if err != nil {
                    panic(err)
                }
            
                // Контекст для отмены выполнения запроса по таймауту.
                contextcreateTx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
                defer cancel()
            
                // Отправка транзакции на ноду.
                _, err = nodeClient.Transactions.Broadcast(contextcreateTx, createTx)
                if err != nil {
                    panic(err)
                }
            
                // Вывод сообщения об успешности отправки транзакции.
                fmt.Printf("Транзакция %q успешно отправлена\n", createTx.ID.String())
            
                // Задержка времени для ожидания появления транзакции в блокчейне.
                time.Sleep(5 * time.Second)
            
                // Получение информации о транзакции от ноды.
                createTxInfo, _, err := nodeClient.Transactions.Info(contextcreateTx, *createTx.ID)
                if err != nil {
                    panic(err)
                }
            
                // Вывод информации о транзакции.
                fmt.Printf("Информация о транзакции: %+v\n", createTxInfo)
            }
            
          2. Установите необходимые зависимости:
            go mod tidy
            
          3. Запустите приложение:
            go run waves.go
            

          # Update Asset Info

          О транзакции Update Asset Info.

          В директории проекта:

          1. Замените содержимое файла waves.go следующим блоком кода:
            package main
            
            // Необходимые импорты.
            import (
                "bytes"
                "context"
                "encoding/binary"
                "fmt"
                "net/http"
                "time"
            
                "github.com/wavesplatform/gowaves/pkg/client"
                "github.com/wavesplatform/gowaves/pkg/crypto"
                "github.com/wavesplatform/gowaves/pkg/proto"
            )
            
            func main() {
                /*
                Укажите сеть:
                - Mainnet: `proto.MainNetScheme`
                - Testnet: `proto.TestNetScheme`
                - Stagenet: `proto.StageNetScheme`
                */
                const network = proto.TestNetScheme
                nodeClient, err := client.NewClient(client.Options{
                    /*
                    Укажите ссылку на сеть:
                    - Mainnet: "https://nodes.wavesnodes.com/"
                    - Testnet: "https://nodes-testnet.wavesnodes.com/"
                    - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
                    */
                    BaseUrl: "https://nodes-testnet.wavesnodes.com/",
                    Client:  &http.Client{},
                    ChainID: network,
                })
            
                // Вывод ошибки при её нахождении.
                if err != nil {
                    panic(err)
                }
            
                // Укажите параметры кошелька.
                const (
                    accountNumber = 0 // Порядковый номер кошелька. 0 по умолчанию.
                    // Укажите сид-фразу вашего кошелька.
                    seedPhrase = "УКАЖИТЕ СИД-ФРАЗУ"
                )
            
                // Преобразование сид-фразы в необходимый формат.
                accountNumConcatSeedPhrase := bytes.Join([][]byte{
                    binary.BigEndian.AppendUint32(nil, accountNumber),
                    []byte(seedPhrase),
                }, nil)
                
                // Получение деталей сид-фразы.
                accountSeed, err := crypto.SecureHash(accountNumConcatSeedPhrase)
                if err != nil {
                    panic(err)
                }
            
                // Генерация пары приватного и публичного ключей из сид-фразы.
                senderPrivateKey, senderPublicKey, err := crypto.GenerateKeyPair(accountSeed.Bytes())
                if err != nil {
                    panic(err)
                }
            
                // Текущее время в миллисекундах.
                currentTime := uint64(time.Now().UnixMilli())
            
                // Укажите ID ассета.
                assetID, err := crypto.NewDigestFromBase58("УКАЖИТЕ ID АССЕТА")
                if err != nil {
                    panic(err)
                }
            
                // Укажите опциональный актив для оплаты комиссии. Используйте `WAVES` или введите ID ассета.
                feeAsset, err := proto.NewOptionalAssetFromString("WAVES")
                if err != nil {
                    panic(err)
                }
            
                // Создайте транзакцию Update Asset Info.
                createTx := proto.NewUnsignedUpdateAssetInfoWithProofs(
                    1,                    // Версия транзакции.
                    assetID,              // ID ассета.      
                    senderPublicKey       // Публичный ключ отправителя транзакции.
                    "UpdatedName",        // Новое наименование ассета.
                    "UpdatedDescription", // Новое описание ассета.
                    currentTime,          // Временная метка.
                    *feeAsset,            // Ассет для оплаты комиссия транзакции.
                    100000,               // Сумма комиссии.
                )
            
                // Подпись транзакции приватным ключом отправителя.
                err = createTx.Sign(network, senderPrivateKey)
                if err != nil {
                    panic(err)
                }
            
                // Контекст для отмены выполнения запроса по таймауту.
                contextcreateTx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
                defer cancel()
            
                // Отправка транзакции на ноду.
                _, err = nodeClient.Transactions.Broadcast(contextcreateTx, createTx)
                if err != nil {
                    panic(err)
                }
            
                // Вывод сообщения об успешности отправки транзакции.
                fmt.Printf("Транзакция %q успешно отправлена\n", createTx.ID.String())
            
                // Задержка времени для ожидания появления транзакции в блокчейне.
                time.Sleep(5 * time.Second)
            
                // Получение информации о транзакции от ноды.
                createTxInfo, _, err := nodeClient.Transactions.Info(contextcreateTx, *createTx.ID)
                if err != nil {
                    panic(err)
                }
            
                // Вывод информации о транзакции.
                fmt.Printf("Информация о транзакции: %+v\n", createTxInfo)
            }
            
          2. Установите необходимые зависимости:
            go mod tidy
            
          3. Запустите приложение:
            go run waves.go
            

          # Invoke Script

          О транзакции Invoke Script.

          В директории проекта:

          1. Замените содержимое файла waves.go следующим блоком кода:
            package main
            
            // Необходимые импорты.
            import (
                "bytes"
                "context"
                "encoding/binary"
                "encoding/json"
                "fmt"
                "net/http"
                "time"
            
                "github.com/wavesplatform/gowaves/pkg/client"
                "github.com/wavesplatform/gowaves/pkg/crypto"
                "github.com/wavesplatform/gowaves/pkg/proto"
            )
            
            func main() {
                /*
                Укажите сеть:
                - Mainnet: `proto.MainNetScheme`
                - Testnet: `proto.TestNetScheme`
                - Stagenet: `proto.StageNetScheme`
                */
                const network = proto.TestNetScheme
                nodeClient, err := client.NewClient(client.Options{
                    /*
                    Укажите ссылку на сеть:
                    - Mainnet: "https://nodes.wavesnodes.com/"
                    - Testnet: "https://nodes-testnet.wavesnodes.com/"
                    - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
                    */
                    BaseUrl: "https://nodes-testnet.wavesnodes.com/",
                    Client:  &http.Client{},
                    ChainID: network,
                })
            
                // Вывод ошибки при её нахождении.
                if err != nil {
                    panic(err)
                }
            
                // Укажите параметры кошелька.
                const (
                    accountNumber = 0 // Порядковый номер кошелька. 0 по умолчанию.
                    // Укажите сид-фразу вашего кошелька.
                    seedPhrase = "УКАЖИТЕ СИД-ФРАЗУ"
                )
            
                // Преобразование сид-фразы в необходимый формат.
                accountNumConcatSeedPhrase := bytes.Join([][]byte{
                    binary.BigEndian.AppendUint32(nil, accountNumber),
                    []byte(seedPhrase),
                }, nil)
            
                // Получение деталей сид-фразы.
                accountSeed, err := crypto.SecureHash(accountNumConcatSeedPhrase)
                if err != nil {
                    panic(err)
                }
            
                // Генерация пары приватного и публичного ключей из сид-фразы.
                senderPrivateKey, senderPublicKey, err := crypto.GenerateKeyPair(accountSeed.Bytes())
                if err != nil {
                    panic(err)
                }
            
                // Текущее время в миллисекундах.
                currentTime := uint64(time.Now().UnixMilli())
            
                // Укажите адрес dApp-приложения.
                address := "УКАЖИТЕ АДРЕС DAPP-ПРИЛОЖЕНИЯ"
            
                // Укажите параметры вызова скрипта.
                functionCallJSON := `{"function":"bar","args":[{"type":"boolean","value":true}]}`
                
                // Укажите платежные детали.
                paymentsJSON := `[{"amount":67890,"assetId":null}]`
            
                // Укажите ID актива для оплаты комиссии за транзакцию.
                feeAssetID := "УКАЖИТЕ ID АССЕТА"
                fee := uint64(1000) // Сумма комиссии.
            
                // Форматирование адреса dApp-приложения.
                recipientAddr, err := proto.NewAddressFromString(address)
                if err != nil {
                    panic(err)
                }
                recipient := proto.NewRecipientFromAddress(recipientAddr)
            
                // Парсинг вызываемой функции.
                var fc proto.FunctionCall
                err = json.Unmarshal([]byte(functionCallJSON), &fc)
                if err != nil {
                    panic(err)
                }
            
                // Парсинг прикреплённых платежей.
                var sps proto.ScriptPayments
                err = json.Unmarshal([]byte(paymentsJSON), &sps)
                if err != nil {
                    panic(err)
                }
            
                // Парсинг данных актива для оплаты комиссии.
                feeAsset, err := proto.NewOptionalAssetFromString(feeAssetID)
                if err != nil {
                    panic(err)
                }
            
                // Создайте транзакцию Invoke Script.
                var tx *proto.InvokeScriptWithProofs
                tx = proto.NewUnsignedInvokeScriptWithProofs(
                    1,               // Версия транзакции.
                    senderPublicKey, // Публичный ключ отправителя.
                    recipient,       // Адрес dApp-приложения.
                    fc,              // Парсированные функции для вызова.
                    sps,             // Парсированные прикреплённые платежи.
                    *feeAsset,       // Актива для оплаты комиссии.
                    fee,             // Сумма комиссии.
                    currentTime      // Текущее время.
                )
            
                // Подпись транзакции приватным ключом отправителя.
                err = tx.Sign(network, senderPrivateKey)
                if err != nil {
                    panic(err)
                }
            
                // Контекст для отмены выполнения запроса по таймауту.
                contextCreateTx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
                defer cancel()
            
                // Отправка транзакции на ноду.
                _, err = nodeClient.Transactions.Broadcast(contextCreateTx, tx)
                if err != nil {
                    panic(err)
                }
            
                // Вывод сообщения об успешности отправки транзакции.
                fmt.Printf("Транзакция %q успешно отправлена\n", tx.ID.String())
            
                // Задержка времени для ожидания появления транзакции в блокчейне.
                time.Sleep(5 * time.Second)
            
                // Получение информации о транзакции от ноды.
                txInfo, _, err := nodeClient.Transactions.Info(contextCreateTx, *tx.ID)
                if err != nil {
                    panic(err)
                }
            
                // Вывод информации о транзакции.
                fmt.Printf("Информация о транзакции: %+v\n", txInfo)
            }
            
          2. Установите необходимые зависимости:
            go mod tidy
            
          3. Запустите приложение:
            go run waves.go
            

          # Sponsor Fee

          О транзакции Sponsor Fee.

          В директории проекта:

          1. Замените содержимое файла waves.go следующим блоком кода:
            package main
            
            // Необходимые импорты.
            import (
                "bytes"
                "context"
                "encoding/binary"
                "fmt"
                "net/http"
                "time"
            
                "github.com/wavesplatform/gowaves/pkg/client"
                "github.com/wavesplatform/gowaves/pkg/crypto"
                "github.com/wavesplatform/gowaves/pkg/proto"
            )
            
            func main() {
                /*
                Укажите сеть:
                - Mainnet: `proto.MainNetScheme`
                - Testnet: `proto.TestNetScheme`
                - Stagenet: `proto.StageNetScheme`
                */
                const network = proto.TestNetScheme
                nodeClient, err := client.NewClient(client.Options{
                    /*
                    Укажите ссылку на сеть:
                    - Mainnet: "https://nodes.wavesnodes.com/"
                    - Testnet: "https://nodes-testnet.wavesnodes.com/"
                    - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
                    */
                    BaseUrl: "https://nodes-testnet.wavesnodes.com/",
                    Client:  &http.Client{},
                    ChainID: network,
                })
            
                // Вывод ошибки при её нахождении.
                if err != nil {
                    panic(err)
                }
            
                // Укажите параметры кошелька.
                const (
                    accountNumber = 0 // Порядковый номер кошелька. 0 по умолчанию.
                    // Укажите сид-фразу вашего кошелька.
                    seedPhrase = "УКАЖИТЕ СИД-ФРАЗУ"
                )
            
                // Преобразование сид-фразы в необходимый формат.
                accountNumConcatSeedPhrase := bytes.Join([][]byte{
                    binary.BigEndian.AppendUint32(nil, accountNumber),
                    []byte(seedPhrase),
                }, nil)
            
                // Получение деталей сид-фразы.
                accountSeed, err := crypto.SecureHash(accountNumConcatSeedPhrase)
                if err != nil {
                    panic(err)
                }
            
                // Генерация пары приватного и публичного ключей из сид-фразы.
                senderPrivateKey, senderPublicKey, err := crypto.GenerateKeyPair(accountSeed.Bytes())
                if err != nil {
                    panic(err)
                }
            
                // Текущее время в миллисекундах.
                currentTime := uint64(time.Now().UnixMilli())
            
                // Укажите ID спонсорского актива.
                assetID := "УКАЖИТЕ ID СПОНСОРСКОГО АКТИВА"
                assetDigest, _ := crypto.NewDigestFromBase58(assetID)
            
                // Создайте Sponsorship-транзакцию.
                tx := proto.NewUnsignedSponsorshipWithProofs(
                    1,               // Версия транзакции.
                    senderPublicKey, // Публичный ключ отправителя.
                    assetDigest,     // Актив транзакции.
                    100,             // Вознаграждение за спонсирование актива.
                    1234567890,      // Комиссия в WAVES в наименьшей единице. Например, `100000000` для 1 токена.
                    currentTime      // Текущее время.
                )
            
                // Подпись транзакции приватным ключом отправителя.
                err = tx.Sign(network, senderPrivateKey)
                if err != nil {
                    panic(err)
                }
            
                // Контекст для отмены выполнения запроса по таймауту.
                contextCreateTx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
                defer cancel()
            
                // Отправка транзакции на ноду.
                _, err = nodeClient.Transactions.Broadcast(contextCreateTx, tx)
                if err != nil {
                    panic(err)
                }
            
                // Вывод сообщения об успешности отправки транзакции.
                fmt.Printf("Транзакция %q успешно отправлена\n", tx.ID.String())
            
                // Задержка времени для ожидания появления транзакции в блокчейне.
                time.Sleep(5 * time.Second)
            
                // Получение информации о транзакции от ноды.
                txInfo, _, err := nodeClient.Transactions.Info(contextCreateTx, *tx.ID)
                if err != nil {
                    panic(err)
                }
            
                // Вывод информации о транзакции.
                fmt.Printf("Информация о транзакции: %+v\n", txInfo)
            }
            
            
          2. Установите необходимые зависимости:
            go mod tidy
            
          3. Run the application
            go mod run waves.go
            
          Запуск кода
          Использование криптографических утилит
          Запуск кода
          Использование криптографических утилит