mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-06-29 18:10:48 +02:00
lnwallet: introduce distinct HTLC counter+index on top of updateLog
In this commit, we fix an existing derivation from the commitment state machine as defined within the specification. Before this commit, we only kept a single counter which both HTLC adds and fails/settles would share. This was valid in the prior pre-spec iteration of the state machine. However in the current draft of the spec, only a distinct counter for HTLCs are used throughout. This would cause an incompatibility, as if we mixed adds and settles during an exchange, then our counter values would differ with other implementations. To remedy this, we now introduce a distinct HTLC counter and index within the updateLog. Each Add will increment both the log counter, and the HTLC counter. Each Settle/Fail will only increment the log counter. Inbound Settle/Fails will index into the HTLC index as to target the proper HTLC. The PaymentDescriptor type has been extended with an additional field (HltcIndex) which itself tracks the index of an incoming/outgoing HTLC.
This commit is contained in:
@ -1505,7 +1505,7 @@ func TestStateUpdatePersistence(t *testing.T) {
|
||||
// Newly generated pkScripts for HTLCs should be the same as in the old channel.
|
||||
for _, entry := range aliceChannel.localUpdateLog.updateIndex {
|
||||
htlc := entry.Value.(*PaymentDescriptor)
|
||||
restoredHtlc := aliceChannelNew.localUpdateLog.lookup(htlc.Index)
|
||||
restoredHtlc := aliceChannelNew.localUpdateLog.lookupHtlc(htlc.HtlcIndex)
|
||||
if !bytes.Equal(htlc.ourPkScript, restoredHtlc.ourPkScript) {
|
||||
t.Fatalf("alice ourPkScript in ourLog: expected %X, got %X",
|
||||
htlc.ourPkScript[:5], restoredHtlc.ourPkScript[:5])
|
||||
@ -1517,7 +1517,7 @@ func TestStateUpdatePersistence(t *testing.T) {
|
||||
}
|
||||
for _, entry := range aliceChannel.remoteUpdateLog.updateIndex {
|
||||
htlc := entry.Value.(*PaymentDescriptor)
|
||||
restoredHtlc := aliceChannelNew.remoteUpdateLog.lookup(htlc.Index)
|
||||
restoredHtlc := aliceChannelNew.remoteUpdateLog.lookupHtlc(htlc.HtlcIndex)
|
||||
if !bytes.Equal(htlc.ourPkScript, restoredHtlc.ourPkScript) {
|
||||
t.Fatalf("alice ourPkScript in theirLog: expected %X, got %X",
|
||||
htlc.ourPkScript[:5], restoredHtlc.ourPkScript[:5])
|
||||
@ -1529,7 +1529,7 @@ func TestStateUpdatePersistence(t *testing.T) {
|
||||
}
|
||||
for _, entry := range bobChannel.localUpdateLog.updateIndex {
|
||||
htlc := entry.Value.(*PaymentDescriptor)
|
||||
restoredHtlc := bobChannelNew.localUpdateLog.lookup(htlc.Index)
|
||||
restoredHtlc := bobChannelNew.localUpdateLog.lookupHtlc(htlc.HtlcIndex)
|
||||
if !bytes.Equal(htlc.ourPkScript, restoredHtlc.ourPkScript) {
|
||||
t.Fatalf("bob ourPkScript in ourLog: expected %X, got %X",
|
||||
htlc.ourPkScript[:5], restoredHtlc.ourPkScript[:5])
|
||||
@ -1541,7 +1541,7 @@ func TestStateUpdatePersistence(t *testing.T) {
|
||||
}
|
||||
for _, entry := range bobChannel.remoteUpdateLog.updateIndex {
|
||||
htlc := entry.Value.(*PaymentDescriptor)
|
||||
restoredHtlc := bobChannelNew.remoteUpdateLog.lookup(htlc.Index)
|
||||
restoredHtlc := bobChannelNew.remoteUpdateLog.lookupHtlc(htlc.HtlcIndex)
|
||||
if !bytes.Equal(htlc.ourPkScript, restoredHtlc.ourPkScript) {
|
||||
t.Fatalf("bob ourPkScript in theirLog: expected %X, got %X",
|
||||
htlc.ourPkScript[:5], restoredHtlc.ourPkScript[:5])
|
||||
|
Reference in New Issue
Block a user