From cd54625c2dd7da7b23e5541c41cbc583d891f7d2 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Wed, 19 Dec 2018 21:50:44 -0800 Subject: [PATCH 1/2] lnwallet/channel: add keyring + remote csv to breach info --- lnwallet/channel.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lnwallet/channel.go b/lnwallet/channel.go index 6175b36ea..4e975c447 100644 --- a/lnwallet/channel.go +++ b/lnwallet/channel.go @@ -1891,6 +1891,15 @@ type BreachRetribution struct { // HtlcRetributions is a slice of HTLC retributions for each output // active HTLC output within the breached commitment transaction. HtlcRetributions []HtlcRetribution + + // KeyRing contains the derived public keys used to construct the + // breaching commitment transaction. This allows downstream clients to + // have access to the public keys used in the scripts. + KeyRing *CommitmentKeyRing + + // RemoteDelay specifies the CSV delay applied to to-local scripts on + // the breaching commitment transaction. + RemoteDelay uint32 } // NewBreachRetribution creates a new fully populated BreachRetribution for the @@ -2099,6 +2108,8 @@ func NewBreachRetribution(chanState *channeldb.OpenChannel, stateNum uint64, RemoteOutpoint: remoteOutpoint, RemoteOutputSignDesc: remoteSignDesc, HtlcRetributions: htlcRetributions, + KeyRing: keyRing, + RemoteDelay: remoteDelay, }, nil } From 088fb33718c51a91632a86becd658163a44db9c8 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Wed, 19 Dec 2018 21:50:45 -0800 Subject: [PATCH 2/2] contractcourt: nil keyring curves on breach info --- contractcourt/chain_watcher.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/contractcourt/chain_watcher.go b/contractcourt/chain_watcher.go index 1bc1ee187..7503c591d 100644 --- a/contractcourt/chain_watcher.go +++ b/contractcourt/chain_watcher.go @@ -747,13 +747,27 @@ func (c *chainWatcher) dispatchContractBreach(spendEvent *chainntnfs.SpendDetail retribution.RemoteOutputSignDesc.DoubleTweak != nil { retribution.RemoteOutputSignDesc.DoubleTweak.Curve = nil } + if retribution.RemoteOutputSignDesc != nil && + retribution.RemoteOutputSignDesc.KeyDesc.PubKey != nil { + retribution.RemoteOutputSignDesc.KeyDesc.PubKey.Curve = nil + } if retribution.LocalOutputSignDesc != nil && retribution.LocalOutputSignDesc.DoubleTweak != nil { retribution.LocalOutputSignDesc.DoubleTweak.Curve = nil } + if retribution.LocalOutputSignDesc != nil && + retribution.LocalOutputSignDesc.KeyDesc.PubKey != nil { + retribution.LocalOutputSignDesc.KeyDesc.PubKey.Curve = nil + } log.Debugf("Punishment breach retribution created: %v", newLogClosure(func() string { + retribution.KeyRing.CommitPoint.Curve = nil + retribution.KeyRing.LocalHtlcKey = nil + retribution.KeyRing.RemoteHtlcKey = nil + retribution.KeyRing.DelayKey = nil + retribution.KeyRing.NoDelayKey = nil + retribution.KeyRing.RevocationKey = nil return spew.Sdump(retribution) }))