• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

lightningnetwork / lnd / 13035292482

29 Jan 2025 03:59PM UTC coverage: 49.3% (-9.5%) from 58.777%
13035292482

Pull #9456

github

mohamedawnallah
docs: update release-notes-0.19.0.md

In this commit, we warn users about the removal
of RPCs `SendToRoute`, `SendToRouteSync`, `SendPayment`,
and `SendPaymentSync` in the next release 0.20.
Pull Request #9456: lnrpc+docs: deprecate warning `SendToRoute`, `SendToRouteSync`, `SendPayment`, and `SendPaymentSync` in Release 0.19

100634 of 204126 relevant lines covered (49.3%)

1.54 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/channeldb/migration_01_to_11/codec.go
1
package migration_01_to_11
2

3
import (
4
        "encoding/binary"
5
        "fmt"
6
        "io"
7
        "net"
8

9
        "github.com/btcsuite/btcd/btcec/v2"
10
        "github.com/btcsuite/btcd/btcutil"
11
        "github.com/btcsuite/btcd/chaincfg/chainhash"
12
        "github.com/btcsuite/btcd/wire"
13
        lnwire "github.com/lightningnetwork/lnd/channeldb/migration/lnwire21"
14
        "github.com/lightningnetwork/lnd/keychain"
15
        "github.com/lightningnetwork/lnd/shachain"
16
)
17

18
// WriteOutpoint writes an outpoint to the passed writer using the minimal
19
// amount of bytes possible.
20
func WriteOutpoint(w io.Writer, o *wire.OutPoint) error {
×
21
        if _, err := w.Write(o.Hash[:]); err != nil {
×
22
                return err
×
23
        }
×
24
        if err := binary.Write(w, byteOrder, o.Index); err != nil {
×
25
                return err
×
26
        }
×
27

28
        return nil
×
29
}
30

31
// ReadOutpoint reads an outpoint from the passed reader that was previously
32
// written using the writeOutpoint struct.
33
func ReadOutpoint(r io.Reader, o *wire.OutPoint) error {
×
34
        if _, err := io.ReadFull(r, o.Hash[:]); err != nil {
×
35
                return err
×
36
        }
×
37
        if err := binary.Read(r, byteOrder, &o.Index); err != nil {
×
38
                return err
×
39
        }
×
40

41
        return nil
×
42
}
43

44
// UnknownElementType is an error returned when the codec is unable to encode or
45
// decode a particular type.
46
type UnknownElementType struct {
47
        method  string
48
        element interface{}
49
}
50

51
// Error returns the name of the method that encountered the error, as well as
52
// the type that was unsupported.
53
func (e UnknownElementType) Error() string {
×
54
        return fmt.Sprintf("Unknown type in %s: %T", e.method, e.element)
×
55
}
×
56

57
// WriteElement is a one-stop shop to write the big endian representation of
58
// any element which is to be serialized for storage on disk. The passed
59
// io.Writer should be backed by an appropriately sized byte slice, or be able
60
// to dynamically expand to accommodate additional data.
61
func WriteElement(w io.Writer, element interface{}) error {
×
62
        switch e := element.(type) {
×
63
        case keychain.KeyDescriptor:
×
64
                if err := binary.Write(w, byteOrder, e.Family); err != nil {
×
65
                        return err
×
66
                }
×
67
                if err := binary.Write(w, byteOrder, e.Index); err != nil {
×
68
                        return err
×
69
                }
×
70

71
                if e.PubKey != nil {
×
72
                        if err := binary.Write(w, byteOrder, true); err != nil {
×
73
                                return fmt.Errorf("error writing serialized element: %w", err)
×
74
                        }
×
75

76
                        return WriteElement(w, e.PubKey)
×
77
                }
78

79
                return binary.Write(w, byteOrder, false)
×
80
        case ChannelType:
×
81
                if err := binary.Write(w, byteOrder, e); err != nil {
×
82
                        return err
×
83
                }
×
84

85
        case chainhash.Hash:
×
86
                if _, err := w.Write(e[:]); err != nil {
×
87
                        return err
×
88
                }
×
89

90
        case wire.OutPoint:
×
91
                return WriteOutpoint(w, &e)
×
92

93
        case lnwire.ShortChannelID:
×
94
                if err := binary.Write(w, byteOrder, e.ToUint64()); err != nil {
×
95
                        return err
×
96
                }
×
97

98
        case lnwire.ChannelID:
×
99
                if _, err := w.Write(e[:]); err != nil {
×
100
                        return err
×
101
                }
×
102

103
        case int64, uint64:
×
104
                if err := binary.Write(w, byteOrder, e); err != nil {
×
105
                        return err
×
106
                }
×
107

108
        case uint32:
×
109
                if err := binary.Write(w, byteOrder, e); err != nil {
×
110
                        return err
×
111
                }
×
112

113
        case int32:
×
114
                if err := binary.Write(w, byteOrder, e); err != nil {
×
115
                        return err
×
116
                }
×
117

118
        case uint16:
×
119
                if err := binary.Write(w, byteOrder, e); err != nil {
×
120
                        return err
×
121
                }
×
122

123
        case uint8:
×
124
                if err := binary.Write(w, byteOrder, e); err != nil {
×
125
                        return err
×
126
                }
×
127

128
        case bool:
×
129
                if err := binary.Write(w, byteOrder, e); err != nil {
×
130
                        return err
×
131
                }
×
132

133
        case btcutil.Amount:
×
134
                if err := binary.Write(w, byteOrder, uint64(e)); err != nil {
×
135
                        return err
×
136
                }
×
137

138
        case lnwire.MilliSatoshi:
×
139
                if err := binary.Write(w, byteOrder, uint64(e)); err != nil {
×
140
                        return err
×
141
                }
×
142

143
        case *btcec.PrivateKey:
×
144
                b := e.Serialize()
×
145
                if _, err := w.Write(b); err != nil {
×
146
                        return err
×
147
                }
×
148

149
        case *btcec.PublicKey:
×
150
                b := e.SerializeCompressed()
×
151
                if _, err := w.Write(b); err != nil {
×
152
                        return err
×
153
                }
×
154

155
        case shachain.Producer:
×
156
                return e.Encode(w)
×
157

158
        case shachain.Store:
×
159
                return e.Encode(w)
×
160

161
        case *wire.MsgTx:
×
162
                return e.Serialize(w)
×
163

164
        case [32]byte:
×
165
                if _, err := w.Write(e[:]); err != nil {
×
166
                        return err
×
167
                }
×
168

169
        case []byte:
×
170
                if err := wire.WriteVarBytes(w, 0, e); err != nil {
×
171
                        return err
×
172
                }
×
173

174
        case lnwire.Message:
×
175
                if _, err := lnwire.WriteMessage(w, e, 0); err != nil {
×
176
                        return err
×
177
                }
×
178

179
        case ChannelStatus:
×
180
                if err := binary.Write(w, byteOrder, e); err != nil {
×
181
                        return err
×
182
                }
×
183

184
        case ClosureType:
×
185
                if err := binary.Write(w, byteOrder, e); err != nil {
×
186
                        return err
×
187
                }
×
188

189
        case lnwire.FundingFlag:
×
190
                if err := binary.Write(w, byteOrder, e); err != nil {
×
191
                        return err
×
192
                }
×
193

194
        case net.Addr:
×
195
                if err := serializeAddr(w, e); err != nil {
×
196
                        return err
×
197
                }
×
198

199
        case []net.Addr:
×
200
                if err := WriteElement(w, uint32(len(e))); err != nil {
×
201
                        return err
×
202
                }
×
203

204
                for _, addr := range e {
×
205
                        if err := serializeAddr(w, addr); err != nil {
×
206
                                return err
×
207
                        }
×
208
                }
209

210
        default:
×
211
                return UnknownElementType{"WriteElement", e}
×
212
        }
213

214
        return nil
×
215
}
216

217
// WriteElements is writes each element in the elements slice to the passed
218
// io.Writer using WriteElement.
219
func WriteElements(w io.Writer, elements ...interface{}) error {
×
220
        for _, element := range elements {
×
221
                err := WriteElement(w, element)
×
222
                if err != nil {
×
223
                        return err
×
224
                }
×
225
        }
226
        return nil
×
227
}
228

229
// ReadElement is a one-stop utility function to deserialize any datastructure
230
// encoded using the serialization format of the database.
231
func ReadElement(r io.Reader, element interface{}) error {
×
232
        switch e := element.(type) {
×
233
        case *keychain.KeyDescriptor:
×
234
                if err := binary.Read(r, byteOrder, &e.Family); err != nil {
×
235
                        return err
×
236
                }
×
237
                if err := binary.Read(r, byteOrder, &e.Index); err != nil {
×
238
                        return err
×
239
                }
×
240

241
                var hasPubKey bool
×
242
                if err := binary.Read(r, byteOrder, &hasPubKey); err != nil {
×
243
                        return err
×
244
                }
×
245

246
                if hasPubKey {
×
247
                        return ReadElement(r, &e.PubKey)
×
248
                }
×
249

250
        case *ChannelType:
×
251
                if err := binary.Read(r, byteOrder, e); err != nil {
×
252
                        return err
×
253
                }
×
254

255
        case *chainhash.Hash:
×
256
                if _, err := io.ReadFull(r, e[:]); err != nil {
×
257
                        return err
×
258
                }
×
259

260
        case *wire.OutPoint:
×
261
                return ReadOutpoint(r, e)
×
262

263
        case *lnwire.ShortChannelID:
×
264
                var a uint64
×
265
                if err := binary.Read(r, byteOrder, &a); err != nil {
×
266
                        return err
×
267
                }
×
268
                *e = lnwire.NewShortChanIDFromInt(a)
×
269

270
        case *lnwire.ChannelID:
×
271
                if _, err := io.ReadFull(r, e[:]); err != nil {
×
272
                        return err
×
273
                }
×
274

275
        case *int64, *uint64:
×
276
                if err := binary.Read(r, byteOrder, e); err != nil {
×
277
                        return err
×
278
                }
×
279

280
        case *uint32:
×
281
                if err := binary.Read(r, byteOrder, e); err != nil {
×
282
                        return err
×
283
                }
×
284

285
        case *int32:
×
286
                if err := binary.Read(r, byteOrder, e); err != nil {
×
287
                        return err
×
288
                }
×
289

290
        case *uint16:
×
291
                if err := binary.Read(r, byteOrder, e); err != nil {
×
292
                        return err
×
293
                }
×
294

295
        case *uint8:
×
296
                if err := binary.Read(r, byteOrder, e); err != nil {
×
297
                        return err
×
298
                }
×
299

300
        case *bool:
×
301
                if err := binary.Read(r, byteOrder, e); err != nil {
×
302
                        return err
×
303
                }
×
304

305
        case *btcutil.Amount:
×
306
                var a uint64
×
307
                if err := binary.Read(r, byteOrder, &a); err != nil {
×
308
                        return err
×
309
                }
×
310

311
                *e = btcutil.Amount(a)
×
312

313
        case *lnwire.MilliSatoshi:
×
314
                var a uint64
×
315
                if err := binary.Read(r, byteOrder, &a); err != nil {
×
316
                        return err
×
317
                }
×
318

319
                *e = lnwire.MilliSatoshi(a)
×
320

321
        case **btcec.PrivateKey:
×
322
                var b [btcec.PrivKeyBytesLen]byte
×
323
                if _, err := io.ReadFull(r, b[:]); err != nil {
×
324
                        return err
×
325
                }
×
326

327
                priv, _ := btcec.PrivKeyFromBytes(b[:])
×
328
                *e = priv
×
329

330
        case **btcec.PublicKey:
×
331
                var b [btcec.PubKeyBytesLenCompressed]byte
×
332
                if _, err := io.ReadFull(r, b[:]); err != nil {
×
333
                        return err
×
334
                }
×
335

336
                pubKey, err := btcec.ParsePubKey(b[:])
×
337
                if err != nil {
×
338
                        return err
×
339
                }
×
340
                *e = pubKey
×
341

342
        case *shachain.Producer:
×
343
                var root [32]byte
×
344
                if _, err := io.ReadFull(r, root[:]); err != nil {
×
345
                        return err
×
346
                }
×
347

348
                // TODO(roasbeef): remove
349
                producer, err := shachain.NewRevocationProducerFromBytes(root[:])
×
350
                if err != nil {
×
351
                        return err
×
352
                }
×
353

354
                *e = producer
×
355

356
        case *shachain.Store:
×
357
                store, err := shachain.NewRevocationStoreFromBytes(r)
×
358
                if err != nil {
×
359
                        return err
×
360
                }
×
361

362
                *e = store
×
363

364
        case **wire.MsgTx:
×
365
                tx := wire.NewMsgTx(2)
×
366
                if err := tx.Deserialize(r); err != nil {
×
367
                        return err
×
368
                }
×
369

370
                *e = tx
×
371

372
        case *[32]byte:
×
373
                if _, err := io.ReadFull(r, e[:]); err != nil {
×
374
                        return err
×
375
                }
×
376

377
        case *[]byte:
×
378
                bytes, err := wire.ReadVarBytes(r, 0, 66000, "[]byte")
×
379
                if err != nil {
×
380
                        return err
×
381
                }
×
382

383
                *e = bytes
×
384

385
        case *lnwire.Message:
×
386
                msg, err := lnwire.ReadMessage(r, 0)
×
387
                if err != nil {
×
388
                        return err
×
389
                }
×
390

391
                *e = msg
×
392

393
        case *ChannelStatus:
×
394
                if err := binary.Read(r, byteOrder, e); err != nil {
×
395
                        return err
×
396
                }
×
397

398
        case *ClosureType:
×
399
                if err := binary.Read(r, byteOrder, e); err != nil {
×
400
                        return err
×
401
                }
×
402

403
        case *lnwire.FundingFlag:
×
404
                if err := binary.Read(r, byteOrder, e); err != nil {
×
405
                        return err
×
406
                }
×
407

408
        case *net.Addr:
×
409
                addr, err := deserializeAddr(r)
×
410
                if err != nil {
×
411
                        return err
×
412
                }
×
413
                *e = addr
×
414

415
        case *[]net.Addr:
×
416
                var numAddrs uint32
×
417
                if err := ReadElement(r, &numAddrs); err != nil {
×
418
                        return err
×
419
                }
×
420

421
                *e = make([]net.Addr, numAddrs)
×
422
                for i := uint32(0); i < numAddrs; i++ {
×
423
                        addr, err := deserializeAddr(r)
×
424
                        if err != nil {
×
425
                                return err
×
426
                        }
×
427
                        (*e)[i] = addr
×
428
                }
429

430
        default:
×
431
                return UnknownElementType{"ReadElement", e}
×
432
        }
433

434
        return nil
×
435
}
436

437
// ReadElements deserializes a variable number of elements into the passed
438
// io.Reader, with each element being deserialized according to the ReadElement
439
// function.
440
func ReadElements(r io.Reader, elements ...interface{}) error {
×
441
        for _, element := range elements {
×
442
                err := ReadElement(r, element)
×
443
                if err != nil {
×
444
                        return err
×
445
                }
×
446
        }
447
        return nil
×
448
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc