Перевірки транзакцій
Перевірка транзакції скринить одну транзакцію з погляду вашого клієнта: кошти, які він отримав у депозиті, або кошти, які він надсилає у виведенні. Вона використовує ту саму кінцеву точку, той самий scope (checks:write) і той самий вердикт, що й перевірка адреси, тож усі поля відповіді дивіться на тій сторінці.
Запит
| Поле | Обов'язкове | Опис |
|---|---|---|
subject | так | "transaction". |
asset | так | Символ активу точно так, як у Підтримуваних активах. |
tx_hash | так | Хеш транзакції, не більше 160 символів. Його форма має бути чинною для активу. |
direction | так | "deposit", коли ваш клієнт отримує кошти, "withdrawal", коли він їх надсилає. |
address | іноді | Адреса вашого клієнта в транзакції, не більше 160 символів. Див. наступний розділ. |
Невідомі поля відхиляються. Як і в кожній перевірці, надсилайте Idempotency-Key, щоб повторення не могло виконати перевірку чи списання вдруге; див. Ідемпотентність.
Адреса клієнта
address — це адреса вашого клієнта в транзакції: одержувач депозиту, відправник виведення.
- У TRX, ETH, BNB і BASE її можна пропустити. API читає транзакцію й використовує одержувача для
depositта відправника дляwithdrawal. Ліміт, баланс і ємність перевіряються першими, тож відмовлений обліковий запис не спричиняє жодних запитів. - В усіх інших активах вона обов'язкова, а запит без неї відповідає
422ADDRESS_REQUIRED. Підтримувані активи показують активи, що можуть її визначити. - Ключі sandbox завжди вимагають її. Перевірка транзакції під ключем sandbox без
addressтакож відповідаєADDRESS_REQUIRED; див. Sandbox і live. - Якщо ви її надіслали, вона використовується як є. Нічого не виводиться.
Вердикт закріплює використану адресу: поле address відповіді, доказовий звіт і rederive містять її, незалежно від того, чи ви її надіслали, чи API вивело її. Звіряйте поле address зі своїми записами, якщо покладаєтеся на виведене значення.
Якщо адресу пропущено, а транзакцію не вдається прочитати, запит відповідає 422 TRANSACTION_UNRESOLVED. Так буває, коли такого хеша немає в цій мережі, коли одержувача депозиту не вдається декодувати або коли джерело даних блокчейну не відповіло вчасно. Нічого не прийнято й нічого не списано. Перевірте хеш і мережу, повторіть запит або надішліть адресу самі.
Приклади
Депозит TRON без адреси та виведення Ethereum із вказаною адресою.
- curl
- Node.js
- Python
# TRON deposit, address derived from the transaction
curl -s -X POST https://api.leeri.ai/v1/checks \
-H "Authorization: Bearer $LEERI_API_KEY" \
-H "Idempotency-Key: deposit-2291" \
-H "Content-Type: application/json" \
-d '{"subject":"transaction","asset":"TRX","tx_hash":"'"$TX_HASH"'","direction":"deposit"}'
# Ethereum withdrawal, address supplied
curl -s -X POST https://api.leeri.ai/v1/checks \
-H "Authorization: Bearer $LEERI_API_KEY" \
-H "Idempotency-Key: payout-5530" \
-H "Content-Type: application/json" \
-d '{"subject":"transaction","asset":"ETH","tx_hash":"'"$ETH_TX_HASH"'","direction":"withdrawal","address":"'"$ADDRESS"'"}'
async function checkTransaction(body, idempotencyKey) {
const response = await fetch('https://api.leeri.ai/v1/checks', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.LEERI_API_KEY}`,
'Idempotency-Key': idempotencyKey,
'Content-Type': 'application/json',
},
body: JSON.stringify({ subject: 'transaction', ...body }),
});
const payload = await response.json();
if (response.status === 422) {
const code = payload.errors[0].code;
if (code === 'TRANSACTION_UNRESOLVED') throw new Error('transaction not readable: check the hash and network, or send the address');
if (code === 'ADDRESS_REQUIRED') throw new Error('this asset needs the customer address');
}
return payload.data;
}
// TRON deposit, address derived from the transaction
await checkTransaction({ asset: 'TRX', tx_hash: txHash, direction: 'deposit' }, 'deposit-2291');
// Ethereum withdrawal, address supplied
await checkTransaction({ asset: 'ETH', tx_hash: ethTxHash, direction: 'withdrawal', address }, 'payout-5530');
import os
import requests
def check_transaction(body, idempotency_key):
response = requests.post(
"https://api.leeri.ai/v1/checks",
headers={
"Authorization": f"Bearer {os.environ['LEERI_API_KEY']}",
"Idempotency-Key": idempotency_key,
},
json={"subject": "transaction", **body},
timeout=30,
)
payload = response.json()
if response.status_code == 422:
code = payload["errors"][0]["code"]
if code == "TRANSACTION_UNRESOLVED":
raise RuntimeError("transaction not readable: check the hash and network, or send the address")
if code == "ADDRESS_REQUIRED":
raise RuntimeError("this asset needs the customer address")
return payload["data"]
# TRON deposit, address derived from the transaction
check_transaction({"asset": "TRX", "tx_hash": tx_hash, "direction": "deposit"}, "deposit-2291")
# Ethereum withdrawal, address supplied
check_transaction({"asset": "ETH", "tx_hash": eth_tx_hash, "direction": "withdrawal", "address": address}, "payout-5530")
Що додає відповідь
Відповідь — це той самий CheckView, що й у перевірки адреси, тож status може бути completed або pending; див. Pending і опитування. Для перевірки транзакції заповнені такі поля:
| Поле | Значення |
|---|---|
subject | transaction. |
tx_hash | Транзакція, яку перевірено. |
direction | deposit або withdrawal, як ви надіслали. |
address | Використана адреса клієнта, надіслана або виведена. |
amount | Сума транзакції десятковим рядком, ніколи не числом із рухомою комою. null, коли вона невідома. |
risky_volume_usd | Вартість у USD потоку транзакції, пов'язаного з ризиковими контрагентами, десятковим рядком. null, доки перевірка не завершиться. |
Перевірка адреси, за яку вас уже списали в тому самому блокчейні протягом останніх 7 днів, безкоштовна, зокрема й тоді, коли ви перевіряєте її як транзакцію; див. Обмеження частоти запитів і ліміти.
Помилки
Усе з розділу Перевірки адрес чинне, а також:
| Статус | Код | Коли |
|---|---|---|
422 | ADDRESS_REQUIRED | address пропущено для активу, що не може її визначити, або під ключем sandbox. |
422 | TRANSACTION_UNRESOLVED | address пропущено, а транзакцію не вдалося прочитати. Ніколи не списується. |
400 | VALIDATION_ERROR | tx_hash, direction або address із недійсною формою, або невідоме поле. |
Елементи пакета завжди надсилають address, бо пакет приймається без читання будь-якого блокчейну.