# Взаимодействие с нодой
Вы можете взаимодействоваь с API-методами Assets и Addresses.
# Assets API
Вы можете получить информацию о:
- Распределении баланса активов.
- Балансе активов по адресу.
- Балансе актива по адресу.
- Об активе.
- Наличии NFT-токенах по адресу.
# Распределение баланса активов
Endpoint: GET /assets/{assetId}/distribution/{height}/limit/{limit}
<?php
// Укажите ID ассета.
$assetId = "УКАЖИТЕ ID АССЕТА";
// Укажите максимальное количество записей для просмотра.
$limit = 100;
/*
* Укажите сеть:
* - Mainnet: "https://nodes.wavesnodes.com"
* - Testnet: "https://nodes-testnet.wavesnodes.com"
* - Stagenet: "https://nodes-stagenet.wavesnodes.com"
*/
$nodeUrl = "https://nodes-testnet.wavesnodes.com";
// Получение высоты последнего блока.
$heightUrl = $nodeUrl . "/blocks/height";
$heightResponse = file_get_contents($heightUrl);
$height = json_decode($heightResponse, true)['height'];
$height -= 1;
// Создание URL-запроса.
$url = "$nodeUrl/assets/$assetId/distribution/$height/limit/$limit";
$response = file_get_contents($url);
// Анализ полученных данных.
$data = json_decode($response, true);
// Вывод результатов.
echo "––––––––––––––––––––––––––––––––––––––\n";
echo "Распределение баланса активов (адрес: количество):\n";
foreach ($data['items'] as $address => $amount) {
$balanceInWaves = $amount / 100.0;
printf("%s: %.2f\n", $address, $balanceInWaves);
}
// Check if more pages are available.
if (!empty($data['hasNext']) && $data['hasNext'] === true) {
if (!empty($data['lastItem'])) {
printf("\Доступно больше страниц. Последний элемент: %s\n", $data['lastItem']);
}
}
# Баланс активов по адресу
Endpoint: GET /assets/balance/{address}
<?php
// Укажите адрес.
$address = 'УКАЖИТЕ АДРЕС';
/*
* Укажите сеть:
* - Mainnet: 'https://nodes.wavesnodes.com/'
* - Testnet: 'https://nodes-testnet.wavesnodes.com/'
* - Stagenet: 'https://nodes-stagenet.wavesnodes.com/'
*/
$nodeUrl = 'https://nodes-testnet.wavesnodes.com';
// Создание JSON-тела запроса.
function getJson(array $opts): ?array {
$ch = curl_init();
curl_setopt_array($ch, $opts);
$resp = curl_exec($ch);
curl_close($ch);
if ($resp === false) return null;
return json_decode($resp, true);
}
// Создание URL-запроса.
$balanceUrl = $nodeUrl . '/assets/balance/' . $address;
$balancesResp = getJson([
CURLOPT_URL => $balanceUrl,
CURLOPT_RETURNTRANSFER => true,
]);
$balances = $balancesResp['balances'] ?? [];
// Вывод результатов.
echo "––––––––––––––––––––––––––––––––––––––\n";
echo "Баланс активов по адресу: $address\n";
$decimalsCache = ['WAVES' => 8];
foreach ($balances as $entry) {
$assetIdRaw = $entry['assetId'];
$assetKey = $assetIdRaw === '' ? 'WAVES' : $assetIdRaw;
$rawBalance = $entry['balance'];
if (!isset($decimalsCache[$assetKey])) {
$detailsUrl = $nodeUrl . '/assets/details/' . $assetIdRaw;
$details = getJson([
CURLOPT_URL => $detailsUrl,
CURLOPT_RETURNTRANSFER => true,
]) ?? [];
$decimalsCache[$assetKey] = $details['decimals'] ?? 0;
}
$decimals = $decimalsCache[$assetKey];
$formatted = $rawBalance / (10 ** $decimals);
$balanceStr = number_format($formatted, $decimals, '.', '');
echo "Asset ID: {$assetKey}, Balance: {$balanceStr}\n";
}
# Баланс актива по адресу
Endpoint: GET /assets/balance/{address}/{assetId}
<?php
// Укажите адрес.
$address = 'УКАЖИТЕ АДРЕС';
// Укажите ID ассета.
$assetId = 'УКАЖИТЕ ID АССЕТА';
/*
* Укажите сеть:
* - Mainnet: "https://nodes.wavesnodes.com/"
* - Testnet: "https://nodes-testnet.wavesnodes.com/"
* - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
*/
$nodeUrl = 'https://nodes-testnet.wavesnodes.com';
// Perform a GET request and decode JSON response as an array.
function getJson(array $opts): ?array {
$ch = curl_init();
curl_setopt_array($ch, $opts);
$resp = curl_exec($ch);
curl_close($ch);
if ($resp === false) return null;
return json_decode($resp, true);
}
$balanceUrl = "{$nodeUrl}/assets/balance/{$address}/{$assetId}";
$resp = getJson([
CURLOPT_URL => $balanceUrl,
CURLOPT_RETURNTRANSFER => true,
]) ?? [];
$rawBalance = $resp['balance'] ?? 0;
$detailsUrl = "{$nodeUrl}/assets/details/{$assetId}";
$details = getJson([
CURLOPT_URL => $detailsUrl,
CURLOPT_RETURNTRANSFER => true,
]) ?? [];
$decimals = $details['decimals'] ?? 0;
$formatted = $rawBalance / (10 ** $decimals);
// Вывод результатов.
echo "––––––––––––––––––––––––––––––––––––––\n";
printf(
"Баланс актива %s по адерсу %s: %." . $decimals . "f\n",
$assetId,
$address,
$formatted
);
# Детали актива
Endpoint: GET /assets/details/{assetId}
<?php
// Укажите ID ассета.
$assetId = 'УКАЖИТЕ ID АССЕТА';
/*
* Укажите сеть:
* - Mainnet: "https://nodes.wavesnodes.com/"
* - Testnet: "https://nodes-testnet.wavesnodes.com/"
* - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
*/
$nodeUrl = 'https://nodes-testnet.wavesnodes.com';
// Выполнение GET-запроса и обработка полученных JSON-данных.
function getJson(array $opts): ?array {
$ch = curl_init();
curl_setopt_array($ch, $opts);
$resp = curl_exec($ch);
curl_close($ch);
if ($resp === false) return null;
return json_decode($resp, true);
}
$detailsUrl = "{$nodeUrl}/assets/details/{$assetId}";
$details = getJson([
CURLOPT_URL => $detailsUrl,
CURLOPT_RETURNTRANSFER => true,
]) ?? [];
$name = $details['name'] ?? '';
$description = $details['description'] ?? '';
$decimals = isset($details['decimals']) ? (int)$details['decimals'] : 0;
$reissuable = isset($details['reissuable']) ? (bool)$details['reissuable'] : false;
$issuer = $details['issuer'] ?? '';
// Вывод результатов.
echo "––––––––––––––––––––––––––––––––––––––\n";
printf(
"Наименование: %s\nОписание: %s\nЗнаков после запятых: %d\nПеревыпускаемость: %s\nСоздатель: %s\n",
$name,
$description,
$decimals,
$reissuable ? 'true' : 'false',
$issuer
);
# Наличие NFT-токенов по адресу
Endpoint: GET /assets/nft/{address}/limit/{limit}
<?php
// Укажите адрес.
$address = 'УКАЖИТЕ АДРЕС';
// Укажите максимальное количество записей для просмотра.
$limit = 100;
/*
* Укажите сеть:
* - Mainnet: "https://nodes.wavesnodes.com/"
* - Testnet: "https://nodes-testnet.wavesnodes.com/"
* - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
*/
$nodeUrl = 'https://nodes-testnet.wavesnodes.com';
// Создание URL-запроса.
$url = "{$nodeUrl}/assets/nft/{$address}/limit/{$limit}";
// Отправка GET-запроса и обработка полученных данных.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$nfts = json_decode($response, true) ?: [];
// Вывод результатов.
echo "––––––––––––––––––––––––––––––––––––––\n";
echo "NFT по адресу: $address\n";
foreach ($nfts as $nft) {
$assetId = $nft['assetId'] ?? '';
$name = $nft['name'] ?? '';
$description = $nft['description'] ?? '';
$quantity = isset($nft['quantity']) ? (int)$nft['quantity'] : 0;
printf(
"ID: %s | Наименование: %s | Описание: %s | Количество: %d\n",
$assetId,
$name,
$description,
$quantity
);
}
# Addresses API
Вы можете получить информацию о:
- Всех адресах в кошельке ноды.
- Диапазоне адресов.
- Балансе WAVES по адресу.
- Балансе WAVES с подтверждениями.
- Детальной информации о балансе.
- Балансе нескольких адресов.
- Записях данных аккаунта по адресу.
- Записях данных по ключу.
- Метаданных скрипта аккаунта.
# Все адреса в кошельке ноды
Endpoint: GET /addresses
<?php
/*
* Укажите сеть:
* - Mainnet: "https://nodes.wavesnodes.com/"
* - Testnet: "https://nodes-testnet.wavesnodes.com/"
* - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
*/
$nodeUrl = 'https://nodes-testnet.wavesnodes.com';
// Создание URL-запроса.
$url = $nodeUrl . '/addresses';
// Отправка GET-запроса и обработка полученных данных.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$addresses = json_decode($response, true) ?: [];
// Вывод результатов.
echo "––––––––––––––––––––––––––––––––––––––\n";
echo "Адреса кошельков ноды:\n";
foreach ($addresses as $addr) {
echo $addr . "\n";
}
# Диапазон адресов
Endpoint: GET /addresses/seq/{from}/{to}
<?php
// Стартовый и конеченый индексы кошельков.
$from = 0;
$to = 4;
/*
* Укажите сеть:
* - Mainnet: "https://nodes.wavesnodes.com/"
* - Testnet: "https://nodes-testnet.wavesnodes.com/"
* - Stagenet: "https://nodes-stagenet.wavesnodes.com/"
*/
$nodeUrl = 'https://nodes-testnet.wavesnodes.com';
// Создание URL-запроса.
$url = sprintf('%s/addresses/seq/%d/%d', $nodeUrl, $from, $to);
// Отправка GET-запроса и обработка полученных данных.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$addresses = json_decode($response, true) ?: [];
// Вывод результатов.
printf("Адреса от %d до %d:\n", $from, $to);
foreach ($addresses as $addr) {
echo $addr . "\n";
}
# Баланс WAVES по адресу
Endpoint: GET /addresses/balance/{address}
<?php
// Укажите адрес.
$address = 'УКАЖИТЕ АДРЕС';
/*
* Укажите сеть:
* - Mainnet: 'https://nodes.wavesnodes.com/'
* - Testnet: 'https://nodes-testnet.wavesnodes.com/'
* - Stagenet: 'https://nodes-stagenet.wavesnodes.com/'
*/
$nodeUrl = 'https://nodes-testnet.wavesnodes.com';
// Создание URL-запроса.
$url = $nodeUrl . '/addresses/balance/' . $address;
// Отправка GET-запроса и обработка полученных данных.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true) ?: [];
$raw = isset($data['balance']) ? (int)$data['balance'] : 0;
// Вывод результатов.
printf("Баланс адреса %s: %.8f WAVES\n", $address, $raw / 1e8);
# Баланс WAVES с подтверждениями
Endpoint: GET /addresses/balance/{address}/{confirmations}
<?php
// Укажите адрес.
$address = 'УКАЖИТЕ АДРЕС';
// Укажите количество подтверждений.
$confirmations = 2;
/*
* Укажите сеть:
* - Mainnet: 'https://nodes.wavesnodes.com/'
* - Testnet: 'https://nodes-testnet.wavesnodes.com/'
* - Stagenet: 'https://nodes-stagenet.wavesnodes.com/'
*/
$nodeUrl = 'https://nodes-testnet.wavesnodes.com';
// Создание URL-запроса.
$url = sprintf('%s/addresses/balance/%s/%d', $nodeUrl, $address, $confirmations);
// Отправка GET-запроса и обработка полученных данных.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true) ?: [];
$raw = isset($data['balance']) ? (int)$data['balance'] : 0;
// Вывод результатов.
printf(
"Баланс по адресу %s (>= %d подтверждений): %.8f WAVES\n",
$address,
$confirmations,
$raw / 1e8
);
# Детальная информация о балансе
Endpoint: GET /addresses/balance/details/{address}
Обратите внимание: Метод показывает доступные, регулярные, генерирующие и эффективные остатки на счету аккаунта.
<?php
// Укажите адрес.
$address = 'УКАЖИТЕ АДРЕС';
/*
* Укажите сеть:
* - Mainnet: 'https://nodes.wavesnodes.com/'
* - Testnet: 'https://nodes-testnet.wavesnodes.com/'
* - Stagenet: 'https://nodes-stagenet.wavesnodes.com/'
*/
$nodeUrl = 'https://nodes-testnet.wavesnodes.com';
// Создание URL-запроса.
$url = $nodeUrl . '/addresses/balance/details/' . $address;
// Отправка GET-запроса и обработка полученных данных.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$info = json_decode($response, true) ?: [];
// Вывод результатов.
printf("Регулярный: %.8f WAVES\n", (isset($info['regular']) ? $info['regular'] : 0) / 1e8);
printf("Доступный: %.8f WAVES\n", (isset($info['available']) ? $info['available'] : 0) / 1e8);
printf("Генерирующий:%.8f WAVES\n", (isset($info['generating'])? $info['generating']: 0) / 1e8);
printf("Эффективный: %.8f WAVES\n", (isset($info['effective']) ? $info['effective'] : 0) / 1e8);
# Баланс нескольких адресов
Endpoint: POST /addresses/balance
<?php
// Укажите адреса аккаунтов.
$addresses = [
'УКАЖИТЕ 1 АДРЕС',
'УКАЖИТЕ 2 АДРЕС',
// ...
];
/*
* Укажите сеть:
* - Mainnet: 'https://nodes.wavesnodes.com/addresses/balance'
* - Testnet: 'https://nodes-testnet.wavesnodes.com/addresses/balance'
* - Stagenet: 'https://nodes-stagenet.wavesnodes.com/addresses/balance'
*/
$nodeUrl = 'https://nodes-testnet.wavesnodes.com/addresses/balance';
// Отправка POST-запроса и обработка полученных данных.
$body = json_encode(['addresses' => $addresses]);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $nodeUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
$response = curl_exec($ch);
curl_close($ch);
$results = json_decode($response, true) ?: [];
// Вывод результатов.
foreach ($addresses as $i => $address) {
$balance = isset($results[$i]['balance']) ? $results[$i]['balance'] / 1e8 : 0;
printf("%s: %.8f WAVES\n", $address, $balance);
}
# Записи данных аккаунта по адресу
Endpoint: GET /addresses/data/{address}
<?php
// Укажите адрес.
$address = 'УКАЖИТЕ АДРЕС';
/*
* Укажите сеть:
* - Mainnet: 'https://nodes.wavesnodes.com'
* - Testnet: 'https://nodes-testnet.wavesnodes.com'
* - Stagenet: 'https://nodes-stagenet.wavesnodes.com'
*/
$nodeUrl = 'https://nodes-testnet.wavesnodes.com';
// Создание URL-запроса.
$url = $nodeUrl . '/addresses/data/' . $address;
// Отправка GET-запроса и обработка полученных данных.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$entries = json_decode($response, true) ?: [];
// Вывод результатов.
foreach ($entries as $entry) {
printf("%s (%s): %s\n", $entry['key'], $entry['type'], $entry['value']);
}
# Записи данных по ключу
Endpoint: GET /addresses/data/{address}/{key}
<?php
// Укажите адрес.
$address = 'УКАЖИТЕ АДРЕС';
// Укажите ключ аккаунта.
$key = 'УКАЖИТЕ КЛЮЧ АККАУНТА';
/*
* Укажите сеть:
* - Mainnet: 'https://nodes.wavesnodes.com'
* - Testnet: 'https://nodes-testnet.wavesnodes.com'
* - Stagenet: 'https://nodes-stagenet.wavesnodes.com'
*/
$nodeUrl = 'https://nodes-testnet.wavesnodes.com';
// Создание URL-запроса.
$url = $nodeUrl . '/addresses/data/' . $address . '/' . $key;
// Отправка GET-запроса и обработка полученных данных.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$entry = json_decode($response, true) ?: [];
// Вывод результатов.
printf("%s (%s): %s\n", $entry['key'], $entry['type'], $entry['value']);
# Метаданные скрипта аккаунта
Endpoint: GET /addresses/scriptInfo/{address}
<?php
// Укажите адрес.
$address = 'УКАЖИТЕ АДРЕС';
/*
* Укажите сеть:
* - Mainnet: 'https://nodes.wavesnodes.com'
* - Testnet: 'https://nodes-testnet.wavesnodes.com'
* - Stagenet: 'https://nodes-stagenet.wavesnodes.com'
*/
$nodeUrl = 'https://nodes-testnet.wavesnodes.com';
// Создание URL-запроса.
$url = $nodeUrl . '/addresses/scriptInfo/' . $address;
// Отправка GET-запроса и обработка полученных данных.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$info = json_decode($response, true) ?: [];
// Вывод результатов.
$hasScript = isset($info['script']) && $info['script'] !== null;
printf("Наличие скрипта: %s\n", $hasScript ? 'true' : 'false');
if ($hasScript) {
printf("Сложность скрипта: %d\nДополнительная комиссия: %d\n", $info['complexity'], $info['extraFee']);
}