@@ -21,7 +21,8 @@ use bitcoin_payment_instructions::amount::Amount;
2121use breez_sdk_spark:: {
2222 BreezSdk , EventListener , GetInfoRequest , ListPaymentsRequest , OptimizationConfig ,
2323 PaymentDetails , PaymentStatus , PaymentType , PrepareSendPaymentRequest , ReceivePaymentMethod ,
24- ReceivePaymentRequest , SdkBuilder , SdkError , SdkEvent , SendPaymentMethod , SendPaymentRequest ,
24+ ReceivePaymentRequest , RegisterLightningAddressRequest , SdkBuilder , SdkError , SdkEvent ,
25+ SendPaymentMethod , SendPaymentRequest ,
2526} ;
2627
2728use graduated_rebalancer:: ReceivedLightningPayment ;
@@ -37,7 +38,7 @@ use std::time::Duration;
3738use uuid:: Uuid ;
3839
3940/// Configuration options for the Spark wallet.
40- #[ derive( Debug , Copy , Clone ) ]
41+ #[ derive( Debug , Clone ) ]
4142pub struct SparkWalletConfig {
4243 /// How often to sync the wallet with the blockchain, in seconds.
4344 /// Default is 60 seconds.
@@ -46,11 +47,17 @@ pub struct SparkWalletConfig {
4647 /// lightning when sending and receiving. This has the benefit of lower fees
4748 /// but is at the cost of privacy.
4849 pub prefer_spark_over_lightning : bool ,
50+ /// The domain used for receiving through lnurl-pay and lightning address.
51+ pub lnurl_domain : Option < String > ,
4952}
5053
5154impl Default for SparkWalletConfig {
5255 fn default ( ) -> Self {
53- SparkWalletConfig { sync_interval_secs : 60 , prefer_spark_over_lightning : false }
56+ SparkWalletConfig {
57+ sync_interval_secs : 60 ,
58+ prefer_spark_over_lightning : false ,
59+ lnurl_domain : Some ( "breez.tips" . to_string ( ) ) ,
60+ }
5461 }
5562}
5663
@@ -59,7 +66,7 @@ impl Default for SparkWalletConfig {
5966const BREEZ_API_KEY : & str = "MIIBajCCARygAwIBAgIHPnfOjAhBgzAFBgMrZXAwEDEOMAwGA1UEAxMFQnJlZXowHhcNMjUwOTE5MjEzNTU1WhcNMzUwOTE3MjEzNTU1WjAqMRMwEQYDVQQKEwpvcmFuZ2Utc2RrMRMwEQYDVQQDEwpvcmFuZ2Utc2RrMCowBQYDK2VwAyEA0IP1y98gPByiIMoph1P0G6cctLb864rNXw1LRLOpXXejezB5MA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTaOaPuXmtLDTJVv++VYBiQr9gHCTAfBgNVHSMEGDAWgBTeqtaSVvON53SSFvxMtiCyayiYazAZBgNVHREEEjAQgQ5iZW5Ac3BpcmFsLnh5ejAFBgMrZXADQQCry+1LkA3nrYa1sovS5iFI1Tkpmr/R0nM/4gJtsO93vFOkm3vBEGwjKAV7lrGzFcFbbuyM1wEJPi4Po1XCEG0D" ;
6067
6168impl SparkWalletConfig {
62- fn to_breez_config ( self , network : Network ) -> Result < breez_sdk_spark:: Config , TrustedError > {
69+ fn into_breez_config ( self , network : Network ) -> Result < breez_sdk_spark:: Config , TrustedError > {
6370 let network = match network {
6471 Network :: Bitcoin => breez_sdk_spark:: Network :: Mainnet ,
6572 Network :: Regtest => breez_sdk_spark:: Network :: Regtest ,
@@ -75,7 +82,7 @@ impl SparkWalletConfig {
7582 real_time_sync_server_url : None ,
7683 api_key : Some ( BREEZ_API_KEY . to_string ( ) ) ,
7784 max_deposit_claim_fee : None ,
78- lnurl_domain : None ,
85+ lnurl_domain : self . lnurl_domain ,
7986 private_enabled_default : true ,
8087 optimization_config : OptimizationConfig { auto_enabled : true , multiplicity : 1 } ,
8188 } )
@@ -253,6 +260,34 @@ impl TrustedWalletInterface for Spark {
253260 } )
254261 }
255262
263+ fn get_lightning_address (
264+ & self ,
265+ ) -> Pin < Box < dyn Future < Output = Result < Option < String > , TrustedError > > + Send + ' _ > > {
266+ Box :: pin ( async move {
267+ match self . spark_wallet . get_lightning_address ( ) . await ? {
268+ None => Ok ( None ) ,
269+ Some ( addr) => Ok ( Some ( addr. lightning_address ) ) ,
270+ }
271+ } )
272+ }
273+
274+ fn register_lightning_address (
275+ & self , name : String ,
276+ ) -> Pin < Box < dyn Future < Output = Result < ( ) , TrustedError > > + Send + ' _ > > {
277+ Box :: pin ( async move {
278+ let res = self . get_lightning_address ( ) . await ?;
279+ if res. is_some ( ) {
280+ return Err ( TrustedError :: Other (
281+ "Wallet already has a lightning address" . to_string ( ) ,
282+ ) ) ;
283+ }
284+
285+ let params = RegisterLightningAddressRequest { username : name, description : None } ;
286+ self . spark_wallet . register_lightning_address ( params) . await ?;
287+ Ok ( ( ) )
288+ } )
289+ }
290+
256291 fn stop ( & self ) -> Pin < Box < dyn Future < Output = ( ) > + Send + ' _ > > {
257292 Box :: pin ( async move {
258293 log_info ! ( self . logger, "Stopping Spark wallet" ) ;
@@ -268,7 +303,8 @@ impl Spark {
268303 event_queue : Arc < EventQueue > , tx_metadata : TxMetadataStore , logger : Arc < Logger > ,
269304 runtime : Arc < Runtime > ,
270305 ) -> Result < Self , InitFailure > {
271- let spark_config: breez_sdk_spark:: Config = spark_config. to_breez_config ( config. network ) ?;
306+ let spark_config: breez_sdk_spark:: Config =
307+ spark_config. into_breez_config ( config. network ) ?;
272308
273309 let seed = match & config. seed {
274310 Seed :: Seed64 ( bytes) => breez_sdk_spark:: Seed :: Entropy ( bytes. to_vec ( ) ) ,
0 commit comments