From db88c821695ccae7c4f5a2a4c85fe813b17eb213 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Sat, 10 Mar 2018 17:28:11 -0800 Subject: [PATCH] channeldb/channel: add serialization for single funder funding txn --- channeldb/channel.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/channeldb/channel.go b/channeldb/channel.go index 5b8b4b22..6d58f8ab 100644 --- a/channeldb/channel.go +++ b/channeldb/channel.go @@ -403,6 +403,14 @@ type OpenChannel struct { // failures and reforward HTLCs that were not fully processed. Packager FwdPackager + // FundingTxn is the transaction containing this channel's funding + // outpoint. Upon restarts, this txn will be rebroadcast if the channel + // is found to be pending. + // + // NOTE: This value will only be populated for single-funder channels + // for which we are the initiator. + FundingTxn *wire.MsgTx + // TODO(roasbeef): eww Db *DB @@ -1797,6 +1805,13 @@ func putChanInfo(chanBucket *bolt.Bucket, channel *OpenChannel) error { return err } + // For single funder channels that we initiated, write the funding txn. + if channel.ChanType == SingleFunder && channel.IsInitiator { + if err := writeElement(&w, channel.FundingTxn); err != nil { + return err + } + } + writeChanConfig := func(b io.Writer, c *ChannelConfig) error { return writeElements(b, c.DustLimit, c.MaxPendingAmount, c.ChanReserve, c.MinHTLC, @@ -1898,6 +1913,13 @@ func fetchChanInfo(chanBucket *bolt.Bucket, channel *OpenChannel) error { return err } + // For single funder channels that we initiated, read the funding txn. + if channel.ChanType == SingleFunder && channel.IsInitiator { + if err := readElement(r, &channel.FundingTxn); err != nil { + return err + } + } + readChanConfig := func(b io.Reader, c *ChannelConfig) error { return readElements(b, &c.DustLimit, &c.MaxPendingAmount, &c.ChanReserve,