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

          # Как создать транзакцию и отправить ее на блокчейн

          Все события на блокчейне представлены в виде транзакций. Например:

          • транзакция данных записывает информацию в хранилище данных аккаунта;
          • транзакция перевода отправляет заданное количество токенов с одного аккаунта на другой.

          В Waves предусмотрено множество типов транзакций, см. раздел Тип транзакции. Набор полей транзакции зависит от ее типа.

          Подтверждение транзакции

          В Waves каждая транзакция отправлена с какого-либо аккаунта. Транзакция, отправленная с обычного аккаунта (без установленного скрипта), должна содержать подтверждение — цифровую подпись отправителя. (Смарт-аккаунты и dApp могут устанавливать собственные правила верификации исходящих транзакций.) Подробнее см. в разделе Подтверждение транзакциии.

          Есть два способа сгенерировать подтверждение транзакции:

          • Если приложение отправляет транзакции от вашего имени, вы можете использовать свою секретную фразу (seed) или закрытый ключ для подписания транзакций. Этот способ описан в подразделе Подписание с помощью секретной фразы ниже.
          • Если приложение отправляет транзакции от имени разных пользователей, не следует запрашивать у них секретную фразу или закрытый ключ. Вместо этого используйте официальное приложение-кошелек — например, разработанное командой WX Network. Этот способ описан в подразделе Подписание от имени пользователя ниже.

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

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

          💡 На Testnet пользователи могут пополнять баланс WAVES с помощью Testnet Faucet.

          Процесс

          Чтобы поместить транзакцию в блокчейн:

          1. Заполните поля транзакции.
          2. Подпишите транзакцию: сгенерируйте подтверждение и добавьте его к транзакции.
          3. Отправьте транзакцию на ноду Waves.

          Вы можете отправить транзакцию на свою собственную ноду или одну из нод с публичным API:

          • Testnet: https://nodes-testnet.wavesnodes.com
          • Mainnet: https://nodes.wavesnodes.com

          Нода проверяет валидность транзакции. Если проверка прошла успешно, транзакция помещается в очередной сгенерированный блок, в противном случае транзакция отвергается блокчейном. (Транзакции вызова скрипта и транзакции обмена могут быть добавлены на блокчейн, даже если результат выполнения dApp-скрипта или скрипта ассета был неудачным, за такие транзакции взимается комиссия.)

          # Подписание с помощью секретной фразы

          # С помощью JavaScript

          Используйте библиотеку waves-transactions. Для генерации подписи используется секретная фраза (seed) аккаунта. Если комиссия за транзакцию не указана, она рассчитывается автоматически.

          Описание функций приведено в документации библиотеки на Github.

          import { broadcast } from "@waves/waves-transactions";
          import { data, transfer } from "@waves/waves-transactions";
          
          const nodeUrl = 'https://nodes-testnet.wavesnodes.com';
          const seed = 'insert your seed here';
          
            // Транзакция данных: добавляет записи в хранилище данных аккаунта-отправителя
          
            const records = [
              { key: 'integerVal', value: 1 },
              { key: 'booleanVal', value: true },
              { key: 'stringVal', value: 'Lorem ipsum dolor sit amet' }
            ]
          
            const dataTx = data({ data: records }, seed); // Создание и подписание транзакции данных
          
            broadcast(dataTx,nodeUrl).then(resp => console.log(resp));
          
            // Транзакция перевода: отправляет 1 WAVES на заданный адрес
          
            const money = {
              recipient: '3N1HYdheNiiTtHgi2n3jLAek6N3H4guaciG',
              amount: 100000000 // Фактическое количество ассета нужно умножить на 10^decimals
            }
          
            const transferTx = transfer(money, seed); // Создание и подписание транзакции перевода
          
            broadcast(transferTx,nodeUrl).then(resp => console.log(resp));
          
          

          # С помощью Python

          Используйте библиотеку PyWaves , разработанную сообществом Waves. Класс Address предназначен для операций в блокчейне. Подробнее см. в документации библиотеки на Github.

          import pywaves as pw
          
          myAddress = pw.Address(seed='insert your seed here')
          
          data = [{'type':'string', 'key': 'stringVal', 'value':'Lorem ipsum dolor sit amet'},
                  {'type':'integer',  key: 'integerVal', value: 1 },
                  {'type':'boolean',  key: 'booleanVal', value: true }]
          
          myAddress.dataTransaction(data)
          myAddress.sendWaves(recipient = pw.Address('3P8pGyzZL9AUuFs9YRYPDV3vm73T48ptZxs'),
                              amount = 100000000)
          

          # Подписание от имени пользователя

          # С помощью JavaScript

          Используйте библиотеку Signer вместе с библиотеками ProviderWeb и ProviderCloud, разработанными командой WX Network. Провайдер открывает окно, в котором пользователь может подтвердить транзакцию. Затем провайдер генерирует подтверждение транзакции.

          Если комиссия за транзакцию не указана, она рассчитывается автоматически.

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

          Пример:

          import { Signer } from '@waves/signer';
          import { ProviderWeb } from '@waves.exchange/provider-web';
          
          // Инициализация библиотеки
          
          const signer = new Signer({
            NODE_URL: 'https://nodes-testnet.wavesnodes.com'
          });
          signer.setProvider(new ProviderWeb());
          
          // Транзакция данных: добавляет записи в хранилище данных аккаунта-отправителя
          
          const records = [
            { key: 'integerVal', value: 1 },
            { key: 'booleanVal', value: true },
            { key: 'stringVal', value: 'Lorem ipsum dolor sit amet' }
          ]
          
          const dataTx = signer
            .data({ data: records })
            .broadcast();
          
          dataTx.then(resp => console.log(resp));
          
          console.log('Data tx: ' + dataTx);
          
          // Транзакция перевода: отправляет 1 WAVES на заданный адрес
          
          const money = {
            recipient: '3N1HYdheNiiTtHgi2n3jLAek6N3H4guaciG',
            amount: 100000000,
            }
          
          const transferTx = signer
            .transfer(money)
            .broadcast();
            
          transferTx.then(resp => console.log(resp));
          
          Получение данных из блокчейна
          Токенизация
          Получение данных из блокчейна
          Токенизация