@@ -152,7 +152,7 @@ pub(crate) fn color_commitment<SP: Deref>(channel_context: &ChannelContext<SP>,
152
152
153
153
let mut runtime = get_rgb_runtime ( ldk_data_dir) ;
154
154
155
- let ( rgb_info, _) = get_rgb_channel_info ( channel_id, ldk_data_dir) ;
155
+ let ( rgb_info, _) = get_rgb_channel_info_pending ( channel_id, ldk_data_dir) ;
156
156
157
157
let chan_id = channel_id. to_hex ( ) ;
158
158
let mut beneficiaries = vec ! [ ] ;
@@ -419,7 +419,7 @@ pub(crate) fn color_closing(channel_id: &ChannelId, funding_outpoint: &OutPoint,
419
419
420
420
let mut runtime = get_rgb_runtime ( ldk_data_dir) ;
421
421
422
- let ( rgb_info, _) = get_rgb_channel_info ( channel_id, ldk_data_dir) ;
422
+ let ( rgb_info, _) = get_rgb_channel_info_pending ( channel_id, ldk_data_dir) ;
423
423
424
424
let holder_vout = transaction. output . iter ( ) . position ( |o| o. script_pubkey == closing_tx. to_holder_script ) . unwrap ( ) ;
425
425
let counterparty_vout = holder_vout ^ 1 ;
@@ -509,29 +509,42 @@ pub fn get_rgb_payment_info_path(payment_hash: &PaymentHash, ldk_data_dir: &Path
509
509
ldk_data_dir. join ( hex:: encode ( payment_hash. 0 ) )
510
510
}
511
511
512
- /// Get RgbPaymentInfo file
513
- pub fn get_rgb_payment_info ( payment_hash : & PaymentHash , ldk_data_dir : & Path ) -> RgbPaymentInfo {
514
- let rgb_payment_info_path = get_rgb_payment_info_path ( payment_hash, ldk_data_dir) ;
515
- parse_rgb_payment_info ( & rgb_payment_info_path)
516
- }
517
-
518
512
/// Parse RgbPaymentInfo
519
513
pub fn parse_rgb_payment_info ( rgb_payment_info_path : & PathBuf ) -> RgbPaymentInfo {
520
514
let serialized_info = fs:: read_to_string ( rgb_payment_info_path) . expect ( "valid rgb payment info" ) ;
521
515
serde_json:: from_str ( & serialized_info) . expect ( "valid rgb info file" )
522
516
}
523
517
518
+ /// Get RgbInfo file path
519
+ pub fn get_rgb_channel_info_path ( channel_id : & str , ldk_data_dir : & Path , pending : bool ) -> PathBuf {
520
+ let mut info_file_path = ldk_data_dir. join ( channel_id) ;
521
+ if pending {
522
+ info_file_path. set_extension ( "pending" ) ;
523
+ }
524
+ info_file_path
525
+ }
526
+
524
527
/// Get RgbInfo file
525
- pub fn get_rgb_channel_info ( channel_id : & ChannelId , ldk_data_dir : & Path ) -> ( RgbInfo , PathBuf ) {
526
- let info_file_path = ldk_data_dir. join ( channel_id. to_hex ( ) ) ;
527
- let serialized_info = fs:: read_to_string ( & info_file_path) . expect ( "valid rgb info file" ) ;
528
- let info: RgbInfo = serde_json:: from_str ( & serialized_info) . expect ( "valid rgb info file" ) ;
528
+ pub ( crate ) fn get_rgb_channel_info ( channel_id : & str , ldk_data_dir : & Path , pending : bool ) -> ( RgbInfo , PathBuf ) {
529
+ let info_file_path = get_rgb_channel_info_path ( channel_id, ldk_data_dir, pending) ;
530
+ let info = parse_rgb_channel_info ( & info_file_path) ;
529
531
( info, info_file_path)
530
532
}
531
533
534
+ /// Get pending RgbInfo file
535
+ pub fn get_rgb_channel_info_pending ( channel_id : & ChannelId , ldk_data_dir : & Path ) -> ( RgbInfo , PathBuf ) {
536
+ get_rgb_channel_info ( & channel_id. to_hex ( ) , ldk_data_dir, true )
537
+ }
538
+
539
+ /// Parse RgbInfo
540
+ pub fn parse_rgb_channel_info ( rgb_channel_info_path : & PathBuf ) -> RgbInfo {
541
+ let serialized_info = fs:: read_to_string ( & rgb_channel_info_path) . expect ( "valid rgb info file" ) ;
542
+ serde_json:: from_str ( & serialized_info) . expect ( "valid rgb info file" )
543
+ }
544
+
532
545
/// Whether the channel data for a channel exist
533
546
pub fn is_channel_rgb ( channel_id : & ChannelId , ldk_data_dir : & Path ) -> bool {
534
- ldk_data_dir . join ( channel_id. to_hex ( ) ) . exists ( )
547
+ get_rgb_channel_info_path ( & channel_id. to_hex ( ) , ldk_data_dir , false ) . exists ( )
535
548
}
536
549
537
550
/// Write RgbInfo file
@@ -559,9 +572,14 @@ pub(crate) fn rename_rgb_files(channel_id: &ChannelId, temporary_channel_id: &Ch
559
572
let temp_chan_id = temporary_channel_id. to_hex ( ) ;
560
573
let chan_id = channel_id. to_hex ( ) ;
561
574
562
- let temporary_channel_id_path = ldk_data_dir. join ( & temp_chan_id) ;
563
- let channel_id_path = ldk_data_dir. join ( & chan_id) ;
564
- fs:: rename ( temporary_channel_id_path, channel_id_path) . expect ( "rename ok" ) ;
575
+ fs:: rename (
576
+ get_rgb_channel_info_path ( & temp_chan_id, ldk_data_dir, false ) ,
577
+ get_rgb_channel_info_path ( & chan_id, ldk_data_dir, false ) ,
578
+ ) . expect ( "rename ok" ) ;
579
+ fs:: rename (
580
+ get_rgb_channel_info_path ( & temp_chan_id, ldk_data_dir, true ) ,
581
+ get_rgb_channel_info_path ( & chan_id, ldk_data_dir, true ) ,
582
+ ) . expect ( "rename ok" ) ;
565
583
566
584
let funding_consignment_tmp = ldk_data_dir. join ( format ! ( "consignment_{}" , temp_chan_id) ) ;
567
585
if funding_consignment_tmp. exists ( ) {
@@ -652,20 +670,21 @@ pub(crate) fn handle_funding(temporary_channel_id: &ChannelId, funding_txid: Str
652
670
} ;
653
671
let _status = runtime. runtime . accept_transfer ( validated_transfer, & mut resolver, true ) . expect ( "valid transfer" ) ;
654
672
655
- let rgb_info_path = ldk_data_dir. join ( temporary_channel_id. to_hex ( ) ) ;
656
673
let rgb_info = RgbInfo {
657
674
contract_id,
658
675
local_rgb_amount : 0 ,
659
676
remote_rgb_amount,
660
677
} ;
661
- write_rgb_channel_info ( & rgb_info_path, & rgb_info) ;
678
+ let temporary_channel_id_str = temporary_channel_id. to_hex ( ) ;
679
+ write_rgb_channel_info ( & get_rgb_channel_info_path ( & temporary_channel_id_str, & ldk_data_dir, true ) , & rgb_info) ;
680
+ write_rgb_channel_info ( & get_rgb_channel_info_path ( & temporary_channel_id_str, & ldk_data_dir, false ) , & rgb_info) ;
662
681
663
682
Ok ( ( ) )
664
683
}
665
684
666
685
/// Update RGB channel amount
667
- pub ( crate ) fn update_rgb_channel_amount ( channel_id : & ChannelId , rgb_offered_htlc : u64 , rgb_received_htlc : u64 , ldk_data_dir : & Path ) {
668
- let ( mut rgb_info, info_file_path) = get_rgb_channel_info ( channel_id, ldk_data_dir) ;
686
+ pub fn update_rgb_channel_amount ( channel_id : & str , rgb_offered_htlc : u64 , rgb_received_htlc : u64 , ldk_data_dir : & Path , pending : bool ) {
687
+ let ( mut rgb_info, info_file_path) = get_rgb_channel_info ( channel_id, ldk_data_dir, pending ) ;
669
688
670
689
if rgb_offered_htlc > rgb_received_htlc {
671
690
let spent = rgb_offered_htlc - rgb_received_htlc;
@@ -680,6 +699,11 @@ pub(crate) fn update_rgb_channel_amount(channel_id: &ChannelId, rgb_offered_htlc
680
699
write_rgb_channel_info ( & info_file_path, & rgb_info)
681
700
}
682
701
702
+ /// Update pending RGB channel amount
703
+ pub ( crate ) fn update_rgb_channel_amount_pending ( channel_id : & ChannelId , rgb_offered_htlc : u64 , rgb_received_htlc : u64 , ldk_data_dir : & Path ) {
704
+ update_rgb_channel_amount ( & channel_id. to_hex ( ) , rgb_offered_htlc, rgb_received_htlc, ldk_data_dir, true )
705
+ }
706
+
683
707
/// Whether the payment is colored
684
708
pub ( crate ) fn is_payment_rgb ( ldk_data_dir : & Path , payment_hash : & PaymentHash ) -> bool {
685
709
ldk_data_dir. join ( hex:: encode ( payment_hash. 0 ) ) . exists ( )
0 commit comments