contractcourt: extend the ChainArbitratorConfig with IsOurAddress closure
In this commit, we add the IsOurAddress field into the config of the chain arb. With this new function closure, the chain arb is able to detect co-op on chain closes automatically.
This commit is contained in:
parent
bdbb33344a
commit
bbca53507f
@ -11,6 +11,7 @@ import (
|
|||||||
"github.com/lightningnetwork/lnd/lnwire"
|
"github.com/lightningnetwork/lnd/lnwire"
|
||||||
"github.com/roasbeef/btcd/chaincfg/chainhash"
|
"github.com/roasbeef/btcd/chaincfg/chainhash"
|
||||||
"github.com/roasbeef/btcd/wire"
|
"github.com/roasbeef/btcd/wire"
|
||||||
|
"github.com/roasbeef/btcutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ResolutionMsg is a message sent by resolvers to outside sub-systems once an
|
// ResolutionMsg is a message sent by resolvers to outside sub-systems once an
|
||||||
@ -77,9 +78,14 @@ type ChainArbitratorConfig struct {
|
|||||||
// ChannelArbitrator decides that it needs to go to chain in order to
|
// ChannelArbitrator decides that it needs to go to chain in order to
|
||||||
// resolve contracts.
|
// resolve contracts.
|
||||||
//
|
//
|
||||||
// TODO(Roasbeef): rename, routing based
|
// TODO(roasbeef): rename, routing based
|
||||||
MarkLinkInactive func(wire.OutPoint) error
|
MarkLinkInactive func(wire.OutPoint) error
|
||||||
|
|
||||||
|
// IsOurAddress is a function that returns true if the passed address
|
||||||
|
// is known to the underlying wallet. Otherwise, false should be
|
||||||
|
// returned.
|
||||||
|
IsOurAddress func(btcutil.Address) bool
|
||||||
|
|
||||||
// IncubateOutput sends either a incoming HTLC, an outgoing HTLC, or
|
// IncubateOutput sends either a incoming HTLC, an outgoing HTLC, or
|
||||||
// both to the utxo nursery. Once this function returns, the nursery
|
// both to the utxo nursery. Once this function returns, the nursery
|
||||||
// should have safely persisted the outputs to disk, and should start
|
// should have safely persisted the outputs to disk, and should start
|
||||||
@ -323,6 +329,9 @@ func (c *ChainArbitrator) Start() error {
|
|||||||
// to ensure that we detect any relevant on chain events.
|
// to ensure that we detect any relevant on chain events.
|
||||||
chainWatcher, err := newChainWatcher(
|
chainWatcher, err := newChainWatcher(
|
||||||
channel, c.cfg.Notifier, c.cfg.PreimageDB, c.cfg.Signer,
|
channel, c.cfg.Notifier, c.cfg.PreimageDB, c.cfg.Signer,
|
||||||
|
c.cfg.IsOurAddress, func() error {
|
||||||
|
return c.resolveContract(channel.FundingOutpoint, nil)
|
||||||
|
},
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -572,6 +581,9 @@ func (c *ChainArbitrator) WatchNewChannel(newChan *channeldb.OpenChannel) error
|
|||||||
// that we detect any relevant on chain events.
|
// that we detect any relevant on chain events.
|
||||||
chainWatcher, err := newChainWatcher(
|
chainWatcher, err := newChainWatcher(
|
||||||
newChan, c.cfg.Notifier, c.cfg.PreimageDB, c.cfg.Signer,
|
newChan, c.cfg.Notifier, c.cfg.PreimageDB, c.cfg.Signer,
|
||||||
|
c.cfg.IsOurAddress, func() error {
|
||||||
|
return c.resolveContract(chanPoint, nil)
|
||||||
|
},
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -400,6 +400,10 @@ func newServer(listenAddrs []string, chanDB *channeldb.DB, cc *chainControl,
|
|||||||
chanID := lnwire.NewChanIDFromOutPoint(&chanPoint)
|
chanID := lnwire.NewChanIDFromOutPoint(&chanPoint)
|
||||||
return s.htlcSwitch.RemoveLink(chanID)
|
return s.htlcSwitch.RemoveLink(chanID)
|
||||||
},
|
},
|
||||||
|
IsOurAddress: func(addr btcutil.Address) bool {
|
||||||
|
_, err := cc.wallet.GetPrivKey(addr)
|
||||||
|
return err == nil
|
||||||
|
},
|
||||||
}, chanDB)
|
}, chanDB)
|
||||||
|
|
||||||
s.breachArbiter = newBreachArbiter(&BreachConfig{
|
s.breachArbiter = newBreachArbiter(&BreachConfig{
|
||||||
|
Loading…
Reference in New Issue
Block a user