Merge pull request #6221 from Crypt-iQ/link_handoff
multi: reliable hand-off from htlcswitch to contractcourt
This commit is contained in:
8 files changed
+199
-75
No files matched your search
@@ -964,16 +964,9 @@ type ContractUpdate struct {
|
||||
Htlcs []channeldb.HTLC
|
||||
}
|
||||
|
||||
// ContractSignals wraps the two signals that affect the state of a channel
|
||||
// being watched by an arbitrator. The two signals we care about are: the
|
||||
// channel has a new set of HTLC's, and the remote party has just broadcast
|
||||
// their version of the commitment transaction.
|
||||
// ContractSignals is used by outside subsystems to notify a channel arbitrator
|
||||
// of its ShortChannelID.
|
||||
type ContractSignals struct {
|
||||
// HtlcUpdates is a channel that the link will use to update the
|
||||
// designated channel arbitrator when the set of HTLCs on any valid
|
||||
// commitment changes.
|
||||
HtlcUpdates chan *ContractUpdate
|
||||
|
||||
// ShortChanID is the up to date short channel ID for a contract. This
|
||||
// can change either if when the contract was added it didn't yet have
|
||||
// a stable identifier, or in the case of a reorg.
|
||||
@@ -1001,6 +994,25 @@ func (c *ChainArbitrator) UpdateContractSignals(chanPoint wire.OutPoint,
|
||||
return nil
|
||||
}
|
||||
|
||||
// NotifyContractUpdate lets a channel arbitrator know that a new
|
||||
// ContractUpdate is available. This calls the ChannelArbitrator's internal
|
||||
// method NotifyContractUpdate which waits for a response on a done chan before
|
||||
// returning. This method will return an error if the ChannelArbitrator is not
|
||||
// in the activeChannels map. However, this only happens if the arbitrator is
|
||||
// resolved and the related link would already be shut down.
|
||||
func (c *ChainArbitrator) NotifyContractUpdate(chanPoint wire.OutPoint,
|
||||
update *ContractUpdate) error {
|
||||
|
||||
c.Lock()
|
||||
arbitrator, ok := c.activeChannels[chanPoint]
|
||||
c.Unlock()
|
||||
if !ok {
|
||||
return fmt.Errorf("can't find arbitrator for %v", chanPoint)
|
||||
}
|
||||
|
||||
return arbitrator.notifyContractUpdate(update)
|
||||
}
|
||||
|
||||
// GetChannelArbitrator safely returns the channel arbitrator for a given
|
||||
// channel outpoint.
|
||||
func (c *ChainArbitrator) GetChannelArbitrator(chanPoint wire.OutPoint) (
|
||||
|
||||
Reference in new issue
Block a user