htlcswitch: check for signature owed in link
Previously the channel method FullySynced was used to decide whether to send a new commit sig message. However, it could happen that FullySynced was false, but that we didn't owe a commitment signature. Instead we were waiting on the other party to send us a signature. If that happened, we'd send out an empty commit sig. This commit modifies the condition that triggers a new commit sig and fixes this deviation from the spec.
This commit is contained in:
3 files changed
+9
-31
No files matched your search
+1
-21
@@ -3535,7 +3535,7 @@ func (lc *LightningChannel) ProcessChanSyncMsg(
|
||||
// but died before the signature was sent. We re-transmit our
|
||||
// revocation, but also initiate a state transition to re-sync
|
||||
// them.
|
||||
if !lc.FullySynced() {
|
||||
if lc.OweCommitment(true) {
|
||||
commitSig, htlcSigs, _, err := lc.SignNextCommitment()
|
||||
switch {
|
||||
|
||||
@@ -4225,26 +4225,6 @@ func (lc *LightningChannel) oweCommitment(local bool) bool {
|
||||
return oweCommitment
|
||||
}
|
||||
|
||||
// FullySynced returns a boolean value reflecting if both commitment chains
|
||||
// (remote+local) are fully in sync. Both commitment chains are fully in sync
|
||||
// if the tip of each chain includes the latest committed changes from both
|
||||
// sides.
|
||||
func (lc *LightningChannel) FullySynced() bool {
|
||||
lc.RLock()
|
||||
defer lc.RUnlock()
|
||||
|
||||
lastLocalCommit := lc.localCommitChain.tip()
|
||||
lastRemoteCommit := lc.remoteCommitChain.tip()
|
||||
|
||||
localUpdatesSynced := (lastLocalCommit.ourMessageIndex ==
|
||||
lastRemoteCommit.ourMessageIndex)
|
||||
|
||||
remoteUpdatesSynced := (lastLocalCommit.theirMessageIndex ==
|
||||
lastRemoteCommit.theirMessageIndex)
|
||||
|
||||
return localUpdatesSynced && remoteUpdatesSynced
|
||||
}
|
||||
|
||||
// RevokeCurrentCommitment revokes the next lowest unrevoked commitment
|
||||
// transaction in the local commitment chain. As a result the edge of our
|
||||
// revocation window is extended by one, and the tail of our local commitment
|
||||
|
||||
Reference in new issue
Block a user