Skip to content

Instantly share code, notes, and snippets.

@arik-so
Last active August 30, 2023 18:17
Show Gist options
  • Save arik-so/fa50dd94993241d7c1185c7789abf02e to your computer and use it in GitHub Desktop.
Save arik-so/fa50dd94993241d7c1185c7789abf02e to your computer and use it in GitHub Desktop.

HTLC Dance

Scenario A

sequenceDiagram
Alice->>Bob: update_add_htlc(A1)
Note right of Bob: Finalized: <><br/>Staging: A1
Alice->>Bob: commitment_signed(A1)
Note right of Bob: Finalized: <><br/>Finalized: A1
Bob->>Alice: revoke_and_ack(A1)
Note right of Bob: Finalized: A1
Note left of Alice: Finalized: <><br/>Staging: A1
Bob->>Alice: commitment_signed(A1)
Note left of Alice: Finalized: <><br/>Finalized: A1
Alice->>Bob: revoke_and_ack
Note left of Alice: Finalized: A1
Loading

Scenario B

sequenceDiagram
Note left of Alice: Finalized: A1, A2
Note right of Bob: Finalized: A1, A2
Bob->>Alice: update_fulfill_htlc(A2)
Note left of Alice: Finalized: A1, A2<br/>Staging: A1
Bob->>Alice: commitment_signed(-A2)
Note left of Alice: Finalized: A1, A2<br/>Finalized: A1
Alice->>Bob: revoke_and_ack(-A2)
Note left of Alice: Finalized: A1
Note right of Bob: Finalized: A1, A2<br/>Staging: A1
Alice->>Bob: commitment_signed(-A2)
Note right of Bob: Finalized: A1, A2<br/>Finalized: A1
Bob->>Alice: revoke_and_ack
Note right of Bob: Finalized: A1
Loading

Scenario C

sequenceDiagram
Alice->>Bob: update_add_htlc(A1)
Note right of Bob: Finalized: <><br/>Staging: A1
Alice->>Bob: update_add_htlc(A2)
Note right of Bob: Finalized: <><br/>Staging: A1, A2
Bob->>Alice: update_add_htlc(B1)
Note left of Alice: Finalized: <><br/>Staging: B1
Alice->>Bob: commitment_signed(A1, A2)
Note right of Bob: Finalized: <><br/>Finalized: A1, A2
Bob->>Alice: revoke_and_ack(A1, A2)
Note right of Bob: Finalized: A1, A2
Note left of Alice: Finalized: <><br/>Staging: A1, A2, B1
Bob->>Alice: commitment_signed(A1, A2, B1)
Note left of Alice: Finalized: <><br/>Finalized: A1, A2, B1
Alice->>Bob: revoke_and_ack(B1)
Note left of Alice: Finalized: A1, A2, B1
Note right of Bob: Finalized: A1, A2<br/>Staging: B1
Alice->>Bob: commitment_signed(B1)
Note right of Bob: Finalized: A2, A2<br/>Finalized: A1, A2, B1
Bob->>Alice: revoke_and_ack
Note right of Bob: Finalized: A1, A2, B1
Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment