From a3cdfa5c4defb542c3f96b38c7a3d34d270e185e Mon Sep 17 00:00:00 2001 From: Luis Covarrubias Date: Fri, 13 Mar 2026 15:17:42 -0700 Subject: [PATCH] refactor: derive getBaseFactor from statics in AbstractLightningCoin Replace the hardcoded 1e11 return value in getBaseFactor() with Math.pow(10, this._staticsCoin.decimalPlaces), following the same pattern used by Dot, Bld, Osmo, and other coins. The statics LightningCoin already has decimalPlaces: 11 so behavior is unchanged. BTC-3158 TICKET: BTC-3158 --- .../abstract-lightning/src/abstractLightningCoin.ts | 10 ++++++++-- modules/sdk-coin-lnbtc/package.json | 1 + modules/sdk-coin-lnbtc/src/lnbtc.ts | 9 +++++---- modules/sdk-coin-lnbtc/src/tlnbtc.ts | 9 +++++---- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/modules/abstract-lightning/src/abstractLightningCoin.ts b/modules/abstract-lightning/src/abstractLightningCoin.ts index 71bf15f3ce..6ddb9a21e9 100644 --- a/modules/abstract-lightning/src/abstractLightningCoin.ts +++ b/modules/abstract-lightning/src/abstractLightningCoin.ts @@ -10,19 +10,25 @@ import { VerifyAddressOptions, VerifyTransactionOptions, } from '@bitgo/sdk-core'; +import { BaseCoin as StaticsBaseCoin } from '@bitgo/statics'; import * as utxolib from '@bitgo/utxo-lib'; import { randomBytes } from 'crypto'; import { bip32 } from '@bitgo/utxo-lib'; export abstract class AbstractLightningCoin extends BaseCoin { + protected readonly _staticsCoin: Readonly; private readonly _network: utxolib.Network; - protected constructor(bitgo: BitGoBase, network: utxolib.Network) { + protected constructor(bitgo: BitGoBase, network: utxolib.Network, staticsCoin?: Readonly) { super(bitgo); + if (!staticsCoin) { + throw new Error('missing required constructor parameter staticsCoin'); + } + this._staticsCoin = staticsCoin; this._network = network; } getBaseFactor(): number { - return 1e11; + return Math.pow(10, this._staticsCoin.decimalPlaces); } verifyTransaction(params: VerifyTransactionOptions): Promise { diff --git a/modules/sdk-coin-lnbtc/package.json b/modules/sdk-coin-lnbtc/package.json index 4788a6548a..cfe4ea0290 100644 --- a/modules/sdk-coin-lnbtc/package.json +++ b/modules/sdk-coin-lnbtc/package.json @@ -42,6 +42,7 @@ "dependencies": { "@bitgo/abstract-lightning": "^7.8.3", "@bitgo/sdk-core": "^36.34.0", + "@bitgo/statics": "^58.30.0", "@bitgo/utxo-lib": "^11.21.0" }, "devDependencies": { diff --git a/modules/sdk-coin-lnbtc/src/lnbtc.ts b/modules/sdk-coin-lnbtc/src/lnbtc.ts index b47916c524..eeda08cb92 100644 --- a/modules/sdk-coin-lnbtc/src/lnbtc.ts +++ b/modules/sdk-coin-lnbtc/src/lnbtc.ts @@ -1,14 +1,15 @@ import { AbstractLightningCoin } from '@bitgo/abstract-lightning'; import { BitGoBase, BaseCoin } from '@bitgo/sdk-core'; +import { BaseCoin as StaticsBaseCoin } from '@bitgo/statics'; import * as utxolib from '@bitgo/utxo-lib'; export class Lnbtc extends AbstractLightningCoin { - constructor(bitgo: BitGoBase, network?: utxolib.Network) { - super(bitgo, network || utxolib.networks.bitcoin); + constructor(bitgo: BitGoBase, network?: utxolib.Network, staticsCoin?: Readonly) { + super(bitgo, network || utxolib.networks.bitcoin, staticsCoin); } - static createInstance(bitgo: BitGoBase): BaseCoin { - return new Lnbtc(bitgo); + static createInstance(bitgo: BitGoBase, staticsCoin?: Readonly): BaseCoin { + return new Lnbtc(bitgo, undefined, staticsCoin); } getChain(): string { diff --git a/modules/sdk-coin-lnbtc/src/tlnbtc.ts b/modules/sdk-coin-lnbtc/src/tlnbtc.ts index e98b333951..22ee1fdbb1 100644 --- a/modules/sdk-coin-lnbtc/src/tlnbtc.ts +++ b/modules/sdk-coin-lnbtc/src/tlnbtc.ts @@ -2,16 +2,17 @@ * @prettier */ import { BaseCoin, BitGoBase } from '@bitgo/sdk-core'; +import { BaseCoin as StaticsBaseCoin } from '@bitgo/statics'; import { Lnbtc } from './lnbtc'; import * as utxolib from '@bitgo/utxo-lib'; export class Tlnbtc extends Lnbtc { - constructor(bitgo: BitGoBase) { - super(bitgo, utxolib.networks.testnet); + constructor(bitgo: BitGoBase, staticsCoin?: Readonly) { + super(bitgo, utxolib.networks.testnet, staticsCoin); } - static createInstance(bitgo: BitGoBase): BaseCoin { - return new Tlnbtc(bitgo); + static createInstance(bitgo: BitGoBase, staticsCoin?: Readonly): BaseCoin { + return new Tlnbtc(bitgo, staticsCoin); } getChain(): string {