@@ -21,7 +21,8 @@ use bitcoin_payment_instructions::amount::Amount;
2121use breez_sdk_spark:: {
2222 BreezSdk , EventListener , GetInfoRequest , ListPaymentsRequest , PaymentDetails , PaymentStatus ,
2323 PaymentType , PrepareSendPaymentRequest , ReceivePaymentMethod , ReceivePaymentRequest ,
24- SdkBuilder , SdkError , SdkEvent , SendPaymentMethod , SendPaymentRequest ,
24+ RegisterLightningAddressRequest , SdkBuilder , SdkError , SdkEvent , SendPaymentMethod ,
25+ 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 } )
8188 }
@@ -245,6 +252,34 @@ impl TrustedWalletInterface for Spark {
245252 } )
246253 }
247254
255+ fn get_lightning_address (
256+ & self ,
257+ ) -> Pin < Box < dyn Future < Output = Result < Option < String > , TrustedError > > + Send + ' _ > > {
258+ Box :: pin ( async move {
259+ match self . spark_wallet . get_lightning_address ( ) . await ? {
260+ None => Ok ( None ) ,
261+ Some ( addr) => Ok ( Some ( addr. lightning_address ) ) ,
262+ }
263+ } )
264+ }
265+
266+ fn register_lightning_address (
267+ & self , name : String ,
268+ ) -> Pin < Box < dyn Future < Output = Result < ( ) , TrustedError > > + Send + ' _ > > {
269+ Box :: pin ( async move {
270+ let res = self . get_lightning_address ( ) . await ?;
271+ if res. is_some ( ) {
272+ return Err ( TrustedError :: Other (
273+ "Wallet already has a lightning address" . to_string ( ) ,
274+ ) ) ;
275+ }
276+
277+ let params = RegisterLightningAddressRequest { username : name, description : None } ;
278+ self . spark_wallet . register_lightning_address ( params) . await ?;
279+ Ok ( ( ) )
280+ } )
281+ }
282+
248283 fn stop ( & self ) -> Pin < Box < dyn Future < Output = ( ) > + Send + ' _ > > {
249284 Box :: pin ( async move {
250285 log_info ! ( self . logger, "Stopping Spark wallet" ) ;
@@ -260,7 +295,8 @@ impl Spark {
260295 event_queue : Arc < EventQueue > , tx_metadata : TxMetadataStore , logger : Arc < Logger > ,
261296 runtime : Arc < Runtime > ,
262297 ) -> Result < Self , InitFailure > {
263- let spark_config: breez_sdk_spark:: Config = spark_config. to_breez_config ( config. network ) ?;
298+ let spark_config: breez_sdk_spark:: Config =
299+ spark_config. into_breez_config ( config. network ) ?;
264300
265301 let seed = match & config. seed {
266302 Seed :: Seed64 ( bytes) => breez_sdk_spark:: Seed :: Entropy ( bytes. to_vec ( ) ) ,
0 commit comments