PlatformСуммы и точность

Суммы и точность

Как V3 Custody хранит и передаёт суммы — минимальные единицы (raw) и десятичное представление, конвертация по decimals сети.

Чтобы избежать ошибок округления с плавающей точкой, суммы учитываются в минимальной неделимой единице токена (raw, целое число), а показываются в десятичном виде для человека. Мостом между ними служит decimals токена.

Raw и decimal

  • raw — целое число в минимальных единицах. Точное, без плавающей точки. Например, у USDT в TRON decimals = 6, поэтому 1 USDT = 1 000 000 raw.
  • decimal — привычное представление: "1350.00".
  • decimals — масштаб токена в сети: raw = decimal × 10^decimals.
Токенdecimalsdecimalraw
USDT (TRON)61.51500000
ETH180.0011000000000000000

В запросах и ответах

  • На входе (например, при создании перевода) вы передаёте десятичную сумму — платформа конвертирует её по decimals.
  • В ответах присутствуют оба представления: amount (raw) и amountDecimal (десятичное). Проверка баланса выполняется в raw. Частичный возврат задаётся relatedAmountRaw.

Имена и смысл полей суммы различаются по эндпоинтам (где-то amount — это raw, где-то — десятичный ввод). Точную семантику для конкретного эндпоинта смотрите в Справочнике API.

Почему raw

Целочисленная арифметика в минимальных единицах исключает дрейф плавающей точки: проводки журнала сходятся в ноль точно, а балансы всегда согласованы с журналом. Подробнее — на странице Журнал (двойная запись).

Рекомендации для интеграции

  • Передавайте и храните raw-суммы как строки — большие значения (например, 18 знаков у ETH) выходят за пределы безопасных целых в JavaScript. В ответах суммы приходят строками ("1350000000").
  • Для конвертации и отображения используйте библиотеки десятичной арифметики, а не числа с плавающей точкой.

Что дальше