31 lines
1.2 KiB
TypeScript
31 lines
1.2 KiB
TypeScript
export interface ILiquidityAd {
|
|
funding_weight: number;
|
|
lease_fee_basis: number; // lease fee rate in parts-per-thousandth
|
|
lease_fee_base_sat: number; // fixed lease fee in sats
|
|
channel_fee_max_rate: number; // max routing fee rate in parts-per-thousandth
|
|
channel_fee_max_base: number; // max routing base fee in milli-sats
|
|
compact_lease?: string;
|
|
}
|
|
|
|
export function parseLiquidityAdHex(compact_lease: string): ILiquidityAd | false {
|
|
if (!compact_lease || compact_lease.length < 20 || compact_lease.length > 28) {
|
|
return false;
|
|
}
|
|
try {
|
|
const liquidityAd: ILiquidityAd = {
|
|
funding_weight: parseInt(compact_lease.slice(0, 4), 16),
|
|
lease_fee_basis: parseInt(compact_lease.slice(4, 8), 16),
|
|
channel_fee_max_rate: parseInt(compact_lease.slice(8, 12), 16),
|
|
lease_fee_base_sat: parseInt(compact_lease.slice(12, 20), 16),
|
|
channel_fee_max_base: compact_lease.length > 20 ? parseInt(compact_lease.slice(20), 16) : 0,
|
|
}
|
|
if (Object.values(liquidityAd).reduce((valid: boolean, value: number): boolean => (valid && !isNaN(value) && value >= 0), true)) {
|
|
liquidityAd.compact_lease = compact_lease;
|
|
return liquidityAd;
|
|
} else {
|
|
return false;
|
|
}
|
|
} catch (err) {
|
|
return false;
|
|
}
|
|
} |