@@ -90,9 +90,10 @@ func (m *Manager) Run(ctx context.Context) error {
9090 }
9191}
9292
93- // NewAddress starts a new address creation flow.
93+ // NewAddress creates a new static address with the server or returns an
94+ // existing one.
9495func (m * Manager ) NewAddress (ctx context.Context ) (* btcutil.AddressTaproot ,
95- error ) {
96+ int64 , error ) {
9697
9798 // If there's already a static address in the database, we can return
9899 // it.
@@ -101,31 +102,38 @@ func (m *Manager) NewAddress(ctx context.Context) (*btcutil.AddressTaproot,
101102 if err != nil {
102103 m .Unlock ()
103104
104- return nil , err
105+ return nil , 0 , err
105106 }
106107 if len (addresses ) > 0 {
107108 clientPubKey := addresses [0 ].ClientPubkey
108109 serverPubKey := addresses [0 ].ServerPubkey
109110 expiry := int64 (addresses [0 ].Expiry )
110111
111- m .Unlock ()
112+ defer m .Unlock ()
113+
114+ address , err := m .GetTaprootAddress (
115+ clientPubKey , serverPubKey , expiry ,
116+ )
117+ if err != nil {
118+ return nil , 0 , err
119+ }
112120
113- return m . GetTaprootAddress ( clientPubKey , serverPubKey , expiry )
121+ return address , expiry , nil
114122 }
115123 m .Unlock ()
116124
117125 // We are fetching a new L402 token from the server. There is one static
118126 // address per L402 token allowed.
119127 err = m .cfg .FetchL402 (ctx )
120128 if err != nil {
121- return nil , err
129+ return nil , 0 , err
122130 }
123131
124132 clientPubKey , err := m .cfg .WalletKit .DeriveNextKey (
125133 ctx , swap .StaticAddressKeyFamily ,
126134 )
127135 if err != nil {
128- return nil , err
136+ return nil , 0 , err
129137 }
130138
131139 // Send our clientPubKey to the server and wait for the server to
@@ -138,27 +146,27 @@ func (m *Manager) NewAddress(ctx context.Context) (*btcutil.AddressTaproot,
138146 },
139147 )
140148 if err != nil {
141- return nil , err
149+ return nil , 0 , err
142150 }
143151
144152 serverParams := resp .GetParams ()
145153
146154 serverPubKey , err := btcec .ParsePubKey (serverParams .ServerKey )
147155 if err != nil {
148- return nil , err
156+ return nil , 0 , err
149157 }
150158
151159 staticAddress , err := script .NewStaticAddress (
152160 input .MuSig2Version100RC2 , int64 (serverParams .Expiry ),
153161 clientPubKey .PubKey , serverPubKey ,
154162 )
155163 if err != nil {
156- return nil , err
164+ return nil , 0 , err
157165 }
158166
159167 pkScript , err := staticAddress .StaticAddressScript ()
160168 if err != nil {
161- return nil , err
169+ return nil , 0 , err
162170 }
163171
164172 // Create the static address from the parameters the server provided and
@@ -179,7 +187,7 @@ func (m *Manager) NewAddress(ctx context.Context) (*btcutil.AddressTaproot,
179187 }
180188 err = m .cfg .Store .CreateStaticAddress (ctx , addrParams )
181189 if err != nil {
182- return nil , err
190+ return nil , 0 , err
183191 }
184192
185193 // Import the static address tapscript into our lnd wallet, so we can
@@ -189,15 +197,20 @@ func (m *Manager) NewAddress(ctx context.Context) (*btcutil.AddressTaproot,
189197 )
190198 addr , err := m .cfg .WalletKit .ImportTaprootScript (ctx , tapScript )
191199 if err != nil {
192- return nil , err
200+ return nil , 0 , err
193201 }
194202
195203 log .Infof ("Imported static address taproot script to lnd wallet: %v" ,
196204 addr )
197205
198- return m .GetTaprootAddress (
206+ address , err := m .GetTaprootAddress (
199207 clientPubKey .PubKey , serverPubKey , int64 (serverParams .Expiry ),
200208 )
209+ if err != nil {
210+ return nil , 0 , err
211+ }
212+
213+ return address , int64 (serverParams .Expiry ), nil
201214}
202215
203216// GetTaprootAddress returns a taproot address for the given client and server
0 commit comments