From fdcacf5e5e83724e10f4b42200c5fe04c6819d58 Mon Sep 17 00:00:00 2001 From: sputn1ck Date: Wed, 25 Oct 2023 23:32:40 +0200 Subject: [PATCH] fsm: add instanout fsm parsing --- fsm/example_fsm.md | 4 +-- fsm/stateparser/stateparser.go | 8 +++++ instantout/fsm.md | 36 +++++++++++++++++++++++ instantout/reservation/reservation_fsm.md | 2 +- scripts/fsm-generate.sh | 3 +- 5 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 instantout/fsm.md diff --git a/fsm/example_fsm.md b/fsm/example_fsm.md index 7de0644..882d340 100644 --- a/fsm/example_fsm.md +++ b/fsm/example_fsm.md @@ -2,11 +2,11 @@ stateDiagram-v2 [*] --> InitFSM: OnRequestStuff InitFSM -InitFSM --> StuffFailed: OnError InitFSM --> StuffSentOut: OnStuffSentOut +InitFSM --> StuffFailed: OnError StuffFailed StuffSentOut -StuffSentOut --> StuffFailed: OnError StuffSentOut --> StuffSuccess: OnStuffSuccess +StuffSentOut --> StuffFailed: OnError StuffSuccess ``` \ No newline at end of file diff --git a/fsm/stateparser/stateparser.go b/fsm/stateparser/stateparser.go index d065833..d706452 100644 --- a/fsm/stateparser/stateparser.go +++ b/fsm/stateparser/stateparser.go @@ -10,6 +10,7 @@ import ( "sort" "github.com/lightninglabs/loop/fsm" + "github.com/lightninglabs/loop/instantout" "github.com/lightninglabs/loop/instantout/reservation" ) @@ -49,6 +50,13 @@ func run() error { return err } + case "instantout": + instantout := &instantout.FSM{} + err = writeMermaidFile(fp, instantout.GetV1ReservationStates()) + if err != nil { + return err + } + default: fmt.Println("Missing or wrong argument: fsm must be one of:") fmt.Println("\treservations") diff --git a/instantout/fsm.md b/instantout/fsm.md new file mode 100644 index 0000000..4b90fb2 --- /dev/null +++ b/instantout/fsm.md @@ -0,0 +1,36 @@ +```mermaid +stateDiagram-v2 +[*] --> Init: OnStart +BuildHtlc +BuildHtlc --> PushPreimage: OnHtlcSigReceived +BuildHtlc --> InstantFailedOutFailed: OnError +BuildHtlc --> InstantFailedOutFailed: OnRecover +FailedHtlcSweep +FinishedSweeplessSweep +Init +Init --> SendPaymentAndPollAccepted: OnInit +Init --> InstantFailedOutFailed: OnError +Init --> InstantFailedOutFailed: OnRecover +InstantFailedOutFailed +PublishHtlc +PublishHtlc --> FailedHtlcSweep: OnError +PublishHtlc --> PublishHtlc: OnRecover +PublishHtlc --> WaitForHtlcSweepConfirmed: OnHtlcBroadcasted +PushPreimage +PushPreimage --> PushPreimage: OnRecover +PushPreimage --> WaitForSweeplessSweepConfirmed: OnSweeplessSweepPublished +PushPreimage --> InstantFailedOutFailed: OnError +PushPreimage --> PublishHtlc: OnErrorPublishHtlc +SendPaymentAndPollAccepted +SendPaymentAndPollAccepted --> BuildHtlc: OnPaymentAccepted +SendPaymentAndPollAccepted --> InstantFailedOutFailed: OnError +SendPaymentAndPollAccepted --> InstantFailedOutFailed: OnRecover +WaitForHtlcSweepConfirmed +WaitForHtlcSweepConfirmed --> FinishedHtlcPreimageSweep: OnHtlcSwept +WaitForHtlcSweepConfirmed --> WaitForHtlcSweepConfirmed: OnRecover +WaitForHtlcSweepConfirmed --> FailedHtlcSweep: OnError +WaitForSweeplessSweepConfirmed +WaitForSweeplessSweepConfirmed --> FinishedSweeplessSweep: OnSweeplessSweepConfirmed +WaitForSweeplessSweepConfirmed --> WaitForSweeplessSweepConfirmed: OnRecover +WaitForSweeplessSweepConfirmed --> PublishHtlc: OnError +``` \ No newline at end of file diff --git a/instantout/reservation/reservation_fsm.md b/instantout/reservation/reservation_fsm.md index d15c3b0..1eefb5c 100644 --- a/instantout/reservation/reservation_fsm.md +++ b/instantout/reservation/reservation_fsm.md @@ -7,9 +7,9 @@ Confirmed --> TimedOut: OnTimedOut Confirmed --> Confirmed: OnRecover Failed Init -Init --> Failed: OnError Init --> WaitForConfirmation: OnBroadcast Init --> Failed: OnRecover +Init --> Failed: OnError SpendBroadcasted SpendBroadcasted --> SpendConfirmed: OnSpendConfirmed SpendConfirmed diff --git a/scripts/fsm-generate.sh b/scripts/fsm-generate.sh index 60e6803..4ab2d74 100755 --- a/scripts/fsm-generate.sh +++ b/scripts/fsm-generate.sh @@ -1,3 +1,4 @@ #!/usr/bin/env bash go run ./fsm/stateparser/stateparser.go --out ./fsm/example_fsm.md --fsm example -go run ./fsm/stateparser/stateparser.go --out ./reservation/reservation_fsm.md --fsm reservation \ No newline at end of file +go run ./fsm/stateparser/stateparser.go --out ./reservation/reservation_fsm.md --fsm reservation +go run ./fsm/stateparser/stateparser.go --out ./instantout/fsm.md --fsm instantout \ No newline at end of file