diff --git a/src/services/lnd/index.ts b/src/services/lnd/index.ts index c68bcbd6..ad18f505 100644 --- a/src/services/lnd/index.ts +++ b/src/services/lnd/index.ts @@ -1,5 +1,5 @@ import * as Types from '../../../proto/autogenerated/ts/types.js' -import { GetInfoResponse, NewAddressResponse, AddInvoiceResponse, PayReq, Payment, SendCoinsResponse, EstimateFeeResponse, TransactionDetails, ClosedChannelsResponse, ListChannelsResponse, PendingChannelsResponse, ListInvoiceResponse, ListPaymentsResponse } from '../../../proto/lnd/lightning.js' +import { GetInfoResponse, NewAddressResponse, AddInvoiceResponse, PayReq, Payment, SendCoinsResponse, EstimateFeeResponse, TransactionDetails, ClosedChannelsResponse, ListChannelsResponse, PendingChannelsResponse, ListInvoiceResponse, ListPaymentsResponse, ChannelBalanceResponse, WalletBalanceResponse } from '../../../proto/lnd/lightning.js' import { EnvMustBeNonEmptyString, EnvMustBeInteger, EnvCanBeBoolean } from '../helpers/envParser.js' import { AddressPaidCb, BalanceInfo, DecodedInvoice, HtlcCb, Invoice, InvoicePaidCb, LndSettings, NewBlockCb, NodeInfo, PaidInvoice } from './settings.js' import LND from './lnd.js' @@ -32,6 +32,8 @@ export interface LightningHandler { ChannelBalance(): Promise<{ local: number, remote: number }> GetTransactions(startHeight: number): Promise GetBalance(): Promise + GetWalletBalance(): Promise + GetChannelBalance(): Promise ListClosedChannels(): Promise ListChannels(): Promise ListPendingChannels(): Promise diff --git a/src/services/lnd/lnd.ts b/src/services/lnd/lnd.ts index 00fdb505..c89676e1 100644 --- a/src/services/lnd/lnd.ts +++ b/src/services/lnd/lnd.ts @@ -333,6 +333,16 @@ export default class { return res.response } + async GetChannelBalance() { + const res = await this.lightning.channelBalance({}, DeadLineMetadata()) + return res.response + } + + async GetWalletBalance() { + const res = await this.lightning.walletBalance({}, DeadLineMetadata()) + return res.response + } + async GetBalance(): Promise { const wRes = await this.lightning.walletBalance({}, DeadLineMetadata()) const { confirmedBalance, unconfirmedBalance, totalBalance } = wRes.response diff --git a/src/services/lnd/mock.ts b/src/services/lnd/mock.ts index 0cbfacc4..eb9a2dab 100644 --- a/src/services/lnd/mock.ts +++ b/src/services/lnd/mock.ts @@ -7,7 +7,7 @@ import * as Types from '../../../proto/autogenerated/ts/types.js' import { LightningClient } from '../../../proto/lnd/lightning.client.js' import { InvoicesClient } from '../../../proto/lnd/invoices.client.js' import { RouterClient } from '../../../proto/lnd/router.client.js' -import { GetInfoResponse, AddressType, NewAddressResponse, AddInvoiceResponse, Invoice_InvoiceState, PayReq, Payment_PaymentStatus, Payment, PaymentFailureReason, SendCoinsResponse, EstimateFeeResponse, TransactionDetails, ClosedChannelsResponse, ListChannelsResponse, PendingChannelsResponse, ListInvoiceResponse, ListPaymentsResponse } from '../../../proto/lnd/lightning.js' +import { GetInfoResponse, AddressType, NewAddressResponse, AddInvoiceResponse, Invoice_InvoiceState, PayReq, Payment_PaymentStatus, Payment, PaymentFailureReason, SendCoinsResponse, EstimateFeeResponse, TransactionDetails, ClosedChannelsResponse, ListChannelsResponse, PendingChannelsResponse, ListInvoiceResponse, ListPaymentsResponse, ChannelBalanceResponse, WalletBalanceResponse } from '../../../proto/lnd/lightning.js' import { OpenChannelReq } from './openChannelReq.js'; import { AddInvoiceReq } from './addInvoiceReq.js'; import { PayInvoiceReq } from './payInvoiceReq.js'; @@ -35,10 +35,13 @@ export default class { this.invoicePaidCb(invoice, decoded.numSatoshis || amount, false) delete this.invoicesAwaiting[invoice] } - + GetChannelBalance(): Promise { + throw new Error("Method not implemented."); + } Stop() { } async Warmup() { } + async GetWalletBalance(): Promise { throw new Error("ListClosedChannels disabled in mock mode") } async ListClosedChannels(): Promise { throw new Error("ListClosedChannels disabled in mock mode") } async ListChannels(): Promise { throw new Error("ListChannels disabled in mock mode") } async ListPendingChannels(): Promise { throw new Error("ListPendingChannels disabled in mock mode") } diff --git a/src/services/main/watchdog.ts b/src/services/main/watchdog.ts index 3011c077..b367a24d 100644 --- a/src/services/main/watchdog.ts +++ b/src/services/main/watchdog.ts @@ -48,24 +48,15 @@ export class Watchdog { }, 1000 * 60) } + + getTotalLndBalance = async (usersTotal: number) => { - const localLog = getLogger({ appName: "debugLndBalancev2" }) - const { confirmedBalance, channelsBalance } = await this.lnd.GetBalance() - this.log(confirmedBalance, "sats in chain wallet") - localLog({ c: channelsBalance, u: usersTotal }) - let totalBalance = confirmedBalance - channelsBalance.forEach(c => { - let totalBalanceInHtlcs = 0 - c.htlcs.forEach(htlc => { - if (htlc.incoming) { - totalBalanceInHtlcs += htlc.amount - } else { - //totalBalanceInHtlcs -= htlc.amount - } - }) - totalBalance += c.localBalanceSats + totalBalanceInHtlcs - }) - return totalBalance + const walletBalance = await this.lnd.GetWalletBalance() + this.log(Number(walletBalance.confirmedBalance), "sats in chain wallet") + const channelsBalance = await this.lnd.GetChannelBalance() + getLogger({ appName: "debugLndBalancev3" })({ w: walletBalance, c: channelsBalance, u: usersTotal }) + const localChannelsBalance = Number(channelsBalance.localBalance?.sat || 0) + return Number(walletBalance.confirmedBalance) + localChannelsBalance } checkBalanceUpdate = (deltaLnd: number, deltaUsers: number) => {