@@ -1292,14 +1292,15 @@ impl<S> Display for SignOrCreationError<S> {
1292
1292
1293
1293
/// Convenient utilities to create an invoice.
1294
1294
pub mod utils {
1295
- use { Currency , Invoice , InvoiceBuilder , SemanticError , SignedRawInvoice } ;
1295
+ use { Currency , Invoice , InvoiceBuilder , SignOrCreationError , SignedRawInvoice } ;
1296
1296
use bech32:: { FromBase32 , ToBase32 , u5} ;
1297
1297
use bitcoin_hashes:: Hash ;
1298
1298
use lightning:: chain;
1299
1299
use lightning:: chain:: chaininterface:: { BroadcasterInterface , FeeEstimator } ;
1300
1300
use lightning:: chain:: keysinterface:: { Sign , KeysInterface } ;
1301
1301
use lightning:: ln:: channelmanager:: { ChannelManager , MIN_FINAL_CLTV_EXPIRY } ;
1302
1302
use lightning:: ln:: features:: InvoiceFeatures ;
1303
+ use lightning:: ln:: msgs:: DecodeError ;
1303
1304
use lightning:: routing:: network_graph:: RoutingFees ;
1304
1305
use lightning:: routing:: router:: RouteHintHop ;
1305
1306
use lightning:: util:: logger:: Logger ;
@@ -1312,8 +1313,8 @@ pub mod utils {
1312
1313
/// that the payment secret is valid when the invoice is paid.
1313
1314
pub fn create_invoice_from_channelmanager < Signer : Sign , M : Deref , T : Deref , K : Deref , F : Deref , L : Deref > (
1314
1315
channelmanager : & ChannelManager < Signer , M , T , K , F , L > , amt_msat : Option < u64 > , description : String ,
1315
- network : Currency , keys_manager : & dyn KeysInterface < Signer = Signer >
1316
- ) -> Result < Invoice , SemanticError >
1316
+ network : Currency , keys_manager : K
1317
+ ) -> Result < Invoice , SignOrCreationError < DecodeError > >
1317
1318
where
1318
1319
M :: Target : chain:: Watch < Signer > ,
1319
1320
T :: Target : BroadcasterInterface ,
@@ -1367,7 +1368,10 @@ pub mod utils {
1367
1368
invoice = invoice. route ( hint) ;
1368
1369
}
1369
1370
1370
- let raw_invoice = invoice. build_raw ( ) . unwrap ( ) ;
1371
+ let raw_invoice = match invoice. build_raw ( ) {
1372
+ Ok ( inv) => inv,
1373
+ Err ( e) => return Err ( SignOrCreationError :: CreationError ( e) )
1374
+ } ;
1371
1375
let hrp_str = raw_invoice. hrp . to_string ( ) ;
1372
1376
let hrp_bytes = hrp_str. as_bytes ( ) ;
1373
1377
let data_without_signature = raw_invoice. data . to_base32 ( ) ;
@@ -1387,12 +1391,11 @@ pub mod utils {
1387
1391
1388
1392
invoice_preimage. extend_from_slice ( & Vec :: < u8 > :: from_base32 ( & data_part)
1389
1393
. expect ( "No padding error may occur due to appended zero above." ) ) ;
1390
- let signature = match keys_manager. sign_invoice ( invoice_preimage) {
1391
- Ok ( sig) => sig,
1392
- Err ( _) => return Err ( SemanticError :: InvalidSignature )
1394
+ let signed_raw_invoice: Result < SignedRawInvoice , DecodeError > = raw_invoice. sign ( |_| keys_manager. sign_invoice ( invoice_preimage) ) ;
1395
+ match signed_raw_invoice {
1396
+ Ok ( inv) => return Ok ( Invoice :: from_signed ( inv) . unwrap ( ) ) ,
1397
+ Err ( e) => return Err ( SignOrCreationError :: SignError ( e) )
1393
1398
} ;
1394
- let signed_raw_invoice: Result < SignedRawInvoice , SemanticError > = raw_invoice. sign ( |_| Ok ( signature) ) ;
1395
- Invoice :: from_signed ( signed_raw_invoice. unwrap ( ) )
1396
1399
}
1397
1400
1398
1401
}
0 commit comments