@@ -194,16 +194,22 @@ class LdkChannelManagerPersister: Persister, ExtendedChannelManagerPersister {
194194 let paymentSecret = paymentClaimed. getPurpose ( ) . getValueAsInvoicePayment ( ) ? . getPaymentSecret ( )
195195 let spontaneousPayment = paymentClaimed. getPurpose ( ) . getValueAsSpontaneousPayment ( )
196196
197+ let body : [ String : Encodable ] = [
198+ " payment_hash " : Data ( paymentClaimed. getPaymentHash ( ) ) . hexEncodedString ( ) ,
199+ " amount_sat " : paymentClaimed. getAmountMsat ( ) / 1000 ,
200+ " payment_preimage " : Data ( paymentPreimage ?? [ ] ) . hexEncodedString ( ) ,
201+ " payment_secret " : Data ( paymentSecret ?? [ ] ) . hexEncodedString ( ) ,
202+ " spontaneous_payment_preimage " : Data ( spontaneousPayment ?? [ ] ) . hexEncodedString ( ) ,
203+ " unix_timestamp " : Int ( Date ( ) . timeIntervalSince1970)
204+ ]
205+
197206 LdkEventEmitter . shared. send (
198207 withEvent: . channel_manager_payment_claimed,
199- body: [
200- " payment_hash " : Data ( paymentClaimed. getPaymentHash ( ) ) . hexEncodedString ( ) ,
201- " amount_sat " : paymentClaimed. getAmountMsat ( ) / 1000 ,
202- " payment_preimage " : Data ( paymentPreimage ?? [ ] ) . hexEncodedString ( ) ,
203- " payment_secret " : Data ( paymentSecret ?? [ ] ) . hexEncodedString ( ) ,
204- " spontaneous_payment_preimage " : Data ( spontaneousPayment ?? [ ] ) . hexEncodedString ( ) ,
205- ]
208+ body: body
206209 )
210+
211+ //Save to disk for TX history
212+ persistPaymentClaimed ( body)
207213 default :
208214 LdkEventEmitter . shared. send ( withEvent: . native_log, body: " ERROR: unknown LdkChannelManagerPersister.handle_event type " )
209215 }
@@ -217,7 +223,7 @@ class LdkChannelManagerPersister: Persister, ExtendedChannelManagerPersister {
217223 do {
218224 try Data ( channelManager. write ( ) ) . write ( to: managerStorage)
219225 LdkEventEmitter . shared. send ( withEvent: . native_log, body: " Persisted channel manager to disk " )
220-
226+
221227 LdkEventEmitter . shared. send ( withEvent: . backup, body: " " )
222228
223229 return Result_NoneErrorZ . initWithOk ( )
@@ -231,11 +237,11 @@ class LdkChannelManagerPersister: Persister, ExtendedChannelManagerPersister {
231237 guard let graphStorage = Ldk . accountStoragePath? . appendingPathComponent ( LdkFileNames . network_graph. rawValue) else {
232238 return Result_NoneErrorZ . initWithErr ( e: . Other)
233239 }
234-
240+
235241 do {
236242 try Data ( networkGraph. write ( ) ) . write ( to: graphStorage)
237243 LdkEventEmitter . shared. send ( withEvent: . native_log, body: " Persisted network graph to disk " )
238-
244+
239245 return Result_NoneErrorZ . initWithOk ( )
240246 } catch {
241247 LdkEventEmitter . shared. send ( withEvent: . native_log, body: " Error. Failed to persist network graph to disk Error \( error. localizedDescription) . " )
@@ -247,14 +253,49 @@ class LdkChannelManagerPersister: Persister, ExtendedChannelManagerPersister {
247253 guard let scorerStorage = Ldk . accountStoragePath? . appendingPathComponent ( LdkFileNames . scorer. rawValue) else {
248254 return Result_NoneErrorZ . initWithErr ( e: . Other)
249255 }
250-
256+
251257 do {
252258 try Data ( scorer. write ( ) ) . write ( to: scorerStorage)
253-
259+
254260 return Result_NoneErrorZ . initWithOk ( )
255261 } catch {
256262 LdkEventEmitter . shared. send ( withEvent: . native_log, body: " Error. Failed to persist scorer to disk Error \( error. localizedDescription) . " )
257263 return Result_NoneErrorZ . initWithErr ( e: . Other)
258264 }
259265 }
266+
267+ private func persistPaymentClaimed( _ payment: [ String : Any ] ) {
268+ guard let claimedPaymentsStorage = Ldk . accountStoragePath? . appendingPathComponent ( LdkFileNames . paymentsClaimed. rawValue) else {
269+ LdkEventEmitter . shared. send ( withEvent: . native_log, body: " Error. Failed to persist claimed payment to disk (No set storage) " )
270+ return
271+ }
272+
273+ var newContent : [ [ String : Any ] ] = [ ]
274+
275+ do {
276+ if FileManager . default. fileExists ( atPath: claimedPaymentsStorage. path) {
277+ let data = try Data ( contentsOf: URL ( fileURLWithPath: claimedPaymentsStorage. path) , options: . mappedIfSafe)
278+
279+ if let existingContent = try JSONSerialization . jsonObject ( with: data, options: [ ] ) as? [ [ String : Any ] ] {
280+ newContent = existingContent
281+ } else {
282+ LdkEventEmitter . shared. send ( withEvent: . native_log, body: " Error could not read existing claimed payments " )
283+ }
284+ }
285+
286+ newContent. append ( payment)
287+ guard let jsonData = try ? JSONSerialization . data ( withJSONObject: newContent, options: [ ] ) else {
288+ LdkEventEmitter . shared. send ( withEvent: . native_log, body: " Error could not serialize claimed payments " )
289+ return
290+ }
291+
292+ guard let jsonString = String ( data: jsonData, encoding: . utf8) else {
293+ return
294+ }
295+
296+ try jsonString. write ( to: claimedPaymentsStorage, atomically: true , encoding: . utf8)
297+ } catch {
298+ LdkEventEmitter . shared. send ( withEvent: . native_log, body: " Error writing payment claimed to file: \( error) " )
299+ }
300+ }
260301}
0 commit comments