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"
@@ -211,6 +212,12 @@ func (s *StateMachine[Event, Env]) Stop() {
211212//
212213// TODO(roasbeef): bool if processed?
213214func (s * StateMachine [Event , Env ]) SendEvent (event Event ) {
215+ log .Debugf ("FSM(%v): sending event: %v" , s .cfg .Env .Name (),
216+ newLogClosure (func () string {
217+ return spew .Sdump (event )
218+ }),
219+ )
220+
214221 select {
215222 case s .events <- event :
216223 case <- s .quit :
@@ -243,6 +250,12 @@ func (s *StateMachine[Event, Env]) SendMessage(msg lnwire.Message) bool {
243250 return false
244251 }
245252
253+ log .Debugf ("FSM(%v): sending msg: %v" , s .cfg .Env .Name (),
254+ newLogClosure (func () string {
255+ return spew .Sdump (msg )
256+ }),
257+ )
258+
246259 // Otherwise, try to map the message using the default message mapper.
247260 // If we can't extract an event, then we'll return false to indicate
248261 // that the message wasn't processed.
@@ -302,12 +315,22 @@ func (s *StateMachine[Event, Env]) RemoveStateSub(sub StateSubscriber[
302315// executeDaemonEvent executes a daemon event, which is a special type of event
303316// that can be emitted as part of the state transition function of the state
304317// machine. An error is returned if the type of event is unknown.
305- func (s * StateMachine [Event , Env ]) executeDaemonEvent (event DaemonEvent ) error {
318+ func (s * StateMachine [Event , Env ]) executeDaemonEvent ( //nolint:funlen
319+ event DaemonEvent ) error {
320+
306321 switch daemonEvent := event .(type ) {
307322 // This is a send message event, so we'll send the event, and also mind
308323 // any preconditions as well as post-send events.
309324 case * SendMsgEvent [Event ]:
310325 sendAndCleanUp := func () error {
326+ log .Debugf ("FSM(%v): sending message to target(%v): " +
327+ "%v" , s .cfg .Env .Name (),
328+ daemonEvent .TargetPeer ,
329+ newLogClosure (func () string {
330+ return spew .Sdump (daemonEvent .Msgs )
331+ }),
332+ )
333+
311334 err := s .cfg .Daemon .SendMessages (
312335 daemonEvent .TargetPeer , daemonEvent .Msgs ,
313336 )
@@ -324,6 +347,14 @@ func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
324347 go func () {
325348 defer s .wg .Done ()
326349
350+ log .Debugf ("FSM(%v): sending " +
351+ "post-send event: %v" ,
352+ s .cfg .Env .Name (),
353+ newLogClosure (func () string {
354+ return spew .Sdump (event )
355+ }),
356+ )
357+
327358 s .SendEvent (event )
328359 }()
329360 })
@@ -347,6 +378,9 @@ func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
347378 predicateTicker := time .NewTicker (pollInterval )
348379 defer predicateTicker .Stop ()
349380
381+ log .Infof ("FSM(%v): waiting for send predicate to " +
382+ "be true" , s .cfg .Env .Name ())
383+
350384 for {
351385 select {
352386 case <- predicateTicker .C :
@@ -358,6 +392,10 @@ func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
358392 )
359393
360394 if canSend {
395+ log .Infof ("FSM(%v): send " +
396+ "active predicate" ,
397+ s .cfg .Env .Name ())
398+
361399 err := sendAndCleanUp ()
362400 if err != nil {
363401 //nolint:lll
@@ -378,6 +416,9 @@ func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
378416 // If this is a broadcast transaction event, then we'll broadcast with
379417 // the label attached.
380418 case * BroadcastTxn :
419+ log .Debugf ("FSM(%v): broadcasting txn, txid=%v" ,
420+ s .cfg .Env .Name (), daemonEvent .Tx .TxHash ())
421+
381422 err := s .cfg .Daemon .BroadcastTransaction (
382423 daemonEvent .Tx , daemonEvent .Label ,
383424 )
@@ -390,6 +431,9 @@ func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
390431 // The state machine has requested a new event to be sent once a
391432 // transaction spending a specified outpoint has confirmed.
392433 case * RegisterSpend [Event ]:
434+ log .Debugf ("FSM(%v): registering spend: %v" , s .cfg .Env .Name (),
435+ daemonEvent .OutPoint )
436+
393437 spendEvent , err := s .cfg .Daemon .RegisterSpendNtfn (
394438 & daemonEvent .OutPoint , daemonEvent .PkScript ,
395439 daemonEvent .HeightHint ,
@@ -425,6 +469,9 @@ func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
425469 // The state machine has requested a new event to be sent once a
426470 // specified txid+pkScript pair has confirmed.
427471 case * RegisterConf [Event ]:
472+ log .Debugf ("FSM(%v): registering conf: %v" , s .cfg .Env .Name (),
473+ daemonEvent .Txid )
474+
428475 numConfs := daemonEvent .NumConfs .UnwrapOr (1 )
429476 confEvent , err := s .cfg .Daemon .RegisterConfirmationsNtfn (
430477 & daemonEvent .Txid , daemonEvent .PkScript ,
@@ -469,6 +516,12 @@ func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
469516func (s * StateMachine [Event , Env ]) applyEvents (currentState State [Event , Env ],
470517 newEvent Event ) (State [Event , Env ], error ) {
471518
519+ log .Debugf ("FSM(%v): applying new event" , s .cfg .Env .Name (),
520+ newLogClosure (func () string {
521+ return spew .Sdump (newEvent )
522+ }),
523+ )
524+
472525 eventQueue := fn .NewQueue (newEvent )
473526
474527 // Given the next event to handle, we'll process the event, then add
@@ -479,6 +532,13 @@ func (s *StateMachine[Event, Env]) applyEvents(currentState State[Event, Env],
479532 //nolint:lll
480533 for nextEvent := eventQueue .Dequeue (); nextEvent .IsSome (); nextEvent = eventQueue .Dequeue () {
481534 err := fn .MapOptionZ (nextEvent , func (event Event ) error {
535+ log .Debugf ("FSM(%v): processing event: %v" ,
536+ s .cfg .Env .Name (),
537+ newLogClosure (func () string {
538+ return spew .Sdump (event )
539+ }),
540+ )
541+
482542 // Apply the state transition function of the current
483543 // state given this new event and our existing env.
484544 transition , err := currentState .ProcessEvent (
@@ -496,6 +556,10 @@ func (s *StateMachine[Event, Env]) applyEvents(currentState State[Event, Env],
496556 //
497557 //nolint:lll
498558 err := fn .MapOptionZ (events .ExternalEvents , func (dEvents DaemonEventSet ) error {
559+ log .Debugf ("FSM(%v): processing " +
560+ "daemon %v daemon events" ,
561+ s .cfg .Env .Name (), len (dEvents ))
562+
499563 for _ , dEvent := range dEvents {
500564 err := s .executeDaemonEvent (
501565 dEvent ,
@@ -516,6 +580,16 @@ func (s *StateMachine[Event, Env]) applyEvents(currentState State[Event, Env],
516580 //
517581 //nolint:lll
518582 events .InternalEvent .WhenSome (func (inEvent Event ) {
583+ log .Debugf ("FSM(%v): adding new " +
584+ "internal event to queue: %v" ,
585+ s .cfg .Env .Name (),
586+ newLogClosure (func () string {
587+ return spew .Sdump (
588+ inEvent ,
589+ )
590+ }),
591+ )
592+
519593 eventQueue .Enqueue (inEvent )
520594 })
521595
@@ -551,6 +625,8 @@ func (s *StateMachine[Event, Env]) applyEvents(currentState State[Event, Env],
551625func (s * StateMachine [Event , Env ]) driveMachine () {
552626 defer s .wg .Done ()
553627
628+ log .Debugf ("FSM(%v): starting state machine" , s .cfg .Env .Name ())
629+
554630 currentState := s .cfg .InitialState
555631
556632 // Before we start, if we have an init daemon event specified, then
0 commit comments