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
        • Assets API
        • Addresses API
      waves_logo Docs

          # Взаимодействие с нодой

          Вы можете взаимодействоваь с API-методами Assets и Addresses.

          # Assets API

          Вы можете получить информацию о:

          • Распределении баланса активов.
          • Балансе активов по адресу.
          • Балансе актива по адресу.
          • Об активе.
          • Наличии NFT-токенах по адресу.

          # Распределение баланса активов

          Endpoint: GET /assets/{assetId}/distribution/{height}/limit/{limit}

          # Необходимые импорты.
          import requests
          import re
          
          # Укажите ID актива.
          asset_id = "УКАЖИТЕ ID АКТИВА"
          
          # Укажите количество записей, которые будут возвращены.
          limit = 100
          
          '''
          Укажите сеть:
          - Mainnet: "https://nodes.wavesnodes.com/"
          - Testnet: "https://nodes-testnet.wavesnodes.com/"
          - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
          '''
          node_url = "https://nodes-testnet.wavesnodes.com"
          
          # Получение высоты последнего блока.
          height_response = requests.get(f"{node_url}/blocks/height").json()
          height = height_response["height"] - 1
          
          # Создание URL-запроса.
          url = f"{node_url}/assets/{asset_id}/distribution/{height}/limit/{limit}"
          
          # Получение данных о распределении баланса активов.
          response = requests.get(url)
          text = response.text
          
          # Анализ полученных данных.
          pattern = re.compile(r'"([1-9A-HJ-NP-Za-km-z]{30,})":(\d+)')
          
          print("––––––––––––––––––––––––––––––––––––––")
          print("Распределение баланса активов (адрес: количество):")
          
          for match in pattern.finditer(text):
              address = match.group(1)
              balance_lamports = int(match.group(2))
              balance_in_waves = balance_lamports / 100.0
              print(f"{address}: {balance_in_waves:.2f}")
          
          # Check for pagination.
          if '"hasNext":true' in text:
              last_item = re.search(r'"lastItem":"(.*?)"', text)
              if last_item:
                  print(f"\nДоступно больше страниц. Последний элемент: {last_item.group(1)}")
          

          # Баланс активов по адресу

          Endpoint: GET /assets/balance/{address}

          # Необходимые импорты.
          import requests
          
          # Укажите адрес аккаунта.
          address = "УКАЖИТЕ АДРЕС АККАУНТА"
          
          '''
          Укажите сеть:
          - Mainnet: "https://nodes.wavesnodes.com/"
          - Testnet: "https://nodes-testnet.wavesnodes.com/"
          - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
          '''
          node_url = "https://nodes-testnet.wavesnodes.com"
          
          # Создание URL-запроса.
          url = f"{node_url}/assets/balance/{address}"
          
          # Получение ответа.
          response = requests.get(url)
          data = response.json()
          
          # Получение баланса активов.
          balances = data.get("balances", [])
          
          # Вывод результатов.
          print("––––––––––––––––––––––––––––––––––––––")
          print(f"Баланс активов по адресу: {address}")
          for b in balances:
              asset_id = b["assetId"]
              raw_balance = int(b["balance"])
              formatted_balance = raw_balance / 1e2
              print(f"ID актива: {asset_id}, Баланс: {formatted_balance:.2f}")
          

          # Баланс актива по адресу

          Endpoint: GET /assets/balance/{address}/{assetId}

          # Необходимый импорт.
          import requests
          
          # Укажите адрес аккаунта.
          address = "УКАЖИТЕ АДРЕС АККАУНТА"
          
          # Укажите ID актива.
          asset_id = "УКАЖИТЕ ID АКТИВА"
          
          '''
          Укажите сеть:
          - Mainnet: "https://nodes.wavesnodes.com/"
          - Testnet: "https://nodes-testnet.wavesnodes.com/"
          - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
          '''
          node_url = "https://nodes-testnet.wavesnodes.com"
          
          # Создание URL-запроса.
          url = f"{node_url}/assets/balance/{address}/{asset_id}"
          
          # Получение ответа.
          response = requests.get(url)
          data = response.json()
          
          # Получение и форматированние данных о балансе.
          raw = int(data["balance"])
          formatted = raw / 1e2
          
          # Вывод результатов.
          print("––––––––––––––––––––––––––––––––––––––")
          print(f"Баланс актива {data['assetId']} по адресу {data['address']}: {formatted:.2f}")
          

          # Детали актива

          Endpoint: GET /assets/details/{assetId}

          # Необходимый импорт.
          import requests
          
          # Укажите ID актива.
          asset_id = "УКАЖИТЕ ID АКТИВА"
          
          '''
          Укажите сеть:
          - Mainnet: "https://nodes.wavesnodes.com/"
          - Testnet: "https://nodes-testnet.wavesnodes.com/"
          - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
          '''
          node_url = "https://nodes-testnet.wavesnodes.com"
          
          # Создание URL-запроса.
          url = f"{node_url}/assets/details/{asset_id}"
          
          # Получение ответа.
          response = requests.get(url)
          d = response.json()
          
          # Вывод результатов.
          print("––––––––––––––––––––––––––––––––––––––")
          print(f"Наименование: {d['name']}")
          print(f"Описание: {d['description']}")
          print(f"Десятичные знаки: {d['decimals']}")
          print(f"Перевыпускаемость ассета: {d['reissuable']}")
          print(f"Создатель: {d['issuer']}")
          

          # Наличие NFT-токенов по адресу

          Endpoint: GET /assets/nft/{address}/limit/{limit}

          # Необходимый импорт.
          import requests
          
          # Укажите адрес аккаунта.
          address = "УКАЖИТЕ АДРЕС АККАУНТА"
          
          # Укажите количество записей, которые будут возвращены.
          limit = 100
          
          '''
          Укажите сеть:
          - Mainnet: "https://nodes.wavesnodes.com/"
          - Testnet: "https://nodes-testnet.wavesnodes.com/"
          - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
          '''
          node_url = "https://nodes-testnet.wavesnodes.com"
          
          # Создание URL-запроса.
          url = f"{node_url}/assets/nft/{address}/limit/{limit}"
          
          # Получение ответа.
          response = requests.get(url)
          nfts = response.json()
          
          # Вывод результатов.
          print("––––––––––––––––––––––––––––––––––––––")
          print(f"NFTs at Address: {address}")
          for nft in nfts:
              print(f"ID: {nft['assetId']} | Наименование: {nft['name']} | Описание: {nft['description']} | Количество: {nft['quantity']}")
          

          # Addresses API

          Вы можете получить информацию о:

          • Всех адресах в кошельке ноды.
          • Диапазоне адресов.
          • Балансе WAVES по адресу.
          • Балансе WAVES с подтверждениями.
          • Детальной информации о балансе.
          • Балансе нескольких адресов.
          • Записях данных аккаунта по адресу.
          • Записях данных по ключу.
          • Скрипте аккаунта.

          # Все адреса в кошельке ноды

          Endpoint: GET /addresses

          # Необходимый импорт.
          import requests
          
          '''
          Укажите сеть:
          - Mainnet: "https://nodes.wavesnodes.com/"
          - Testnet: "https://nodes-testnet.wavesnodes.com/"
          - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
          '''
          node_url = "https://nodes-testnet.wavesnodes.com"
          
          # Создание URL-запроса.
          url = f"{node_url}/addresses"
          
          # Получение ответа.
          response = requests.get(url)
          addresses = response.json()
          
          # Вывод результатов.
          print("Адрес кошельков ноды:")
          for addr in addresses:
              print(addr)
          

          # Диапазон адресов

          Endpoint: GET /addresses/seq/{from}/{to}

          # Необходимый импорт.
          import requests
          
          # Индексы номеров кошельков.
          from_idx = 0
          to_idx = 4
          
          '''
          Укажите сеть:
          - Mainnet: "https://nodes.wavesnodes.com/"
          - Testnet: "https://nodes-testnet.wavesnodes.com/"
          - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
          '''
          node_url = "https://nodes-testnet.wavesnodes.com"
          
          # Создание URL-запроса.
          url = f"{node_url}/addresses/seq/{from_idx}/{to_idx}"
          
          # Получение ответа.
          response = requests.get(url)
          addresses = response.json()
          
          # Вывод результатов.
          print(f"Адреса кошельков с индексами от {from_idx} до {to_idx}:")
          for addr in addresses:
              print(addr)
          

          # Баланс WAVES по адресу

          Endpoint: GET /addresses/balance/{address}

          # Необходимый импорт.
          import requests
          
          # Укажите адрес аккаунта.
          address = "УКАЖИТЕ АДРЕС АККАУНТА"
          
          '''
          Укажите сеть:
          - Mainnet: "https://nodes.wavesnodes.com/"
          - Testnet: "https://nodes-testnet.wavesnodes.com/"
          - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
          '''
          node_url = "https://nodes-testnet.wavesnodes.com"
          
          # Создание URL-запроса.
          url = f"{node_url}/addresses/balance/{address}"
          
          # Получение ответа.
          response = requests.get(url)
          resp = response.json()
          raw = resp["balance"]
          
          # Вывод результатов.
          print(f"Баланс по адресу {address}: {raw / 1e8:.8f} WAVES")
          

          # Баланс WAVES с подтверждениями

          Endpoint: GET /addresses/balance/{address}/{confirmations}

          # Необходимый импорт.
          import requests
          
          # Укажите адрес аккаунта.
          address = "УКАЖИТЕ АДРЕС АККАУНТА"
          
          # Укажите количество подтверждений.
          confirmations = 2 # Пример значения.
          
          '''
          Укажите сеть:
          - Mainnet: "https://nodes.wavesnodes.com/"
          - Testnet: "https://nodes-testnet.wavesnodes.com/"
          - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
          '''
          node_url = "https://nodes-testnet.wavesnodes.com"
          
          # Создание URL-запроса.
          url = f"{node_url}/addresses/balance/{address}/{confirmations}"
          
          # Получение ответа.
          response = requests.get(url)
          resp = response.json()
          raw = resp["balance"]
          
          # Вывод результатов.
          print(f"Баланс по адресу {address} (>= {confirmations} подтверждений): {raw / 1e8:.8f} WAVES")
          

          # Детальная информация о балансе

          Endpoint: GET /addresses/balance/details/{address}

          Обратите внимание: Метод показывает доступные, регулярные, генерирующие и эффективные остатки на счету аккаунта.

          # Необходимый импорт.
          import requests
          
          # Укажите адрес аккаунта.
          address = "УКАЖИТЕ АДРЕС АККАУНТА"
          
          '''
          Укажите сеть:
          - Mainnet: "https://nodes.wavesnodes.com/"
          - Testnet: "https://nodes-testnet.wavesnodes.com/"
          - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
          '''
          node_url = "https://nodes-testnet.wavesnodes.com"
          
          # Создание URL-запроса.
          url = f"{node_url}/addresses/balance/details/{address}"
          
          # Получение ответа.
          response = requests.get(url)
          info = response.json()
          
          # Вывод результатов.
          print(f"Регулярный: {info['regular'] / 1e8:.8f} WAVES")
          print(f"Доступный: {info['available'] / 1e8:.8f} WAVES")
          print(f"Генерирующий: {info['generating'] / 1e8:.8f} WAVES")
          print(f"Эффективный: {info['effective'] / 1e8:.8f} WAVES")
          

          # Баланс нескольких адресов

          Endpoint: POST /addresses/balance

          Обратите внимание: Данный метод вовзвращает данные балансов в WAVES.

          # Необходимые импорты.
          import requests
          import json
          
          # Укажите адреса аккаунтов.
          addresses = [
              "УКАЖИТЕ ПЕРВЫЙ АДРЕС",
              "УКАЖИТЕ ВТОРОЙ АДРЕС"
              # ...
          ]
          
          '''
          Укажите сеть:
          - Mainnet: "https://nodes.wavesnodes.com/addresses/balance"
          - Testnet: "https://nodes-testnet.wavesnodes.com/addresses/balance"
          - Stagenet: "https://nodes-stagenet.wavesnodes.com/addresses/balance"
          '''
          node_url = "https://nodes-testnet.wavesnodes.com/addresses/balance"
          
          # Создание URL-запроса.
          headers = {"Content-Type": "application/json"}
          data = {"addresses": addresses}
          
          # Отправка запроса.
          response = requests.post(node_url, headers=headers, data=json.dumps(data))
          results = response.json()
          
          # Вывод результатов.
          for addr, entry in zip(addresses, results):
              balance = entry["balance"] / 1e8
              print(f"{addr}: {balance:.8f} WAVES")
          

          # Записи данных аккаунта по адресу

          Endpoint: GET /addresses/data/{address}

          Обратите внимание: Данный метод вовзвращает записи данных аккаунта при их наличии.

          # Необходимый импорт.
          import requests
          
          # Укажите адрес аккаунта.
          address = "УКАЖИТЕ АДРЕС АККАУНТА"
          
          '''
          Укажите сеть:
          - Mainnet: "https://nodes.wavesnodes.com/"
          - Testnet: "https://nodes-testnet.wavesnodes.com/"
          - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
          '''
          node_url = "https://nodes-testnet.wavesnodes.com"
          
          # Создание URL-запроса.
          url = f"{node_url}/addresses/data/{address}"
          
          # Получение ответа.
          response = requests.get(url)
          entries = response.json()
          
          # Вывод результатов.
          for e in entries:
              print(f"{e['key']} ({e['type']}): {e['value']}")
          

          # Записи данных по ключу

          Endpoint: GET /addresses/data/{address}/{key}

          # Необходимый импорт.
          import requests
          
          # Укажите адрес аккаунта.
          address = "УКАЖИТЕ АДРЕС АККАУНТА"
          
          # Укажите ключ аккаунта.
          key = "УКАЖИТЕ КЛЮЧ АККАУНТА"
          
          '''
          Укажите сеть:
          - Mainnet: "https://nodes.wavesnodes.com/"
          - Testnet: "https://nodes-testnet.wavesnodes.com/"
          - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
          '''
          node_url = "https://nodes-testnet.wavesnodes.com"
          
          # Создание URL-запроса.
          url = f"{node_url}/addresses/data/{address}/{key}"
          
          # Получение ответа.
          response = requests.get(url)
          entry = response.json()
          
          # Print the result.
          print(f"{entry['key']} ({entry['type']}): {entry['value']}")
          

          # Информация о скрипте аккаунта

          Endpoint: GET /addresses/scriptInfo/{address}

          # Необходимый импорт.
          import requests
          
          # Укажите адрес аккаунта.
          address = "УКАЖИТЕ АДРЕС АККАУНТА"
          
          '''
          Укажите сеть:
          - Mainnet: "https://nodes.wavesnodes.com/"
          - Testnet: "https://nodes-testnet.wavesnodes.com/"
          - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
          '''
          node_url = "https://nodes-testnet.wavesnodes.com"
          
          # Создание URL-запроса.
          url = f"{node_url}/addresses/scriptInfo/{address}"
          
          # Получение ответа.
          response = requests.get(url)
          info = response.json()
          
          # Вывод результатов.
          has_script = info.get("script") is not None
          print(f"Имеется скрипт: {has_script}")
          if has_script:
              print(f"Сложность: {info['complexity']}")
              print(f"Комиссия: {info['extraFee']}")
          
          Использование криптографических утилит
          Развертывание смарт-контрактов
          Использование криптографических утилит
          Развертывание смарт-контрактов