Skip to content

Commit cf0651a

Browse files
committed
staticaddr: add expiry to NewAddress response
1 parent 38d7401 commit cf0651a

File tree

5 files changed

+34
-23
lines changed

5 files changed

+34
-23
lines changed

cmd/loop/staticaddr.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,7 @@ func newStaticAddress(ctx *cli.Context) error {
7575
return err
7676
}
7777

78-
fmt.Printf("Received a new static loop-in address from the server: "+
79-
"%s\n", resp.Address)
78+
printRespJSON(resp)
8079

8180
return nil
8281
}

loopd/swapclient_server.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1505,13 +1505,14 @@ func (s *swapClientServer) NewStaticAddress(ctx context.Context,
15051505
_ *looprpc.NewStaticAddressRequest) (
15061506
*looprpc.NewStaticAddressResponse, error) {
15071507

1508-
staticAddress, err := s.staticAddressManager.NewAddress(ctx)
1508+
staticAddress, expiry, err := s.staticAddressManager.NewAddress(ctx)
15091509
if err != nil {
15101510
return nil, err
15111511
}
15121512

15131513
return &looprpc.NewStaticAddressResponse{
15141514
Address: staticAddress.String(),
1515+
Expiry: uint32(expiry),
15151516
}, nil
15161517
}
15171518

staticaddr/address/interface.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,12 @@ package address
22

33
import (
44
"context"
5-
"fmt"
65

76
"github.com/btcsuite/btcd/btcec/v2"
87
"github.com/lightninglabs/loop/staticaddr/version"
98
"github.com/lightningnetwork/lnd/keychain"
109
)
1110

12-
var (
13-
ErrAddressAlreadyExists = fmt.Errorf("address already exists")
14-
)
15-
1611
// Store is the database interface that is used to store and retrieve
1712
// static addresses.
1813
type Store interface {

staticaddr/address/manager.go

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
9495
func (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

staticaddr/address/manager_test.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,14 @@ func TestManager(t *testing.T) {
105105
require.NoError(t, err)
106106

107107
// Create a new static address.
108-
taprootAddress, err := testContext.manager.NewAddress(ctxb)
108+
taprootAddress, expiry, err := testContext.manager.NewAddress(ctxb)
109109
require.NoError(t, err)
110110

111111
// The addresses have to match.
112112
require.Equal(t, expectedAddress.String(), taprootAddress.String())
113+
114+
// The expiry has to match.
115+
require.EqualValues(t, defaultExpiry, expiry)
113116
}
114117

115118
// GenerateExpectedTaprootAddress generates the expected taproot address that

0 commit comments

Comments
 (0)