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
    • PyWaves-CE
      • Установка SDK
        Установка SDK
      PyWaves-CE
    • Waves-rust
      • Установка SDK
        Установка SDK
      Waves-rust
    Клиентские библиотеки
      • English
      • Русский
      On this page
      waves_logo Docs

          # Как распространить токен (airdrop)

          Airdrop — рассылка токена множеству адресов одновременно. Как правило, airdrop — это часть кампании по продвижению проекта, повышению узнаваемости и привлечению инвесторов.

          Вы можете перевести свой токен всем активным адресам Waves. В этом примере мы составляем список адресов следующим образом:

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

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

          Убедитесь, что на вашем аккаунте достаточно WAVES для уплаты комиссии за переводы токена.

          import requests
          import time
          import pywaves as pw
          
          node_url = 'https://nodes-testnet.wavesnodes.com'
          pw.setNode(node = node_url, chain = 'testnet')
          
          seed = 'insert your seed here'
          my_address = pw.Address(seed=seed)
          
          my_asset = pw.Asset('Ax54puR69NHfxqCE73DkyGHUiRb7Z6tHJZvx6ywWS49')
          airdrop_amount = 100
          
          sender_public_keys = []
          addresses = []
          
          depth = 10000
          
          # Получение высоты блокчейна
          blockchain_height = requests.get(f'{node_url}/blocks/height').json()['height']
          
          # Перебираем последние блоки
          for i in range(blockchain_height - depth, blockchain_height):
          
              # Получаем все транзакции в блоке
              try:
                  response =  requests.get(f'{node_url}/blocks/at/{i}')
                  transactions = response.json()['transactions']
              except ValueError:
                  print('Error retrieving block ', i, '\nHTTP response code: ', response)
          
              # Извлекаем открытые ключи
              for transaction in transactions:
                  if transaction['senderPublicKey'] not in sender_public_keys:
                      sender_public_keys.append(transaction['senderPublicKey'])
          
              # time.sleep(1) # С https://nodes.wavesnodes.com можно получить только один блок в секунду
          
          # Преобразование открытых ключей в адреса
          for public_key in sender_public_keys:
              try:
                  response = requests.get(f'{node_url}/addresses/publicKey/{public_key}')
                  addresses.append(response.json()['address'])
              except ValueError:
                  print('Error getting address from public key ', public_key, '\nHTTP response code: ', response)
          
          # Перевод токена по адресам
          for address in addresses:
              address_obj = pw.Address(address)
              my_address.sendAsset(address_obj, my_asset, airdrop_amount)
          
          Токенизация
          Прием платежей
          Токенизация
          Прием платежей