88 "github.com/btcsuite/btcd/btcec/v2"
99 "github.com/btcsuite/btcd/chaincfg/chainhash"
1010 "github.com/btcsuite/btcd/wire"
11+ "github.com/davecgh/go-spew/spew"
1112 "github.com/lightningnetwork/lnd/chainntnfs"
1213 "github.com/lightningnetwork/lnd/fn"
1314 "github.com/lightningnetwork/lnd/lnwire"
@@ -214,6 +215,12 @@ func (s *StateMachine[Event, Env]) Stop() {
214215//
215216// TODO(roasbeef): bool if processed?
216217func (s * StateMachine [Event , Env ]) SendEvent (event Event ) {
218+ log .Debugf ("FSM(%v): sending event: %v" , s .cfg .Env .Name (),
219+ newLogClosure (func () string {
220+ return spew .Sdump (event )
221+ }),
222+ )
223+
217224 select {
218225 case s .events <- event :
219226 case <- s .quit :
@@ -246,6 +253,12 @@ func (s *StateMachine[Event, Env]) SendMessage(msg lnwire.Message) bool {
246253 return false
247254 }
248255
256+ log .Debugf ("FSM(%v): sending msg: %v" , s .cfg .Env .Name (),
257+ newLogClosure (func () string {
258+ return spew .Sdump (msg )
259+ }),
260+ )
261+
249262 // Otherwise, try to map the message using the default message mapper.
250263 // If we can't extract an event, then we'll return false to indicate
251264 // that the message wasn't processed.
@@ -305,12 +318,22 @@ func (s *StateMachine[Event, Env]) RemoveStateSub(sub StateSubscriber[
305318// executeDaemonEvent executes a daemon event, which is a special type of event
306319// that can be emitted as part of the state transition function of the state
307320// machine. An error is returned if the type of event is unknown.
308- func (s * StateMachine [Event , Env ]) executeDaemonEvent (event DaemonEvent ) error {
321+ func (s * StateMachine [Event , Env ]) executeDaemonEvent ( //nolint:funlen
322+ event DaemonEvent ) error {
323+
309324 switch daemonEvent := event .(type ) {
310325 // This is a send message event, so we'll send the event, and also mind
311326 // any preconditions as well as post-send events.
312327 case * SendMsgEvent [Event ]:
313328 sendAndCleanUp := func () error {
329+ log .Debugf ("FSM(%v): sending message to target(%v): " +
330+ "%v" , s .cfg .Env .Name (),
331+ daemonEvent .TargetPeer ,
332+ newLogClosure (func () string {
333+ return spew .Sdump (daemonEvent .Msgs )
334+ }),
335+ )
336+
314337 err := s .cfg .Daemon .SendMessages (
315338 daemonEvent .TargetPeer , daemonEvent .Msgs ,
316339 )
@@ -327,6 +350,14 @@ func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
327350 go func () {
328351 defer s .wg .Done ()
329352
353+ log .Debugf ("FSM(%v): sending " +
354+ "post-send event: %v" ,
355+ s .cfg .Env .Name (),
356+ newLogClosure (func () string {
357+ return spew .Sdump (event )
358+ }),
359+ )
360+
330361 s .SendEvent (event )
331362 }()
332363 })
@@ -350,6 +381,9 @@ func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
350381 predicateTicker := time .NewTicker (pollInterval )
351382 defer predicateTicker .Stop ()
352383
384+ log .Infof ("FSM(%v): waiting for send predicate to " +
385+ "be true" , s .cfg .Env .Name ())
386+
353387 for {
354388 select {
355389 case <- predicateTicker .C :
@@ -361,6 +395,10 @@ func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
361395 )
362396
363397 if canSend {
398+ log .Infof ("FSM(%v): send " +
399+ "active predicate" ,
400+ s .cfg .Env .Name ())
401+
364402 err := sendAndCleanUp ()
365403 if err != nil {
366404 //nolint:lll
@@ -381,6 +419,9 @@ func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
381419 // If this is a disable channel event, then we'll disable the channel.
382420 // This is usually done for things like co-op closes.
383421 case * DisableChannelEvent :
422+ log .Debugf ("FSM(%v): disabling channel: %v" , s .cfg .Env .Name (),
423+ daemonEvent .ChanPoint )
424+
384425 err := s .cfg .Daemon .DisableChannel (daemonEvent .ChanPoint )
385426 if err != nil {
386427 return fmt .Errorf ("unable to disable channel: %w" , err )
@@ -391,6 +432,9 @@ func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
391432 // If this is a broadcast transaction event, then we'll broadcast with
392433 // the label attached.
393434 case * BroadcastTxn :
435+ log .Debugf ("FSM(%v): broadcasting txn, txid=%v" ,
436+ s .cfg .Env .Name (), daemonEvent .Tx .TxHash ())
437+
394438 err := s .cfg .Daemon .BroadcastTransaction (
395439 daemonEvent .Tx , daemonEvent .Label ,
396440 )
@@ -403,6 +447,9 @@ func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
403447 // The state machine has requested a new event to be sent once a
404448 // transaction spending a specified outpoint has confirmed.
405449 case * RegisterSpend [Event ]:
450+ log .Debugf ("FSM(%v): registering spend: %v" , s .cfg .Env .Name (),
451+ daemonEvent .OutPoint )
452+
406453 spendEvent , err := s .cfg .Daemon .RegisterSpendNtfn (
407454 & daemonEvent .OutPoint , daemonEvent .PkScript ,
408455 daemonEvent .HeightHint ,
@@ -438,6 +485,9 @@ func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
438485 // The state machine has requested a new event to be sent once a
439486 // specified txid+pkScript pair has confirmed.
440487 case * RegisterConf [Event ]:
488+ log .Debugf ("FSM(%v): registering conf: %v" , s .cfg .Env .Name (),
489+ daemonEvent .Txid )
490+
441491 numConfs := daemonEvent .NumConfs .UnwrapOr (1 )
442492 confEvent , err := s .cfg .Daemon .RegisterConfirmationsNtfn (
443493 & daemonEvent .Txid , daemonEvent .PkScript ,
@@ -482,6 +532,12 @@ func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
482532func (s * StateMachine [Event , Env ]) applyEvents (currentState State [Event , Env ],
483533 newEvent Event ) (State [Event , Env ], error ) {
484534
535+ log .Debugf ("FSM(%v): applying new event" , s .cfg .Env .Name (),
536+ newLogClosure (func () string {
537+ return spew .Sdump (newEvent )
538+ }),
539+ )
540+
485541 eventQueue := fn .NewQueue (newEvent )
486542
487543 // Given the next event to handle, we'll process the event, then add
@@ -492,6 +548,13 @@ func (s *StateMachine[Event, Env]) applyEvents(currentState State[Event, Env],
492548 //nolint:lll
493549 for nextEvent := eventQueue .Dequeue (); nextEvent .IsSome (); nextEvent = eventQueue .Dequeue () {
494550 err := fn .MapOptionZ (nextEvent , func (event Event ) error {
551+ log .Debugf ("FSM(%v): processing event: %v" ,
552+ s .cfg .Env .Name (),
553+ newLogClosure (func () string {
554+ return spew .Sdump (event )
555+ }),
556+ )
557+
495558 // Apply the state transition function of the current
496559 // state given this new event and our existing env.
497560 transition , err := currentState .ProcessEvent (
@@ -509,6 +572,10 @@ func (s *StateMachine[Event, Env]) applyEvents(currentState State[Event, Env],
509572 //
510573 //nolint:lll
511574 err := fn .MapOptionZ (events .ExternalEvents , func (dEvents DaemonEventSet ) error {
575+ log .Debugf ("FSM(%v): processing " +
576+ "daemon %v daemon events" ,
577+ s .cfg .Env .Name (), len (dEvents ))
578+
512579 for _ , dEvent := range dEvents {
513580 err := s .executeDaemonEvent (
514581 dEvent ,
@@ -529,6 +596,16 @@ func (s *StateMachine[Event, Env]) applyEvents(currentState State[Event, Env],
529596 //
530597 //nolint:lll
531598 events .InternalEvent .WhenSome (func (inEvent Event ) {
599+ log .Debugf ("FSM(%v): adding new " +
600+ "internal event to queue: %v" ,
601+ s .cfg .Env .Name (),
602+ newLogClosure (func () string {
603+ return spew .Sdump (
604+ inEvent ,
605+ )
606+ }),
607+ )
608+
532609 eventQueue .Enqueue (inEvent )
533610 })
534611
@@ -564,6 +641,8 @@ func (s *StateMachine[Event, Env]) applyEvents(currentState State[Event, Env],
564641func (s * StateMachine [Event , Env ]) driveMachine () {
565642 defer s .wg .Done ()
566643
644+ log .Debugf ("FSM(%v): starting state machine" , s .cfg .Env .Name ())
645+
567646 currentState := s .cfg .InitialState
568647
569648 // Before we start, if we have an init daemon event specified, then
0 commit comments