watchtower/lookout/punisher: adds Punisher craft+bcast justice txn
This commit is contained in:
parent
0632520f40
commit
3ab34f8426
58
watchtower/lookout/punisher.go
Normal file
58
watchtower/lookout/punisher.go
Normal file
@ -0,0 +1,58 @@
|
||||
package lookout
|
||||
|
||||
import (
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/lightningnetwork/lnd/lnwallet"
|
||||
)
|
||||
|
||||
// PunisherConfig houses the resources required by the Punisher.
|
||||
type PunisherConfig struct {
|
||||
// PublishTx provides the ability to send a signed transaction to the
|
||||
// network.
|
||||
PublishTx func(*wire.MsgTx) error
|
||||
|
||||
// TODO(conner) add DB tracking and spend ntfn registration to see if
|
||||
// ours confirmed or not
|
||||
}
|
||||
|
||||
// BreachPunisher handles the responsibility of constructing and broadcasting
|
||||
// justice transactions. Justice transactions are constructed from previously
|
||||
// accepted state updates uploaded by the watchtower's clients.
|
||||
type BreachPunisher struct {
|
||||
cfg *PunisherConfig
|
||||
}
|
||||
|
||||
// NewBreachPunisher constructs a new BreachPunisher given a PunisherConfig.
|
||||
func NewBreachPunisher(cfg *PunisherConfig) *BreachPunisher {
|
||||
return &BreachPunisher{
|
||||
cfg: cfg,
|
||||
}
|
||||
}
|
||||
|
||||
// Punish constructs a justice transaction given a JusticeDescriptor and
|
||||
// publishes is it to the network.
|
||||
func (p *BreachPunisher) Punish(desc *JusticeDescriptor, quit <-chan struct{}) error {
|
||||
justiceTxn, err := desc.CreateJusticeTxn()
|
||||
if err != nil {
|
||||
log.Errorf("Unable to create justice txn for "+
|
||||
"client=%s with breach-txid=%x: %v",
|
||||
desc.SessionInfo.ID, desc.BreachedCommitTx.TxHash(), err)
|
||||
return err
|
||||
}
|
||||
|
||||
log.Infof("Publishing justice transaction txid=%x for client=%s",
|
||||
justiceTxn.TxHash(), desc.SessionInfo.ID)
|
||||
|
||||
err = p.cfg.PublishTx(justiceTxn)
|
||||
if err != nil && err != lnwallet.ErrDoubleSpend {
|
||||
log.Errorf("Unable to publish justice txn for client=%s",
|
||||
"with breach-txid=%x: %v",
|
||||
desc.SessionInfo.ID, desc.BreachedCommitTx.TxHash(), err)
|
||||
return err
|
||||
}
|
||||
|
||||
// TODO(conner): register for spend and remove from db after
|
||||
// confirmation
|
||||
|
||||
return nil
|
||||
}
|
Loading…
Reference in New Issue
Block a user