uint64); amounts, balances and limits (int64); sequence numbers; operation IDs (TOIDs). They routinely exceed 2^53 = 9,007,199,254,740,992, the largest integer an IEEE-754 double holds exactly.
Above that, a double silently rounds:
No error, no warning. The number just changes.
Where it happens
Rarely in the SDK. All three SDKs pass every exact-value check in the corpus. It happens one step later, in your code:Number(x)orparseInt(x)in JavaScript.JSON.parseon a payload with a bare number above 2^53. This is the most common one, because it’s invisible: the producer emits correct JSON, and the consumer rounds it.- A
DOUBLE PRECISIONorFLOATcolumn, or an ORM that mapsint64to a float. - A dataframe library that infers
float64.
The rules
- Store these values as decimal strings or
NUMERIC/BIGINT, never as floats. - Emit them as JSON strings. The corpus does: every 64-bit value in every manifest is a string.
- In JavaScript, use
BigIntor the SDK’s string accessors (MuxedAccount.id()returns a string).