# Взаимодействие с нодой
Вы можете взаимодействоваь с 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']}")