@hyperlane-xyz/sdk
Version:
The official SDK for the Hyperlane Network
53 lines • 2.54 kB
TypeScript
import { TokenMetadata, WarpRouteDeployConfigMailboxRequired } from '../token/types.js';
/**
* Lossless scale representation using bigint.
* On-chain values and internal comparisons always use this form.
*/
export type NormalizedScale = {
numerator: bigint;
denominator: bigint;
};
/**
* Any scale variant the Zod schema can produce:
* - `number` (e.g. `scale: 1000`)
* - `{numerator: number, denominator: number}`
* - `{numerator: bigint, denominator: bigint}`
*/
export type ScaleInput = TokenMetadata['scale'];
export declare const DEFAULT_SCALE: NormalizedScale;
export type ScaleAlignment = {
localAmount: bigint;
messageAmount: bigint;
};
/**
* Converts any accepted scale variant to NormalizedScale (bigint).
*/
export declare function normalizeScale(scale: ScaleInput | undefined): NormalizedScale;
export declare function messageAmountFromLocal(localAmount: bigint, scale: ScaleInput | undefined): bigint;
export declare function localAmountFromMessage(messageAmount: bigint, scale: ScaleInput | undefined): bigint;
export declare function minLocalAmountForMessage(messageAmount: bigint, scale: ScaleInput | undefined): bigint;
export declare function alignLocalAmountToMessage(localAmount: bigint, scale: ScaleInput | undefined): ScaleAlignment;
/**
* Compares two scale values for equality without precision loss.
* Accepts any scale variant (number, {number,number}, {bigint,bigint}, undefined).
* Uses cross-multiplication: a/b === c/d iff a*d === b*c
*/
export declare function scalesEqual(a: ScaleInput | undefined, b: ScaleInput | undefined): boolean;
/**
* Verifies that scale configs across chains are mutually consistent.
*
* A warp route may use either convention:
* - Scale-up: 6-decimal chains carry scale > 1, max-decimal chain carries no scale
* - Scale-down: max-decimal chain carries scale < 1 ({num:1, den:N}), others carry no scale
*
* Both are valid as long as the effective message amount is identical for every chain:
* scale_A / scale_B == 10^(dec_B - dec_A) for any pair (A, B)
*
* Equivalently (avoiding floating point): for a fixed reference chain R,
* scale_A.num * 10^dec_A * scale_R.den == scale_R.num * 10^dec_R * scale_A.den
*
* This accepts precision loss from scale-down (e.g., BSC 18-decimal USDT
* scaled to 6-decimal message encoding loses 12 digits of sub-unit precision).
*/
export declare function verifyScale(configMap: Map<string, TokenMetadata> | WarpRouteDeployConfigMailboxRequired): boolean;
//# sourceMappingURL=decimals.d.ts.map