cnct: move supplement method into resolvers
This commit is contained in:
parent
76c2b2cea2
commit
a83be177c6
@ -501,9 +501,20 @@ func (c *ChannelArbitrator) relaunchResolvers(commitSet *CommitSet) error {
|
|||||||
"resolvers", c.cfg.ChanPoint, len(unresolvedContracts))
|
"resolvers", c.cfg.ChanPoint, len(unresolvedContracts))
|
||||||
|
|
||||||
for _, resolver := range unresolvedContracts {
|
for _, resolver := range unresolvedContracts {
|
||||||
if err := c.supplementResolver(resolver, htlcMap); err != nil {
|
htlcResolver, ok := resolver.(htlcContractResolver)
|
||||||
return err
|
if !ok {
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
htlcPoint := htlcResolver.HtlcPoint()
|
||||||
|
htlc, ok := htlcMap[htlcPoint]
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf(
|
||||||
|
"htlc resolver %T unavailable", resolver,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
htlcResolver.Supplement(*htlc)
|
||||||
}
|
}
|
||||||
|
|
||||||
c.launchResolvers(unresolvedContracts)
|
c.launchResolvers(unresolvedContracts)
|
||||||
@ -511,89 +522,6 @@ func (c *ChannelArbitrator) relaunchResolvers(commitSet *CommitSet) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// supplementResolver takes a resolver as it is restored from the log and fills
|
|
||||||
// in missing data from the htlcMap.
|
|
||||||
func (c *ChannelArbitrator) supplementResolver(resolver ContractResolver,
|
|
||||||
htlcMap map[wire.OutPoint]*channeldb.HTLC) error {
|
|
||||||
|
|
||||||
switch r := resolver.(type) {
|
|
||||||
|
|
||||||
case *htlcSuccessResolver:
|
|
||||||
return c.supplementSuccessResolver(r, htlcMap)
|
|
||||||
|
|
||||||
case *htlcIncomingContestResolver:
|
|
||||||
return c.supplementIncomingContestResolver(r, htlcMap)
|
|
||||||
|
|
||||||
case *htlcTimeoutResolver:
|
|
||||||
return c.supplementTimeoutResolver(r, htlcMap)
|
|
||||||
|
|
||||||
case *htlcOutgoingContestResolver:
|
|
||||||
return c.supplementTimeoutResolver(
|
|
||||||
&r.htlcTimeoutResolver, htlcMap,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// supplementSuccessResolver takes a htlcIncomingContestResolver as it is
|
|
||||||
// restored from the log and fills in missing data from the htlcMap.
|
|
||||||
func (c *ChannelArbitrator) supplementIncomingContestResolver(
|
|
||||||
r *htlcIncomingContestResolver,
|
|
||||||
htlcMap map[wire.OutPoint]*channeldb.HTLC) error {
|
|
||||||
|
|
||||||
res := r.htlcResolution
|
|
||||||
htlcPoint := res.HtlcPoint()
|
|
||||||
htlc, ok := htlcMap[htlcPoint]
|
|
||||||
if !ok {
|
|
||||||
return errors.New(
|
|
||||||
"htlc for incoming contest resolver unavailable",
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
r.htlcAmt = htlc.Amt
|
|
||||||
r.circuitKey = channeldb.CircuitKey{
|
|
||||||
ChanID: c.cfg.ShortChanID,
|
|
||||||
HtlcID: htlc.HtlcIndex,
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// supplementSuccessResolver takes a htlcSuccessResolver as it is restored from
|
|
||||||
// the log and fills in missing data from the htlcMap.
|
|
||||||
func (c *ChannelArbitrator) supplementSuccessResolver(r *htlcSuccessResolver,
|
|
||||||
htlcMap map[wire.OutPoint]*channeldb.HTLC) error {
|
|
||||||
|
|
||||||
res := r.htlcResolution
|
|
||||||
htlcPoint := res.HtlcPoint()
|
|
||||||
htlc, ok := htlcMap[htlcPoint]
|
|
||||||
if !ok {
|
|
||||||
return errors.New(
|
|
||||||
"htlc for success resolver unavailable",
|
|
||||||
)
|
|
||||||
}
|
|
||||||
r.htlcAmt = htlc.Amt
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// supplementTimeoutResolver takes a htlcSuccessResolver as it is restored from
|
|
||||||
// the log and fills in missing data from the htlcMap.
|
|
||||||
func (c *ChannelArbitrator) supplementTimeoutResolver(r *htlcTimeoutResolver,
|
|
||||||
htlcMap map[wire.OutPoint]*channeldb.HTLC) error {
|
|
||||||
|
|
||||||
res := r.htlcResolution
|
|
||||||
htlcPoint := res.HtlcPoint()
|
|
||||||
htlc, ok := htlcMap[htlcPoint]
|
|
||||||
if !ok {
|
|
||||||
return errors.New(
|
|
||||||
"htlc for timeout resolver unavailable",
|
|
||||||
)
|
|
||||||
}
|
|
||||||
r.htlcAmt = htlc.Amt
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Report returns htlc reports for the active resolvers.
|
// Report returns htlc reports for the active resolvers.
|
||||||
func (c *ChannelArbitrator) Report() []*ContractReport {
|
func (c *ChannelArbitrator) Report() []*ContractReport {
|
||||||
c.activeResolversLock.RLock()
|
c.activeResolversLock.RLock()
|
||||||
|
@ -4,6 +4,9 @@ import (
|
|||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"errors"
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
|
"github.com/btcsuite/btcd/wire"
|
||||||
|
"github.com/lightningnetwork/lnd/channeldb"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -51,6 +54,18 @@ type ContractResolver interface {
|
|||||||
Stop()
|
Stop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// htlcContractResolver is the required interface for htlc resolvers.
|
||||||
|
type htlcContractResolver interface {
|
||||||
|
ContractResolver
|
||||||
|
|
||||||
|
// HtlcPoint returns the htlc's outpoint on the commitment tx.
|
||||||
|
HtlcPoint() wire.OutPoint
|
||||||
|
|
||||||
|
// Supplement adds additional information to the resolver that is
|
||||||
|
// required before Resolve() is called.
|
||||||
|
Supplement(htlc channeldb.HTLC)
|
||||||
|
}
|
||||||
|
|
||||||
// reportingContractResolver is a ContractResolver that also exposes a report on
|
// reportingContractResolver is a ContractResolver that also exposes a report on
|
||||||
// the resolution state of the contract.
|
// the resolution state of the contract.
|
||||||
type reportingContractResolver interface {
|
type reportingContractResolver interface {
|
||||||
|
@ -338,6 +338,18 @@ func newIncomingContestResolverFromReader(r io.Reader, resCfg ResolverConfig) (
|
|||||||
return h, nil
|
return h, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Supplement adds additional information to the resolver that is required
|
||||||
|
// before Resolve() is called.
|
||||||
|
//
|
||||||
|
// NOTE: Part of the htlcContractResolver interface.
|
||||||
|
func (h *htlcIncomingContestResolver) Supplement(htlc channeldb.HTLC) {
|
||||||
|
h.htlcAmt = htlc.Amt
|
||||||
|
h.circuitKey = channeldb.CircuitKey{
|
||||||
|
ChanID: h.ShortChanID,
|
||||||
|
HtlcID: htlc.HtlcIndex,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// A compile time assertion to ensure htlcIncomingContestResolver meets the
|
// A compile time assertion to ensure htlcIncomingContestResolver meets the
|
||||||
// ContractResolver interface.
|
// ContractResolver interface.
|
||||||
var _ ContractResolver = (*htlcIncomingContestResolver)(nil)
|
var _ htlcContractResolver = (*htlcIncomingContestResolver)(nil)
|
||||||
|
@ -215,4 +215,4 @@ func newOutgoingContestResolverFromReader(r io.Reader, resCfg ResolverConfig) (
|
|||||||
|
|
||||||
// A compile time assertion to ensure htlcOutgoingContestResolver meets the
|
// A compile time assertion to ensure htlcOutgoingContestResolver meets the
|
||||||
// ContractResolver interface.
|
// ContractResolver interface.
|
||||||
var _ ContractResolver = (*htlcOutgoingContestResolver)(nil)
|
var _ htlcContractResolver = (*htlcOutgoingContestResolver)(nil)
|
||||||
|
@ -6,6 +6,7 @@ import (
|
|||||||
|
|
||||||
"github.com/btcsuite/btcd/wire"
|
"github.com/btcsuite/btcd/wire"
|
||||||
"github.com/davecgh/go-spew/spew"
|
"github.com/davecgh/go-spew/spew"
|
||||||
|
"github.com/lightningnetwork/lnd/channeldb"
|
||||||
"github.com/lightningnetwork/lnd/input"
|
"github.com/lightningnetwork/lnd/input"
|
||||||
"github.com/lightningnetwork/lnd/lntypes"
|
"github.com/lightningnetwork/lnd/lntypes"
|
||||||
"github.com/lightningnetwork/lnd/lnwallet"
|
"github.com/lightningnetwork/lnd/lnwallet"
|
||||||
@ -338,6 +339,21 @@ func newSuccessResolverFromReader(r io.Reader, resCfg ResolverConfig) (
|
|||||||
return h, nil
|
return h, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Supplement adds additional information to the resolver that is required
|
||||||
|
// before Resolve() is called.
|
||||||
|
//
|
||||||
|
// NOTE: Part of the htlcContractResolver interface.
|
||||||
|
func (h *htlcSuccessResolver) Supplement(htlc channeldb.HTLC) {
|
||||||
|
h.htlcAmt = htlc.Amt
|
||||||
|
}
|
||||||
|
|
||||||
|
// HtlcPoint returns the htlc's outpoint on the commitment tx.
|
||||||
|
//
|
||||||
|
// NOTE: Part of the htlcContractResolver interface.
|
||||||
|
func (h *htlcSuccessResolver) HtlcPoint() wire.OutPoint {
|
||||||
|
return h.htlcResolution.HtlcPoint()
|
||||||
|
}
|
||||||
|
|
||||||
// A compile time assertion to ensure htlcSuccessResolver meets the
|
// A compile time assertion to ensure htlcSuccessResolver meets the
|
||||||
// ContractResolver interface.
|
// ContractResolver interface.
|
||||||
var _ ContractResolver = (*htlcSuccessResolver)(nil)
|
var _ htlcContractResolver = (*htlcSuccessResolver)(nil)
|
||||||
|
@ -8,6 +8,7 @@ import (
|
|||||||
"github.com/btcsuite/btcd/wire"
|
"github.com/btcsuite/btcd/wire"
|
||||||
"github.com/davecgh/go-spew/spew"
|
"github.com/davecgh/go-spew/spew"
|
||||||
"github.com/lightningnetwork/lnd/chainntnfs"
|
"github.com/lightningnetwork/lnd/chainntnfs"
|
||||||
|
"github.com/lightningnetwork/lnd/channeldb"
|
||||||
"github.com/lightningnetwork/lnd/input"
|
"github.com/lightningnetwork/lnd/input"
|
||||||
"github.com/lightningnetwork/lnd/lntypes"
|
"github.com/lightningnetwork/lnd/lntypes"
|
||||||
"github.com/lightningnetwork/lnd/lnwallet"
|
"github.com/lightningnetwork/lnd/lnwallet"
|
||||||
@ -456,6 +457,21 @@ func newTimeoutResolverFromReader(r io.Reader, resCfg ResolverConfig) (
|
|||||||
return h, nil
|
return h, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Supplement adds additional information to the resolver that is required
|
||||||
|
// before Resolve() is called.
|
||||||
|
//
|
||||||
|
// NOTE: Part of the htlcContractResolver interface.
|
||||||
|
func (h *htlcTimeoutResolver) Supplement(htlc channeldb.HTLC) {
|
||||||
|
h.htlcAmt = htlc.Amt
|
||||||
|
}
|
||||||
|
|
||||||
|
// HtlcPoint returns the htlc's outpoint on the commitment tx.
|
||||||
|
//
|
||||||
|
// NOTE: Part of the htlcContractResolver interface.
|
||||||
|
func (h *htlcTimeoutResolver) HtlcPoint() wire.OutPoint {
|
||||||
|
return h.htlcResolution.HtlcPoint()
|
||||||
|
}
|
||||||
|
|
||||||
// A compile time assertion to ensure htlcTimeoutResolver meets the
|
// A compile time assertion to ensure htlcTimeoutResolver meets the
|
||||||
// ContractResolver interface.
|
// ContractResolver interface.
|
||||||
var _ ContractResolver = (*htlcTimeoutResolver)(nil)
|
var _ htlcContractResolver = (*htlcTimeoutResolver)(nil)
|
||||||
|
Loading…
Reference in New Issue
Block a user