# Protocol Additional implementation-specific documentation for the Hydra Head protocol and extensions like incremental decommits. ### Incremental Commits #### Deposit L1 first ```mermaid sequenceDiagram Alice->>+Node A: POST /commit (blueprintTx) Node A-->>Node A: [Head is open] Node A-->>-Alice: depositTx Alice ->> Alice: sign depositTx Alice ->> Chain: submit depositTx Chain ->>+ Node A: OnDepositTx utxo Node A -->> Alice: DepositDetected par Node A->>Node A: ReqInc utxo and Node A->>Node B: ReqInc utxo end Node A -->> Alice: CommitRequested par Alice isLeader Node A->>Node A: ReqSn utxo and Node A->>Node B: ReqSn utxo end Node A->>Node A: sig = sign snapshot incl. inputs(commitTx) par broadcast Node A->>Node A: AckSn sig and Node A->>Node B: AckSn sig end Node B->>Node A: AckSn sig Node A -->> Alice: SnapshotConfirmed Note over Node A: As decrement Node A -->> Alice: CommitApproved Node A ->> Chain: IncrementTx snapshot sig Chain ->> Node A: OnIncrementTx Node A -->> Alice: CommitFinalized ``` #### Interactive L2 first ```mermaid sequenceDiagram Note over Alice: Alice shows a tx spending on L1 of what she wants to commit to L2 Alice->>+Node A: POST /commit (commitTx) Note over Node A: TODO input validation? Note over Node A: get approval through a signed snapshot par Node A->>Node A: ReqInc commitTx and Node A->>Node B: ReqInc commitTx end Node A -->> Alice: CommitRequested par Alice isLeader Node A->>Node A: ReqSn commitTx and Node A->>Node B: ReqSn commitTx end Node A->>Node A: sig = sign snapshot incl. inputs(commitTx) par broadcast Node A->>Node A: AckSn sig and Node A->>Node B: AckSn sig end Node B->>Node A: AckSn sig Node A ->>Node A: construct incrementTx using multi-signed snapshot and commitTx (blueprint) Node A-->>-Alice: incrementTx Alice ->> Alice: sign incrementTx Alice ->> Chain: submit incrementTx Chain ->> Node B: OnIncrementTx utxo Chain ->>+ Node A: OnIncrementTx utxo Node A ->> Node A: localUtxo = localUtxo + utxo Node A ->>- Alice: CommitFinalized Note over Alice: Alice can spend on L2 what she committed from L1 ``` ### Incremental Decommits ```mermaid sequenceDiagram Alice->>Node A: Decommit (decTx) Node A->>Node A: canApply decTx par broadcast Node A->>Node A: ReqDec decTx and Node A->>Node B: ReqDec decTx end Node A -->> Alice: DecommitRequested par Alice isLeader Node A->>Node A: ReqSn decTx and Node A->>Node B: ReqSn decTx end Node A->>Node A: canApply decTx, decUTxO = outputs(decTx) Node A->>Node A: sig = sign snapshot incl. decUTxO par broadcast Node A->>Node A: AckSn sig and Node A->>Node B: AckSn sig end Node B->>Node A: AckSn sig Node A -->> Alice: SnapshotConfirmed Node A -->> Alice: DecommitApproved Node A ->> Chain: DecrementTx snapshot sig Chain ->> Node A: OnDecrementTx Node A -->> Alice: DecommitFinalized ```