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
  • Клиентские библиотеки
    • GoWaves
      GoWaves
    Клиентские библиотеки
      • English
      • Русский
      On this page
        • Выпуск ассета
          • С помощью WX Network
          • С помощью JavaScript
          • Using Python
          • С помощью dApp
        • Выпуск NFT
        • Довыпуск ассета
          • С помощью WX Network
          • С помощью JavaScript
          • С помощью Python
        • Сжигание ассета
          • С помощью WX Network
          • С помощью JavaScript
          • С помощью Python
        • Изменение названия и описания токена
          • С помощью WX Network
          • С помощью JavaScript
          • С помощью Python
      waves_logo Docs

          # Как выпустить токен. Управление токеном

          Одно из преимуществ блокчейна Waves — простота выпуска токенов. Чтобы создать токен, не нужно писать смарт-контракт — достаточно отправить в блокчейн транзакцию выпуска. Комиссия за транзакцию составляет 1 WAVES для обычного токена (ассета) или 0,001 для невзаимозаменяемого токена (NFT).

          Новый токен сразу же доступен:

          • для переводов между аккаунтами;
          • для торговли на бирже WX Network , разработанной сторонней командой из сообщества (кроме NFT; также временно недоступна торговля смарт-ассетами);
          • для платежей, приложенных к транзакции вызова скрипта.

          Вы можете использовать свой токен:

          • как цифровую валюту – для оплаты товаров и услуг в рамках вашего проекта, а также для краудфандинга;
          • как объекты или ресурсы в играх и др.

          См. раздел Токен для более подробной информации о токене.

          В этой статье слова «токен» и «ассет» используются как синонимы (но NFT всегда «токен»).

          # Выпуск ассета

          💡 Если при выпуске к ассету не прикреплен скрипт, то в дальнейшем его нельзя сделать смарт-ассетом. Если вы хотите добавить скрипт позже, выпустите ассет со скриптом AwZd0cYf (скрипт Ride, всегда возвращающий true, в кодировке base64). Минимальная комиссия за любую транзакцию с участием смарт-ассета увеличивается на 0,004 WAVES.

          # С помощью WX Network

          Используйте online- или desktop-приложение. См. раздел Создать токены документации WX Network.

          # С помощью JavaScript

          Используйте функци библиотеки waves-transactions:

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

          Идентификатор транзакции выпуска становится также идентификатором токена.

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

          const { issue, broadcast } = require('@waves/waves-transactions');
          
          const nodeUrl = 'https://nodes-testnet.wavesnodes.com'; // Нода Testnet
          const seed = 'insert your seed here';
          
            // Транзакция выпуска: параметры токена
          
          const myToken = {
            name: 'Spring',
            description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
            quantity: 100000, // Фактическое количество ассета (1000) нужно умножить на 10^decimals (100); для выпуска NFT укажите 1
            reissuable: true, // Для NFT укажите false
            decimals: 2, // Для NFT укажите 0
            chainId: 'T' // Testnet; для Mainnet укажите 'W'
          };
          
          const issueTx = issue(myToken, seed); // Создание и подписание транзакции выпуска
          
          broadcast(issueTx,nodeUrl).then(resp => console.log(resp));
          
          console.log('Token ID: ' + issueTx.id);
          

          # Using Python

          import pywaves as pw
          
          my_address = pw.Address(privateKey='some_private_key')
          my_address.issueAsset(
              name='Spring', description='Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', quantity=100000, decimals=2
          )
          

          # С помощью dApp

          Вызываемая функция dApp-скрипта может выпустить токен. Подробнее см. разделы Вызываемая функция и Issue главы Ride.

          В следующем примере функция myToken выпускает токен со следующими параметрами:

          • name содержит часть адреса аккаунта, вызвавшего функцию (например, S_3Mw48B);
          • количество токена: 1000, знаков после запятой: 2;
          • возможен довыпуск токена.
          {-# STDLIB_VERSION 6 #-}
          {-# CONTENT_TYPE DAPP #-}
          {-# SCRIPT_TYPE ACCOUNT #-}
            
          @Callable(i)
          func myToken() = ([
              Issue("S_" + take(toBase58String(i.caller.bytes),6), "", 100000, 2, true)
            ],
            unit
          )
          

          ⚠️ Минимальная комиссия за транзакцию вызова скрипта увеличивается на 1 WAVES за каждый токен, выпускаемый вызываемой функцией.

          # Выпуск NFT

          Невзаимозаменяемый токен (non-fungible token, NFT) — особый тип токена, представляющий некоторый уникальный объект. Каждый NFT имеет уникальный идентификатор. Подробнее см. в разделе Невзаимозаменяемый токен.

          Чтобы выпустить NFT, используйте любой из описанных выше способов. Укажите следующие параметры токена:

          • "quantity": 1
          • "decimals": 0
          • "reissuable": false

          # Довыпуск ассета

          Если токен довыпускаемый (вы указали "reissuable": true), вы можете увеличить количество токена (а также изменить значение reissuable, если требуется).

          # С помощью WX Network

          Используйте online- или desktop-приложение. См. раздел Перевыпустить токены документации WX Network.

          # С помощью JavaScript

          const { reissue, broadcast } = require('@waves/waves-transactions');
          
          const nodeUrl = 'https://nodes-testnet.wavesnodes.com';
          const seed = 'insert your seed here';
          
          const myToken = {
            assetId: '39M7cn3PZ7T468vGGfkc4VtxqbeDS5ssU4tLYJeoKfn4',
            quantity: 50000, // Добавление 500 токенов Spring
            reissuable: true,
            chainId: 'T' // Testnet; для Mainnet укажите 'W'
          };
          
          const reissueTx = reissue(myToken, seed); // Создание и подписание транзакции довыпуска
          
          broadcast(reissueTx,nodeUrl).then(resp => console.log(resp));
          

          # С помощью Python

          import pywaves as pw
          
          my_address = pw.Address(privateKey=some_private_key)
          my_token = pw.Asset('39M7cn3PZ7T468vGGfkc4VtxqbeDS5ssU4tLYJeoKfn4')
          my_address.reissueAsset(my_token, quantity=50000, reissuable=True)
          

          # Сжигание ассета

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

          # С помощью WX Network

          Используйте online/desktop- или мобильное приложение. См. разделы Сжечь токены (Online/Desktop) и Сжечь токены (Mobile) документации WX Network.

          # С помощью JavaScript

          const { burn, broadcast } = require('@waves/waves-transactions');
          
          const nodeUrl = 'https://nodes-testnet.wavesnodes.com';
          const seed = 'insert your seed here';
          
          const myToken = {
            assetId: '39M7cn3PZ7T468vGGfkc4VtxqbeDS5ssU4tLYJeoKfn4',
            quantity: 10000, // Сжигание 100 токенов Spring
            chainId: 'T' // Testnet; для Mainnet укажите 'W'
          };
          
          const burnTx = burn(myToken, seed); // Создание и подписание транзакции сжигания токена
          
          broadcast(burnTx,nodeUrl).then(resp => console.log(resp));
          

          # С помощью Python

          import pywaves as pw
          
          my_address = pw.Address(privateKey=some_private_key)
          asset_to_burn = pw.Asset('39M7cn3PZ7T468vGGfkc4VtxqbeDS5ssU4tLYJeoKfn4')
          my_address.burnAsset(asset_to_burn, quantity=10000)
          

          # Изменение названия и описания токена

          Вы можете изменить название и/или описание ассета или NFT, который вы выпустили:

          • на Mainnet и Testnet — не ранее чем через 100 000 блоков (около 70 дней) от последнего изменения (или выпуска ассета);
          • на Stagenet — не ранее чем через 10 блоков.

          💡 Вместо переименования токена вы можете выпустить новый токен и использовать его вместо прежнего.

          # С помощью WX Network

          1. Нажмите на аватар аккаунта в правом верхнем углу. Выберите Настройки. В окне Настройки установите галочку Расширенные возможности.

          2. Перейдите на вкладку Кошелек. Нажмите кнопку {} JSON в правом верхнем углу.

          3. Вставьте код транзакции:

            {
               "type": 17,
               "version": 1,
               "assetId": "ВСТАВЬТЕ ID СВОЕГО ТОКЕНА",
               "name": "ВСТАВЬТЕ НОВОЕ ИМЯ",
               "description": "ВСТАВЬТЕ НОВОЕ ОПИСАНИЕ",
               "fee": 100000
            }
            

            В поле fee указывается комиссия за транзакцию в WAVELET. "fee": 100000 соответствует комиссии 0,001 WAVES.

          4. Нажмите Продолжить, затем Подписать, затем Отправить.

          # С помощью JavaScript

          const { updateAssetInfo, broadcast } = require('@waves/waves-transactions');
          
          const nodeUrl = 'https://nodes-testnet.wavesnodes.com';
          const seed = 'insert your seed here';
          
          const myToken = {
            assetId: '39M7cn3PZ7T468vGGfkc4VtxqbeDS5ssU4tLYJeoKfn4',
            name: "New name",
            description: "New description",
            chainId: 'T' // Testnet; для Mainnet укажите 'W'
          };
          
          const renameTx = updateAssetInfo(myToken, seed); // Создание и подписание транзакции
          
          broadcast(renameTx,nodeUrl).then(resp => console.log(resp));
          

          # С помощью Python

          import pywaves as pw
          
          pw.setNode(node = 'https://nodes-testnet.wavesnodes.com', chain = 'testnet')
          my_address = pw.Address(seed = 'insert your seed here')
          my_address.updateAssetInfo('H1g2vAaNt6v1oDmxRWiv6KZeQbb5gCbcLosRfi6PqYjH', name = 'New name', description = 'New description')
          
          Создание и отправка транзакций
          Распространение токена (airdrop)
          Создание и отправка транзакций
          Распространение токена (airdrop)