mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-07-28 13:52:55 +02:00
lnwallet: restore unsigned acked remote updates
This commit updates the channel state machine to persistently store remote updates that we have received a signature for, but that we haven't yet included in a commit signature of our own. Previously those updates were only stored in memory and dropped across restarts. This lead to the production of an invalid signature and channel force closure. The remote party expects us to include those updates.
This commit is contained in:
@@ -524,10 +524,34 @@ func TestChannelStateTransition(t *testing.T) {
|
||||
// First update the local node's broadcastable state and also add a
|
||||
// CommitDiff remote node's as well in order to simulate a proper state
|
||||
// transition.
|
||||
if err := channel.UpdateCommitment(&commitment); err != nil {
|
||||
unsignedAckedUpdates := []LogUpdate{
|
||||
{
|
||||
LogIndex: 2,
|
||||
UpdateMsg: &lnwire.UpdateAddHTLC{
|
||||
ChanID: lnwire.ChannelID{1, 2, 3},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
err = channel.UpdateCommitment(&commitment, unsignedAckedUpdates)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to update commitment: %v", err)
|
||||
}
|
||||
|
||||
// Assert that update is correctly written to the database.
|
||||
dbUnsignedAckedUpdates, err := channel.UnsignedAckedUpdates()
|
||||
if err != nil {
|
||||
t.Fatalf("unable to fetch dangling remote updates: %v", err)
|
||||
}
|
||||
if len(dbUnsignedAckedUpdates) != 1 {
|
||||
t.Fatalf("unexpected number of dangling remote updates")
|
||||
}
|
||||
if !reflect.DeepEqual(
|
||||
dbUnsignedAckedUpdates[0], unsignedAckedUpdates[0],
|
||||
) {
|
||||
t.Fatalf("unexpected update")
|
||||
}
|
||||
|
||||
// The balances, new update, the HTLCs and the changes to the fake
|
||||
// commitment transaction along with the modified signature should all
|
||||
// have been updated.
|
||||
|
Reference in New Issue
Block a user