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

lightningnetwork / lnd / 13982721865

21 Mar 2025 01:30AM UTC coverage: 58.587% (-0.5%) from 59.126%
13982721865

Pull #9623

github

web-flow
Merge 05a6b6838 into 5d921723b
Pull Request #9623: Size msg test msg

0 of 1572 new or added lines in 43 files covered. (0.0%)

17 existing lines in 5 files now uncovered.

96767 of 165169 relevant lines covered (58.59%)

1.82 hits per line

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

62.07
/lnwire/revoke_and_ack.go
1
package lnwire
2

3
import (
4
        "bytes"
5
        "io"
6

7
        "github.com/btcsuite/btcd/btcec/v2"
8
        "github.com/lightningnetwork/lnd/tlv"
9
)
10

11
// RevokeAndAck is sent by either side once a CommitSig message has been
12
// received, and validated. This message serves to revoke the prior commitment
13
// transaction, which was the most up to date version until a CommitSig message
14
// referencing the specified ChannelPoint was received.  Additionally, this
15
// message also piggyback's the next revocation hash that Alice should use when
16
// constructing the Bob's version of the next commitment transaction (which
17
// would be done before sending a CommitSig message).  This piggybacking allows
18
// Alice to send the next CommitSig message modifying Bob's commitment
19
// transaction without first asking for a revocation hash initially.
20
type RevokeAndAck struct {
21
        // ChanID uniquely identifies to which currently active channel this
22
        // RevokeAndAck applies to.
23
        ChanID ChannelID
24

25
        // Revocation is the preimage to the revocation hash of the now prior
26
        // commitment transaction.
27
        Revocation [32]byte
28

29
        // NextRevocationKey is the next commitment point which should be used
30
        // for the next commitment transaction the remote peer creates for us.
31
        // This, in conjunction with revocation base point will be used to
32
        // create the proper revocation key used within the commitment
33
        // transaction.
34
        NextRevocationKey *btcec.PublicKey
35

36
        // LocalNonce is the next _local_ nonce for the sending party. This
37
        // allows the receiving party to propose a new commitment using their
38
        // remote nonce and the sender's local nonce.
39
        LocalNonce OptMusig2NonceTLV
40

41
        // ExtraData is the set of data that was appended to this message to
42
        // fill out the full maximum transport message size. These fields can
43
        // be used to specify optional data such as custom TLV fields.
44
        ExtraData ExtraOpaqueData
45
}
46

47
// NewRevokeAndAck creates a new RevokeAndAck message.
48
func NewRevokeAndAck() *RevokeAndAck {
×
49
        return &RevokeAndAck{
×
50
                ExtraData: make([]byte, 0),
×
51
        }
×
52
}
×
53

54
// A compile time check to ensure RevokeAndAck implements the lnwire.Message
55
// interface.
56
var _ Message = (*RevokeAndAck)(nil)
57

58
// A compile time check to ensure RevokeAndAck implements the
59
// lnwire.SizeableMessage interface.
60
var _ SizeableMessage = (*RevokeAndAck)(nil)
61

62
// Decode deserializes a serialized RevokeAndAck message stored in the
63
// passed io.Reader observing the specified protocol version.
64
//
65
// This is part of the lnwire.Message interface.
66
func (c *RevokeAndAck) Decode(r io.Reader, pver uint32) error {
3✔
67
        err := ReadElements(r,
3✔
68
                &c.ChanID,
3✔
69
                c.Revocation[:],
3✔
70
                &c.NextRevocationKey,
3✔
71
        )
3✔
72
        if err != nil {
3✔
73
                return err
×
74
        }
×
75

76
        var tlvRecords ExtraOpaqueData
3✔
77
        if err := ReadElements(r, &tlvRecords); err != nil {
3✔
78
                return err
×
79
        }
×
80

81
        localNonce := c.LocalNonce.Zero()
3✔
82
        typeMap, err := tlvRecords.ExtractRecords(&localNonce)
3✔
83
        if err != nil {
3✔
84
                return err
×
85
        }
×
86

87
        // Set the corresponding TLV types if they were included in the stream.
88
        if val, ok := typeMap[c.LocalNonce.TlvType()]; ok && val == nil {
6✔
89
                c.LocalNonce = tlv.SomeRecordT(localNonce)
3✔
90
        }
3✔
91

92
        if len(tlvRecords) != 0 {
6✔
93
                c.ExtraData = tlvRecords
3✔
94
        }
3✔
95

96
        return nil
3✔
97
}
98

99
// Encode serializes the target RevokeAndAck into the passed io.Writer
100
// observing the protocol version specified.
101
//
102
// This is part of the lnwire.Message interface.
103
func (c *RevokeAndAck) Encode(w *bytes.Buffer, pver uint32) error {
3✔
104
        recordProducers := make([]tlv.RecordProducer, 0, 1)
3✔
105
        c.LocalNonce.WhenSome(func(localNonce Musig2NonceTLV) {
6✔
106
                recordProducers = append(recordProducers, &localNonce)
3✔
107
        })
3✔
108
        err := EncodeMessageExtraData(&c.ExtraData, recordProducers...)
3✔
109
        if err != nil {
3✔
110
                return err
×
111
        }
×
112

113
        if err := WriteChannelID(w, c.ChanID); err != nil {
3✔
114
                return err
×
115
        }
×
116

117
        if err := WriteBytes(w, c.Revocation[:]); err != nil {
3✔
118
                return err
×
119
        }
×
120

121
        if err := WritePublicKey(w, c.NextRevocationKey); err != nil {
3✔
122
                return err
×
123
        }
×
124

125
        return WriteBytes(w, c.ExtraData)
3✔
126
}
127

128
// MsgType returns the integer uniquely identifying this message type on the
129
// wire.
130
//
131
// This is part of the lnwire.Message interface.
132
func (c *RevokeAndAck) MsgType() MessageType {
3✔
133
        return MsgRevokeAndAck
3✔
134
}
3✔
135

136
// TargetChanID returns the channel id of the link for which this message is
137
// intended.
138
//
139
// NOTE: Part of peer.LinkUpdater interface.
140
func (c *RevokeAndAck) TargetChanID() ChannelID {
3✔
141
        return c.ChanID
3✔
142
}
3✔
143

144
// SerializedSize returns the serialized size of the message in bytes.
145
//
146
// This is part of the lnwire.SizeableMessage interface.
NEW
147
func (c *RevokeAndAck) SerializedSize() (uint32, error) {
×
NEW
148
        return MessageSerializedSize(c)
×
NEW
149
}
×
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