From 9474fe1abe2b2d0e5a86e1cdfb6eb72b3b5e159b Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Wed, 17 Jul 2024 10:43:06 -0300 Subject: [PATCH] dump: include close tx, commit sig, commit height That will add the new data to the output of chantools dumpbackup. --- dump/dump.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/dump/dump.go b/dump/dump.go index 24e512f..e5c4988 100644 --- a/dump/dump.go +++ b/dump/dump.go @@ -45,6 +45,16 @@ type BackupSingle struct { LocalChanCfg ChannelConfig RemoteChanCfg ChannelConfig ShaChainRootDesc KeyDescriptor + CloseTxInputs *CloseTxInputs +} + +// CloseTxInputs is a struct that contains data needed to produce a force close +// transaction from a channel backup as a last resort recovery method. +type CloseTxInputs struct { + CommitTx string + CommitSig string + CommitHeight uint64 + TapscriptRoot string } // OpenChannel is the information we want to dump from an open channel in lnd's @@ -406,7 +416,40 @@ func BackupDump(multi *chanbackup.Multi, params, single.ShaChainRootDesc, ), } + + single.CloseTxInputs.WhenSome( + func(inputs chanbackup.CloseTxInputs) { + // Serialize unsigned transaction. + var buf bytes.Buffer + err := inputs.CommitTx.Serialize(&buf) + if err != nil { + buf.WriteString("error serializing " + + "commit tx: " + err.Error()) + } + tx := buf.Bytes() + + // Serialize TapscriptRoot if present. + var tapscriptRoot string + inputs.TapscriptRoot.WhenSome( + func(tr chainhash.Hash) { + tapscriptRoot = tr.String() + }, + ) + + // Put all CloseTxInputs to dump in human + // readable form. + dumpSingles[idx].CloseTxInputs = &CloseTxInputs{ + CommitTx: hex.EncodeToString(tx), + CommitSig: hex.EncodeToString( + inputs.CommitSig, + ), + CommitHeight: inputs.CommitHeight, + TapscriptRoot: tapscriptRoot, + } + }, + ) } + return dumpSingles }