lnwallet/channel: let evaluateHTLCView take mutate boolean
This commit adds a new boolean parameter mutateState to evalueteHTLCView, that let us call it without neccessarily mutating the addHeight/removeHeight of the HTLCs, which is useful when evaluating the commitment validity without mutating the state.
This commit is contained in:
parent
78514acd49
commit
98d28611e4
@ -2253,8 +2253,16 @@ func (lc *LightningChannel) createCommitmentTx(c *commitment,
|
|||||||
// settles, and timeouts found in both logs. The resulting view returned
|
// settles, and timeouts found in both logs. The resulting view returned
|
||||||
// reflects the current state of HTLCs within the remote or local commitment
|
// reflects the current state of HTLCs within the remote or local commitment
|
||||||
// chain.
|
// chain.
|
||||||
|
//
|
||||||
|
// If mutateState is set to true, then the add height of all added HTLCs
|
||||||
|
// will be set to nextHeight, and the remove height of all removed HTLCs
|
||||||
|
// will be set to nextHeight. This should therefore only be set to true
|
||||||
|
// once for each height, and only in concert with signing a new commitment.
|
||||||
|
// TODO(halseth): return htlcs to mutate instead of mutating inside
|
||||||
|
// method.
|
||||||
func (lc *LightningChannel) evaluateHTLCView(view *htlcView, ourBalance,
|
func (lc *LightningChannel) evaluateHTLCView(view *htlcView, ourBalance,
|
||||||
theirBalance *lnwire.MilliSatoshi, nextHeight uint64, remoteChain bool) *htlcView {
|
theirBalance *lnwire.MilliSatoshi, nextHeight uint64,
|
||||||
|
remoteChain, mutateState bool) *htlcView {
|
||||||
|
|
||||||
newView := &htlcView{}
|
newView := &htlcView{}
|
||||||
|
|
||||||
@ -2276,7 +2284,7 @@ func (lc *LightningChannel) evaluateHTLCView(view *htlcView, ourBalance,
|
|||||||
// If we're settling an inbound HTLC, and it hasn't been
|
// If we're settling an inbound HTLC, and it hasn't been
|
||||||
// processed yet, then increment our state tracking the total
|
// processed yet, then increment our state tracking the total
|
||||||
// number of satoshis we've received within the channel.
|
// number of satoshis we've received within the channel.
|
||||||
if entry.EntryType == Settle && !remoteChain &&
|
if mutateState && entry.EntryType == Settle && !remoteChain &&
|
||||||
entry.removeCommitHeightLocal == 0 {
|
entry.removeCommitHeightLocal == 0 {
|
||||||
lc.channelState.TotalMSatReceived += entry.Amount
|
lc.channelState.TotalMSatReceived += entry.Amount
|
||||||
}
|
}
|
||||||
@ -2285,7 +2293,7 @@ func (lc *LightningChannel) evaluateHTLCView(view *htlcView, ourBalance,
|
|||||||
|
|
||||||
skipThem[addEntry.HtlcIndex] = struct{}{}
|
skipThem[addEntry.HtlcIndex] = struct{}{}
|
||||||
processRemoveEntry(entry, ourBalance, theirBalance,
|
processRemoveEntry(entry, ourBalance, theirBalance,
|
||||||
nextHeight, remoteChain, true)
|
nextHeight, remoteChain, true, mutateState)
|
||||||
}
|
}
|
||||||
for _, entry := range view.theirUpdates {
|
for _, entry := range view.theirUpdates {
|
||||||
if entry.EntryType == Add {
|
if entry.EntryType == Add {
|
||||||
@ -2296,7 +2304,7 @@ func (lc *LightningChannel) evaluateHTLCView(view *htlcView, ourBalance,
|
|||||||
// and it hasn't been processed, yet, the increment our state
|
// and it hasn't been processed, yet, the increment our state
|
||||||
// tracking the total number of satoshis we've sent within the
|
// tracking the total number of satoshis we've sent within the
|
||||||
// channel.
|
// channel.
|
||||||
if entry.EntryType == Settle && !remoteChain &&
|
if mutateState && entry.EntryType == Settle && !remoteChain &&
|
||||||
entry.removeCommitHeightLocal == 0 {
|
entry.removeCommitHeightLocal == 0 {
|
||||||
lc.channelState.TotalMSatSent += entry.Amount
|
lc.channelState.TotalMSatSent += entry.Amount
|
||||||
}
|
}
|
||||||
@ -2305,7 +2313,7 @@ func (lc *LightningChannel) evaluateHTLCView(view *htlcView, ourBalance,
|
|||||||
|
|
||||||
skipUs[addEntry.HtlcIndex] = struct{}{}
|
skipUs[addEntry.HtlcIndex] = struct{}{}
|
||||||
processRemoveEntry(entry, ourBalance, theirBalance,
|
processRemoveEntry(entry, ourBalance, theirBalance,
|
||||||
nextHeight, remoteChain, false)
|
nextHeight, remoteChain, false, mutateState)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Next we take a second pass through all the log entries, skipping any
|
// Next we take a second pass through all the log entries, skipping any
|
||||||
@ -2318,7 +2326,7 @@ func (lc *LightningChannel) evaluateHTLCView(view *htlcView, ourBalance,
|
|||||||
}
|
}
|
||||||
|
|
||||||
processAddEntry(entry, ourBalance, theirBalance, nextHeight,
|
processAddEntry(entry, ourBalance, theirBalance, nextHeight,
|
||||||
remoteChain, false)
|
remoteChain, false, mutateState)
|
||||||
newView.ourUpdates = append(newView.ourUpdates, entry)
|
newView.ourUpdates = append(newView.ourUpdates, entry)
|
||||||
}
|
}
|
||||||
for _, entry := range view.theirUpdates {
|
for _, entry := range view.theirUpdates {
|
||||||
@ -2328,7 +2336,7 @@ func (lc *LightningChannel) evaluateHTLCView(view *htlcView, ourBalance,
|
|||||||
}
|
}
|
||||||
|
|
||||||
processAddEntry(entry, ourBalance, theirBalance, nextHeight,
|
processAddEntry(entry, ourBalance, theirBalance, nextHeight,
|
||||||
remoteChain, true)
|
remoteChain, true, mutateState)
|
||||||
newView.theirUpdates = append(newView.theirUpdates, entry)
|
newView.theirUpdates = append(newView.theirUpdates, entry)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2340,7 +2348,7 @@ func (lc *LightningChannel) evaluateHTLCView(view *htlcView, ourBalance,
|
|||||||
// was committed is updated. Keeping track of this inclusion height allows us to
|
// was committed is updated. Keeping track of this inclusion height allows us to
|
||||||
// later compact the log once the change is fully committed in both chains.
|
// later compact the log once the change is fully committed in both chains.
|
||||||
func processAddEntry(htlc *PaymentDescriptor, ourBalance, theirBalance *lnwire.MilliSatoshi,
|
func processAddEntry(htlc *PaymentDescriptor, ourBalance, theirBalance *lnwire.MilliSatoshi,
|
||||||
nextHeight uint64, remoteChain bool, isIncoming bool) {
|
nextHeight uint64, remoteChain bool, isIncoming, mutateState bool) {
|
||||||
|
|
||||||
// If we're evaluating this entry for the remote chain (to create/view
|
// If we're evaluating this entry for the remote chain (to create/view
|
||||||
// a new commitment), then we'll may be updating the height this entry
|
// a new commitment), then we'll may be updating the height this entry
|
||||||
@ -2368,7 +2376,9 @@ func processAddEntry(htlc *PaymentDescriptor, ourBalance, theirBalance *lnwire.M
|
|||||||
*ourBalance -= htlc.Amount
|
*ourBalance -= htlc.Amount
|
||||||
}
|
}
|
||||||
|
|
||||||
*addHeight = nextHeight
|
if mutateState {
|
||||||
|
*addHeight = nextHeight
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// processRemoveEntry processes a log entry which settles or times out a
|
// processRemoveEntry processes a log entry which settles or times out a
|
||||||
@ -2376,7 +2386,7 @@ func processAddEntry(htlc *PaymentDescriptor, ourBalance, theirBalance *lnwire.M
|
|||||||
// is skipped.
|
// is skipped.
|
||||||
func processRemoveEntry(htlc *PaymentDescriptor, ourBalance,
|
func processRemoveEntry(htlc *PaymentDescriptor, ourBalance,
|
||||||
theirBalance *lnwire.MilliSatoshi, nextHeight uint64,
|
theirBalance *lnwire.MilliSatoshi, nextHeight uint64,
|
||||||
remoteChain bool, isIncoming bool) {
|
remoteChain bool, isIncoming, mutateState bool) {
|
||||||
|
|
||||||
var removeHeight *uint64
|
var removeHeight *uint64
|
||||||
if remoteChain {
|
if remoteChain {
|
||||||
@ -2416,7 +2426,9 @@ func processRemoveEntry(htlc *PaymentDescriptor, ourBalance,
|
|||||||
*ourBalance += htlc.Amount
|
*ourBalance += htlc.Amount
|
||||||
}
|
}
|
||||||
|
|
||||||
*removeHeight = nextHeight
|
if mutateState {
|
||||||
|
*removeHeight = nextHeight
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// generateRemoteHtlcSigJobs generates a series of HTLC signature jobs for the
|
// generateRemoteHtlcSigJobs generates a series of HTLC signature jobs for the
|
||||||
|
Loading…
Reference in New Issue
Block a user