@wuwei-labs/srsly
Version:
TypeScript SDK for SRSLY
75 lines • 2.6 kB
TypeScript
/**
* @purpose Amount parameter conversion utilities
*
* Converts user-friendly ATLAS amounts to stardust (smallest unit) for use with Solana programs.
* 1 ATLAS = 100,000,000 stardust (8 decimal places)
*/
/**
* Amount parameter type
*
* Accepts either:
* - Plain `number` / `bigint` — interpreted as **stardust** (smallest unit)
* - `{ atlas: number }` — convenience form for whole ATLAS with decimals
* - `{ stardust: number | bigint }` — explicit smallest unit (same as a bare number)
*
* Bare numbers default to stardust because the on-chain program operates
* in stardust — `convertAmount(100)` is 100 stardust (0.000001 ATLAS),
* not 100 ATLAS. Pass `{ atlas: 100 }` for one hundred ATLAS.
*/
export type AmountParam = number | bigint | {
atlas: number;
} | {
stardust: number | bigint;
};
/**
* Convert amount parameter to stardust (smallest unit)
*
* @param amount - Amount in any supported format
* @returns Amount in stardust (u64 for Solana program)
* @throws Error if amount is invalid, negative, or non-integer stardust
*
* @example
* ```typescript
* convertAmount(10_000_000_000) // 10_000_000_000n stardust (100 ATLAS)
* convertAmount({ atlas: 10 }) // 1_000_000_000n stardust (10 ATLAS)
* convertAmount({ stardust: 1_000_000 }) // 1_000_000n stardust (0.01 ATLAS)
* ```
*/
export declare function convertAmount(amount: AmountParam): bigint;
/**
* Convert stardust to ATLAS for display
*
* @param stardust - Amount in stardust
* @returns Amount in ATLAS (decimal)
*
* @example
* ```typescript
* stardustToAtlas(100_000_000n) // 1.0 ATLAS
* stardustToAtlas(150_000_000n) // 1.5 ATLAS
* ```
*/
export declare function stardustToAtlas(stardust: bigint | number): number;
/**
* Format amount for display
*
* @param stardust - Amount in stardust
* @param decimals - Number of decimal places (default: 8 for full precision)
* @returns Formatted ATLAS amount string
*
* @example
* ```typescript
* formatAmount(100_000_000n) // "1.00000000 ATLAS"
* formatAmount(150_000_000n, 2) // "1.50 ATLAS"
* ```
*/
export declare function formatAmount(stardust: bigint | number, decimals?: number): string;
/**
* Validate amount is within reasonable bounds
*
* @param stardust - Amount in stardust
* @param min - Minimum allowed amount in stardust (default: 0)
* @param max - Maximum allowed amount in stardust (default: MAX_U64)
* @throws Error if amount is out of bounds
*/
export declare function validateAmount(stardust: bigint, min?: bigint, max?: bigint): void;
//# sourceMappingURL=amount.d.ts.map