Суммы и точность
Как V3 Custody хранит и передаёт суммы — минимальные единицы (raw) и десятичное представление, конвертация по decimals сети.
Чтобы избежать ошибок округления с плавающей точкой, суммы учитываются в минимальной неделимой единице токена (raw, целое число), а показываются в десятичном виде для человека. Мостом между ними служит decimals токена.
Raw и decimal
raw— целое число в минимальных единицах. Точное, без плавающей точки. Например, у USDT в TRONdecimals = 6, поэтому1 USDT = 1 000 000 raw.- decimal — привычное представление:
"1350.00". decimals— масштаб токена в сети:raw = decimal × 10^decimals.
| Токен | decimals | decimal | raw |
|---|---|---|---|
| USDT (TRON) | 6 | 1.5 | 1500000 |
| ETH | 18 | 0.001 | 1000000000000000 |
В запросах и ответах
- На входе (например, при создании перевода) вы передаёте десятичную сумму — платформа конвертирует её по
decimals. - В ответах присутствуют оба представления:
amount(raw) иamountDecimal(десятичное). Проверка баланса выполняется в raw. Частичный возврат задаётсяrelatedAmountRaw.
Имена и смысл полей суммы различаются по эндпоинтам (где-то amount — это raw, где-то — десятичный ввод). Точную семантику для конкретного эндпоинта смотрите в Справочнике API.
Почему raw
Целочисленная арифметика в минимальных единицах исключает дрейф плавающей точки: проводки журнала сходятся в ноль точно, а балансы всегда согласованы с журналом. Подробнее — на странице Журнал (двойная запись).
Рекомендации для интеграции
- Передавайте и храните raw-суммы как строки — большие значения (например, 18 знаков у ETH) выходят за пределы безопасных целых в JavaScript. В ответах суммы приходят строками (
"1350000000"). - Для конвертации и отображения используйте библиотеки десятичной арифметики, а не числа с плавающей точкой.
Что дальше
Was this page helpful?