Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions lnwallet/channel.go
Original file line number Diff line number Diff line change
Expand Up @@ -2474,7 +2474,7 @@ type htlcView struct {
func (lc *LightningChannel) fetchHTLCView(theirLogIndex, ourLogIndex uint64) *htlcView {
var ourHTLCs []*PaymentDescriptor
for e := lc.localUpdateLog.Front(); e != nil; e = e.Next() {
htlc := e.Value.(*PaymentDescriptor)
htlc := e.Value

// This HTLC is active from this point-of-view iff the log
// index of the state update is below the specified index in
Expand All @@ -2486,7 +2486,7 @@ func (lc *LightningChannel) fetchHTLCView(theirLogIndex, ourLogIndex uint64) *ht

var theirHTLCs []*PaymentDescriptor
for e := lc.remoteUpdateLog.Front(); e != nil; e = e.Next() {
htlc := e.Value.(*PaymentDescriptor)
htlc := e.Value

// If this is an incoming HTLC, then it is only active from
// this point-of-view if the index of the HTLC addition in
Expand Down Expand Up @@ -3112,7 +3112,7 @@ func (lc *LightningChannel) createCommitDiff(
// set of items we need to retransmit if we reconnect and find that
// they didn't process this new state fully.
for e := lc.localUpdateLog.Front(); e != nil; e = e.Next() {
pd := e.Value.(*PaymentDescriptor)
pd := e.Value

// If this entry wasn't committed at the exact height of this
// remote commitment, then we'll skip it as it was already
Expand Down Expand Up @@ -3250,7 +3250,7 @@ func (lc *LightningChannel) getUnsignedAckedUpdates() []channeldb.LogUpdate {
// remote party expects.
var logUpdates []channeldb.LogUpdate
for e := lc.remoteUpdateLog.Front(); e != nil; e = e.Next() {
pd := e.Value.(*PaymentDescriptor)
pd := e.Value

// Skip all remote updates that we have already included in our
// commit chain.
Expand Down Expand Up @@ -5195,7 +5195,7 @@ func (lc *LightningChannel) ReceiveRevocation(revMsg *lnwire.RevokeAndAck) (

var addIndex, settleFailIndex uint16
for e := lc.remoteUpdateLog.Front(); e != nil; e = e.Next() {
pd := e.Value.(*PaymentDescriptor)
pd := e.Value

// Fee updates are local to this particular channel, and should
// never be forwarded.
Expand Down Expand Up @@ -5525,7 +5525,7 @@ func (lc *LightningChannel) GetDustSum(remote bool,

// Grab all of our HTLCs and evaluate against the dust limit.
for e := lc.localUpdateLog.Front(); e != nil; e = e.Next() {
pd := e.Value.(*PaymentDescriptor)
pd := e.Value
if pd.EntryType != Add {
continue
}
Expand All @@ -5544,7 +5544,7 @@ func (lc *LightningChannel) GetDustSum(remote bool,

// Grab all of their HTLCs and evaluate against the dust limit.
for e := lc.remoteUpdateLog.Front(); e != nil; e = e.Next() {
pd := e.Value.(*PaymentDescriptor)
pd := e.Value
if pd.EntryType != Add {
continue
}
Expand Down Expand Up @@ -8545,7 +8545,7 @@ func (lc *LightningChannel) unsignedLocalUpdates(remoteMessageIndex,

var localPeerUpdates []channeldb.LogUpdate
for e := lc.localUpdateLog.Front(); e != nil; e = e.Next() {
pd := e.Value.(*PaymentDescriptor)
pd := e.Value

// We don't save add updates as they are restored from the
// remote commitment in restoreStateLogs.
Expand Down
21 changes: 10 additions & 11 deletions lnwallet/channel_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package lnwallet

import (
"bytes"
"container/list"
"crypto/sha256"
"fmt"
"math/rand"
Expand Down Expand Up @@ -1906,7 +1905,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.htlcIndex {
htlc := entry.Value.(*PaymentDescriptor)
htlc := entry.Value
restoredHtlc := aliceChannelNew.localUpdateLog.lookupHtlc(htlc.HtlcIndex)
if !bytes.Equal(htlc.ourPkScript, restoredHtlc.ourPkScript) {
t.Fatalf("alice ourPkScript in ourLog: expected %X, got %X",
Expand All @@ -1918,7 +1917,7 @@ func TestStateUpdatePersistence(t *testing.T) {
}
}
for _, entry := range aliceChannel.remoteUpdateLog.htlcIndex {
htlc := entry.Value.(*PaymentDescriptor)
htlc := entry.Value
restoredHtlc := aliceChannelNew.remoteUpdateLog.lookupHtlc(htlc.HtlcIndex)
if !bytes.Equal(htlc.ourPkScript, restoredHtlc.ourPkScript) {
t.Fatalf("alice ourPkScript in theirLog: expected %X, got %X",
Expand All @@ -1930,7 +1929,7 @@ func TestStateUpdatePersistence(t *testing.T) {
}
}
for _, entry := range bobChannel.localUpdateLog.htlcIndex {
htlc := entry.Value.(*PaymentDescriptor)
htlc := entry.Value
restoredHtlc := bobChannelNew.localUpdateLog.lookupHtlc(htlc.HtlcIndex)
if !bytes.Equal(htlc.ourPkScript, restoredHtlc.ourPkScript) {
t.Fatalf("bob ourPkScript in ourLog: expected %X, got %X",
Expand All @@ -1942,7 +1941,7 @@ func TestStateUpdatePersistence(t *testing.T) {
}
}
for _, entry := range bobChannel.remoteUpdateLog.htlcIndex {
htlc := entry.Value.(*PaymentDescriptor)
htlc := entry.Value
restoredHtlc := bobChannelNew.remoteUpdateLog.lookupHtlc(htlc.HtlcIndex)
if !bytes.Equal(htlc.ourPkScript, restoredHtlc.ourPkScript) {
t.Fatalf("bob ourPkScript in theirLog: expected %X, got %X",
Expand Down Expand Up @@ -4472,7 +4471,7 @@ func TestFeeUpdateOldDiskFormat(t *testing.T) {
countLog := func(log *updateLog) (int, int) {
var numUpdates, numFee int
for e := log.Front(); e != nil; e = e.Next() {
htlc := e.Value.(*PaymentDescriptor)
htlc := e.Value
if htlc.EntryType == FeeUpdate {
numFee++
}
Expand Down Expand Up @@ -6755,14 +6754,14 @@ func compareHtlcs(htlc1, htlc2 *PaymentDescriptor) error {
}

// compareIndexes is a helper method to compare two index maps.
func compareIndexes(a, b map[uint64]*list.Element) error {
func compareIndexes(a, b map[uint64]*fn.Node[*PaymentDescriptor]) error {
for k1, e1 := range a {
e2, ok := b[k1]
if !ok {
return fmt.Errorf("element with key %d "+
"not found in b", k1)
}
htlc1, htlc2 := e1.Value.(*PaymentDescriptor), e2.Value.(*PaymentDescriptor)
htlc1, htlc2 := e1.Value, e2.Value
if err := compareHtlcs(htlc1, htlc2); err != nil {
return err
}
Expand All @@ -6774,7 +6773,7 @@ func compareIndexes(a, b map[uint64]*list.Element) error {
return fmt.Errorf("element with key %d not "+
"found in a", k1)
}
htlc1, htlc2 := e1.Value.(*PaymentDescriptor), e2.Value.(*PaymentDescriptor)
htlc1, htlc2 := e1.Value, e2.Value
if err := compareHtlcs(htlc1, htlc2); err != nil {
return err
}
Expand Down Expand Up @@ -6809,7 +6808,7 @@ func compareLogs(a, b *updateLog) error {

e1, e2 := a.Front(), b.Front()
for ; e1 != nil; e1, e2 = e1.Next(), e2.Next() {
htlc1, htlc2 := e1.Value.(*PaymentDescriptor), e2.Value.(*PaymentDescriptor)
htlc1, htlc2 := e1.Value, e2.Value
if err := compareHtlcs(htlc1, htlc2); err != nil {
return err
}
Expand Down Expand Up @@ -6917,7 +6916,7 @@ func TestChannelRestoreUpdateLogs(t *testing.T) {
func fetchNumUpdates(t updateType, log *updateLog) int {
num := 0
for e := log.Front(); e != nil; e = e.Next() {
htlc := e.Value.(*PaymentDescriptor)
htlc := e.Value
if htlc.EntryType == t {
num++
}
Expand Down
14 changes: 7 additions & 7 deletions lnwallet/commitment_chain.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package lnwallet

import "container/list"
import (
"github.com/lightningnetwork/lnd/fn"
)

// commitmentChain represents a chain of unrevoked commitments. The tail of the
// chain is the latest fully signed, yet unrevoked commitment. Two chains are
Expand All @@ -15,13 +17,13 @@ type commitmentChain struct {
// commitments are added to the end of the chain with increase height.
// Once a commitment transaction is revoked, the tail is incremented,
// freeing up the revocation window for new commitments.
commitments *list.List
commitments *fn.List[*commitment]
}

// newCommitmentChain creates a new commitment chain.
func newCommitmentChain() *commitmentChain {
return &commitmentChain{
commitments: list.New(),
commitments: fn.NewList[*commitment](),
}
}

Expand All @@ -42,14 +44,12 @@ func (s *commitmentChain) advanceTail() {

// tip returns the latest commitment added to the chain.
func (s *commitmentChain) tip() *commitment {
//nolint:forcetypeassert
return s.commitments.Back().Value.(*commitment)
return s.commitments.Back().Value
}

// tail returns the lowest unrevoked commitment transaction in the chain.
func (s *commitmentChain) tail() *commitment {
//nolint:forcetypeassert
return s.commitments.Front().Value.(*commitment)
return s.commitments.Front().Value
}

// hasUnackedCommitment returns true if the commitment chain has more than one
Expand Down
24 changes: 12 additions & 12 deletions lnwallet/update_log.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package lnwallet

import "container/list"
import (
"github.com/lightningnetwork/lnd/fn"
)

// updateLog is an append-only log that stores updates to a node's commitment
// chain. This structure can be seen as the "mempool" within Lightning where
Expand All @@ -27,16 +29,16 @@ type updateLog struct {

// List is the updatelog itself, we embed this value so updateLog has
// access to all the method of a list.List.
*list.List
*fn.List[*PaymentDescriptor]

// updateIndex maps a `logIndex` to a particular update entry. It
// deals with the four update types:
// `Fail|MalformedFail|Settle|FeeUpdate`
updateIndex map[uint64]*list.Element
updateIndex map[uint64]*fn.Node[*PaymentDescriptor]

// htlcIndex maps a `htlcCounter` to an offered HTLC entry, hence the
// `Add` update.
htlcIndex map[uint64]*list.Element
htlcIndex map[uint64]*fn.Node[*PaymentDescriptor]

// modifiedHtlcs is a set that keeps track of all the current modified
// htlcs, hence update types `Fail|MalformedFail|Settle`. A modified
Expand All @@ -48,9 +50,9 @@ type updateLog struct {
// newUpdateLog creates a new updateLog instance.
func newUpdateLog(logIndex, htlcCounter uint64) *updateLog {
return &updateLog{
List: list.New(),
updateIndex: make(map[uint64]*list.Element),
htlcIndex: make(map[uint64]*list.Element),
List: fn.NewList[*PaymentDescriptor](),
updateIndex: make(map[uint64]*fn.Node[*PaymentDescriptor]),
htlcIndex: make(map[uint64]*fn.Node[*PaymentDescriptor]),
logIndex: logIndex,
htlcCounter: htlcCounter,
modifiedHtlcs: make(map[uint64]struct{}),
Expand Down Expand Up @@ -101,8 +103,7 @@ func (u *updateLog) lookupHtlc(i uint64) *PaymentDescriptor {
return nil
}

//nolint:forcetypeassert
return htlc.Value.(*PaymentDescriptor)
return htlc.Value
}

// remove attempts to remove an entry from the update log. If the entry is
Expand Down Expand Up @@ -145,15 +146,14 @@ func compactLogs(ourLog, theirLog *updateLog,
localChainTail, remoteChainTail uint64) {

compactLog := func(logA, logB *updateLog) {
var nextA *list.Element
var nextA *fn.Node[*PaymentDescriptor]
for e := logA.Front(); e != nil; e = nextA {
// Assign next iteration element at top of loop because
// we may remove the current element from the list,
// which can change the iterated sequence.
nextA = e.Next()

//nolint:forcetypeassert
htlc := e.Value.(*PaymentDescriptor)
htlc := e.Value

// We skip Adds, as they will be removed along with the
// fail/settles below.
Expand Down