Skip to content

Commit b20b8c0

Browse files
committed
Merge branch 'master' into kotlin-ldk-setup
2 parents c417b73 + 04f8622 commit b20b8c0

File tree

7 files changed

+97
-11
lines changed

7 files changed

+97
-11
lines changed

ios/Classes/LdkChannelManagerPersister.swift

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,16 @@ class LdkChannelManagerPersister: Persister, ExtendedChannelManagerPersister {
139139
//Unused on mobile
140140
return
141141
case .PendingHTLCsForwardable:
142-
//TODO not sure if required.
142+
guard let pendingHTLCsForwardable = event.getValueAsPendingHTLCsForwardable() else {
143+
return handleEventError(event)
144+
}
145+
146+
LdkEventEmitter.shared.send(
147+
withEvent: .channel_manager_pending_htlcs_forwardable,
148+
body: [
149+
"time_forwardable": pendingHTLCsForwardable.getTime_forwardable(),
150+
]
151+
)
143152
return
144153
case .SpendableOutputs:
145154
guard let spendableOutputs = event.getValueAsSpendableOutputs() else {

ios/Classes/LdkFilter.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class LdkFilter: Filter {
1717
LdkEventEmitter.shared.send(
1818
withEvent: .register_tx,
1919
body: [
20-
"txid": Data(txid ?? []).hexEncodedString(),
20+
"txid": Data(Data(txid ?? []).reversed()).hexEncodedString(),
2121
"script_pubkey": Data(script_pubkey).hexEncodedString()
2222
]
2323
)

ios/Ldk.m

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,11 @@ @interface RCT_EXTERN_MODULE(Ldk, NSObject)
8181
description:(NSString *)description
8282
resolve:(RCTPromiseResolveBlock)resolve
8383
reject:(RCTPromiseRejectBlock)reject)
84+
RCT_EXTERN_METHOD(processPendingHtlcForwards:(RCTPromiseResolveBlock)resolve
85+
reject:(RCTPromiseRejectBlock)reject)
86+
RCT_EXTERN_METHOD(claimFunds:(NSString *)paymentPreimage
87+
resolve:(RCTPromiseResolveBlock)resolve
88+
reject:(RCTPromiseRejectBlock)reject)
8489
@end
8590

8691
//MARK: Events

ios/Ldk.swift

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ enum EventTypes: String, CaseIterable {
1919
case channel_manager_payment_path_successful = "channel_manager_payment_path_successful"
2020
case channel_manager_payment_path_failed = "channel_manager_payment_path_failed"
2121
case channel_manager_payment_failed = "channel_manager_payment_failed"
22+
case channel_manager_pending_htlcs_forwardable = "channel_manager_pending_htlcs_forwardable"
2223
case channel_manager_spendable_outputs = "channel_manager_spendable_outputs"
2324
case channel_manager_channel_closed = "channel_manager_channel_closed"
2425
case channel_manager_discard_funding = "channel_manager_discard_funding"
@@ -46,6 +47,7 @@ enum LdkErrors: String {
4647
case invoice_payment_fail = "invoice_payment_fail"
4748
case init_ldk_currency = "init_ldk_currency"
4849
case invoice_create_failed = "invoice_create_failed"
50+
case claim_funds_failed = "claim_funds_failed"
4951
}
5052

5153
enum LdkCallbackResponses: String {
@@ -64,6 +66,8 @@ enum LdkCallbackResponses: String {
6466
case invoice_payment_success = "invoice_payment_success"
6567
case tx_set_confirmed = "tx_set_confirmed"
6668
case tx_set_unconfirmed = "tx_set_unconfirmed"
69+
case process_pending_htlc_forwards_success = "process_pending_htlc_forwards_success"
70+
case claim_funds_success = "claim_funds_success"
6771
}
6872

6973
@objc(Ldk)
@@ -166,9 +170,8 @@ class Ldk: NSObject {
166170

167171
@objc
168172
func initNetworkGraph(_ genesisHash: NSString, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
169-
networkGraph = NetworkGraph(genesis_hash: String(genesisHash).hexaBytes.reversed())
173+
networkGraph = NetworkGraph(genesis_hash: String(genesisHash).hexaBytes)
170174
//TODO load cached version if exists instead. NetworkGraph.read(ser: serialized_backup)
171-
172175
handleResolve(resolve, .network_graph_init_success)
173176
}
174177

@@ -305,7 +308,7 @@ class Ldk: NSObject {
305308
@objc
306309
func addPeer(_ address: NSString, port: NSInteger, pubKey: NSString, timeout: NSInteger, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
307310
//timeout param not used. Only for android.
308-
311+
309312
//Sync ChannelMonitors and ChannelManager to chain tip
310313
guard let peerHandler = peerHandler else {
311314
return handleReject(reject, .init_peer_handler)
@@ -370,7 +373,7 @@ class Ldk: NSObject {
370373
return handleReject(reject, .decode_invoice_fail, nil, error?.to_str())
371374
}
372375

373-
376+
374377
// invoice.into_signed_raw().raw_invoice().description()
375378
resolve(invoice.asJson) //Invoice class extended in Helpers file
376379
}
@@ -387,7 +390,7 @@ class Ldk: NSObject {
387390

388391
let res = invoicePayer.pay_invoice(invoice: invoice)
389392
if res.isOk() {
390-
handleResolve(resolve, .invoice_payment_success)
393+
return handleResolve(resolve, .invoice_payment_success)
391394
}
392395

393396
guard let error = res.getError() else {
@@ -457,6 +460,31 @@ class Ldk: NSObject {
457460
return handleReject(reject, .invoice_create_failed, nil, "Invoice creation error: \(creationError.rawValue)")
458461
}
459462

463+
@objc
464+
func processPendingHtlcForwards(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
465+
guard let channelManager = channelManager else {
466+
return handleReject(reject, .init_channel_manager)
467+
}
468+
469+
channelManager.process_pending_htlc_forwards()
470+
471+
handleResolve(resolve, .process_pending_htlc_forwards_success)
472+
}
473+
474+
@objc
475+
func claimFunds(_ paymentPreimage: NSString, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
476+
guard let channelManager = channelManager else {
477+
return handleReject(reject, .init_channel_manager)
478+
}
479+
480+
let res = channelManager.claim_funds(payment_preimage: String(paymentPreimage).hexaBytes)
481+
if res == false {
482+
handleReject(reject, .claim_funds_failed)
483+
}
484+
485+
handleResolve(resolve, .claim_funds_success)
486+
}
487+
460488
//MARK: Fetch methods
461489
@objc
462490
func version(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {

src/ldk.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,33 @@ class LDK {
312312
}
313313
}
314314

315+
/**
316+
* https://docs.rs/lightning/latest/lightning/ln/channelmanager/struct.ChannelManager.html#method.process_pending_htlc_forwards
317+
* @returns {Promise<Err<unknown> | Ok<Ok<string> | Err<string>>>}
318+
*/
319+
async processPendingHtlcForwards(): Promise<Result<string>> {
320+
try {
321+
const res = await NativeLDK.processPendingHtlcForwards();
322+
return ok(res);
323+
} catch (e) {
324+
return err(e);
325+
}
326+
}
327+
328+
/**
329+
* https://docs.rs/lightning/latest/lightning/ln/channelmanager/struct.ChannelManager.html#method.claim_funds
330+
* @returns {Promise<Err<unknown> | Ok<Ok<string> | Err<string>>>}
331+
* @param paymentPreimage
332+
*/
333+
async claimFunds(paymentPreimage: string): Promise<Result<string>> {
334+
try {
335+
const res = await NativeLDK.claimFunds(paymentPreimage);
336+
return ok(res);
337+
} catch (e) {
338+
return err(e);
339+
}
340+
}
341+
315342
/**
316343
* Pays a bolt11 payment request
317344
* @param paymentRequest

src/lightning-manager.ts

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
TPersistManagerEvent,
2121
TRegisterOutputEvent,
2222
TRegisterTxEvent,
23+
TChannelManagerPendingHtlcsForwardable,
2324
} from './utils/types';
2425
import {
2526
dummyRandomSeed,
@@ -105,6 +106,10 @@ class LightningManager {
105106
EEventTypes.channel_manager_payment_failed,
106107
this.onChannelManagerPaymentFailed.bind(this),
107108
);
109+
ldk.onEvent(
110+
EEventTypes.channel_manager_pending_htlcs_forwardable,
111+
this.onChannelManagerPendingHtlcsForwardable.bind(this),
112+
);
108113
ldk.onEvent(
109114
EEventTypes.channel_manager_spendable_outputs,
110115
this.onChannelManagerSpendableOutputs.bind(this),
@@ -330,10 +335,12 @@ class LightningManager {
330335
private onChannelManagerPaymentReceived(
331336
res: TChannelManagerPaymentReceived,
332337
): void {
333-
//TODO call channelManager.claim_funds(payment_preimage: paymentPreimage) if spontaneous_payment_preimage is not a blank string as
334-
//https://docs.rs/lightning/latest/lightning/util/events/enum.PaymentPurpose.html#variant.SpontaneousPayment
335-
//If not a spontaneous payment then nothing to do but notify user invoice was paid
336-
console.log(`onChannelManagerPaymentReceived: ${JSON.stringify(res)}`); //TODO
338+
if (res.spontaneous_payment_preimage) {
339+
//https://docs.rs/lightning/latest/lightning/util/events/enum.PaymentPurpose.html#variant.SpontaneousPayment
340+
ldk.claimFunds(res.spontaneous_payment_preimage).catch(console.error);
341+
} else {
342+
ldk.claimFunds(res.payment_preimage).catch(console.error);
343+
}
337344
}
338345

339346
private onChannelManagerPaymentSent(res: TChannelManagerPaymentSent): void {
@@ -369,6 +376,12 @@ class LightningManager {
369376
console.log(`onChannelManagerPaymentFailed: ${JSON.stringify(res)}`); //TODO
370377
}
371378

379+
private onChannelManagerPendingHtlcsForwardable(
380+
res: TChannelManagerPendingHtlcsForwardable,
381+
): void {
382+
ldk.processPendingHtlcForwards().catch(console.error);
383+
}
384+
372385
private onChannelManagerSpendableOutputs(
373386
res: TChannelManagerSpendableOutputs,
374387
): void {

src/utils/types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export enum EEventTypes {
2222
channel_manager_payment_path_successful = 'channel_manager_payment_path_successful',
2323
channel_manager_payment_path_failed = 'channel_manager_payment_path_failed',
2424
channel_manager_payment_failed = 'channel_manager_payment_failed',
25+
channel_manager_pending_htlcs_forwardable = 'channel_manager_pending_htlcs_forwardable',
2526
channel_manager_spendable_outputs = 'channel_manager_spendable_outputs',
2627
channel_manager_channel_closed = 'channel_manager_channel_closed',
2728
channel_manager_discard_funding = 'channel_manager_discard_funding',
@@ -89,6 +90,9 @@ export type TChannelManagerPaymentFailed = {
8990
payment_id: string;
9091
payment_hash: string;
9192
};
93+
export type TChannelManagerPendingHtlcsForwardable = {
94+
time_forwardable: number;
95+
};
9296
export type TChannelManagerSpendableOutputs = {
9397
outputs: string[];
9498
};

0 commit comments

Comments
 (0)