🔢Big Numbers
In our development, especially when dealing with token amounts, block heights, or other large numerical values, we often encounter numbers that exceed the capacity of standard integer types. This is where big number handling becomes crucial.
Cosmos SDK's Uint Class
On the BitBadges blockchain, we utilize the Cosmos SDK's Uint
class. This class has several important characteristics:
Arbitrary Precision: It can represent integers of any size, without the limitations of fixed-size integer types.
Immutability: Once created, a
Uint
instance cannot be changed, ensuring data integrity.Operations: It provides methods for arithmetic operations that maintain precision.
The Uint
class allows us to work with numbers that can exceed standard uint or number types like Go's uint64
or JavaScript's Number.MAX_SAFE_INTEGER
.
Handling Big Numbers Across the Stack
To ensure consistent and precise number handling across different parts of the BitBadges ecosystem, we employ the following strategies:
On the Blockchain
All number types in submitted Messages (Msgs) and transactions must be first stringified.
These stringified numbers are then parsed as
Cosmos.Uint
on-chain.
In the SDK and API
We use
BigInt
for the main functionality.When sending data over HTTP via the API, all big numbers are stringified.
Best Practices for Developers
Always Use String Representation: When dealing with potentially large numbers, always use string representation in your data structures and API calls.
Parse Carefully: When receiving number data, always parse it using appropriate big number libraries or classes.
Perform Calculations with Big Number Types: Don't convert to standard number types for calculations, as this may lead to precision loss.
Be Aware of Language/Platform Limitations: Different programming languages and platforms have different limitations for number handling. Always use appropriate big number libraries.
Last updated