multi: make MarkCommitmentBroadcasted take closeTx
This commit is contained in:
6 files changed
+29
-10
No files matched your search
+19
-3
@@ -59,6 +59,10 @@ var (
|
||||
// remote peer during a channel sync in case we have lost channel state.
|
||||
dataLossCommitPointKey = []byte("data-loss-commit-point-key")
|
||||
|
||||
// closingTxKey points to a the closing tx that we broadcasted when
|
||||
// moving the channel to state CommitBroadcasted.
|
||||
closingTxKey = []byte("closing-tx-key")
|
||||
|
||||
// commitDiffKey stores the current pending commitment state we've
|
||||
// extended to the remote party (if any). Each time we propose a new
|
||||
// state, we store the information necessary to reconstruct this state
|
||||
@@ -878,12 +882,24 @@ func (c *OpenChannel) isBorked(chanBucket *bbolt.Bucket) (bool, error) {
|
||||
|
||||
// MarkCommitmentBroadcasted marks the channel as a commitment transaction has
|
||||
// been broadcast, either our own or the remote, and we should watch the chain
|
||||
// for it to confirm before taking any further action.
|
||||
func (c *OpenChannel) MarkCommitmentBroadcasted() error {
|
||||
// for it to confirm before taking any further action. It takes as argument the
|
||||
// closing tx _we believe_ will appear in the chain. This is only used to
|
||||
// republish this tx at startup to ensure propagation, and we should still
|
||||
// handle the case where a different tx actually hits the chain.
|
||||
func (c *OpenChannel) MarkCommitmentBroadcasted(closeTx *wire.MsgTx) error {
|
||||
c.Lock()
|
||||
defer c.Unlock()
|
||||
|
||||
return c.putChanStatus(ChanStatusCommitBroadcasted)
|
||||
var b bytes.Buffer
|
||||
if err := WriteElement(&b, closeTx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
putClosingTx := func(chanBucket *bbolt.Bucket) error {
|
||||
return chanBucket.Put(closingTxKey, b.Bytes())
|
||||
}
|
||||
|
||||
return c.putChanStatus(ChanStatusCommitBroadcasted, putClosingTx)
|
||||
}
|
||||
|
||||
// putChanStatus appends the given status to the channel. fs is an optional
|
||||
|
||||
@@ -891,7 +891,8 @@ func TestFetchWaitingCloseChannels(t *testing.T) {
|
||||
// This would happen in the event of a force close and should make the
|
||||
// channels enter a state of waiting close.
|
||||
for _, channel := range channels {
|
||||
if err := channel.MarkCommitmentBroadcasted(); err != nil {
|
||||
closeTx := &wire.MsgTx{}
|
||||
if err := channel.MarkCommitmentBroadcasted(closeTx); err != nil {
|
||||
t.Fatalf("unable to mark commitment broadcast: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user