75370ce6b4
Add label parameter to PublishTransaction in WalletController interface. A labels package is added to store generic labels that are used for the different types of transactions that are published by lnd. To keep commit size down, the two endpoints that require a label parameter be passed down have a todo added, which will be removed in subsequent commits.
58 lines
1.7 KiB
Go
58 lines
1.7 KiB
Go
package lookout
|
|
|
|
import (
|
|
"github.com/btcsuite/btcd/wire"
|
|
)
|
|
|
|
// 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, string) 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=%s: %v",
|
|
desc.SessionInfo.ID, desc.BreachedCommitTx.TxHash(), err)
|
|
return err
|
|
}
|
|
|
|
log.Infof("Publishing justice transaction for client=%s with txid=%s",
|
|
desc.SessionInfo.ID, justiceTxn.TxHash())
|
|
|
|
err = p.cfg.PublishTx(justiceTxn, "")
|
|
if err != nil {
|
|
log.Errorf("Unable to publish justice txn for client=%s"+
|
|
"with breach-txid=%s: %v",
|
|
desc.SessionInfo.ID, desc.BreachedCommitTx.TxHash(), err)
|
|
return err
|
|
}
|
|
|
|
// TODO(conner): register for spend and remove from db after
|
|
// confirmation
|
|
|
|
return nil
|
|
}
|