Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add docs/sequences.md with deposit, withdraw, and exit sequences #1354

Merged
merged 13 commits into from
Apr 4, 2023
62 changes: 62 additions & 0 deletions docs/bridge/sequences.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
## Deposit

Bridge tokens from rootchain to childchain via deposit.

```mermaid
sequenceDiagram
User->>Edge: deposit
Edge->>RootERC20.sol: approve(RootERC20Predicate)
Edge->>RootERC20Predicate.sol: deposit()
RootERC20Predicate.sol->>RootERC20Predicate.sol: mapToken()
RootERC20Predicate.sol->>StateSender.sol: syncState(MAP_TOKEN_SIG)
sergerad marked this conversation as resolved.
Show resolved Hide resolved
Edge->>User: ok
RootERC20Predicate.sol-->>Edge: TokenMapped Event
StateSender.sol-->>Edge: StateSynced Event
Edge->>StateReceiver.sol:commit()
StateReceiver.sol-->>Edge: NewCommitment Event
Edge->>StateReceiver.sol:execute()
StateReceiver.sol->>ChildERC20Predicate.sol:onStateReceive()
ChildERC20Predicate.sol->>ChildERC20.sol: mint()
StateReceiver.sol-->>Edge:StateSyncResult Event
```

## Withdraw

Move tokens from childchain to rootchain via withdrawal.

```mermaid
sequenceDiagram
User->>Edge: withdraw
Edge->>ChildERC20Predicate.sol: withdrawTo()
ChildERC20Predicate.sol->>ChildERC20: burn()
ChildERC20Predicate.sol->>L2StateSender.sol: syncState(rootToken, WITHDRAW_SIG), recv=RootERC20Predicate
Edge->>User: tx hash
User->>Edge: get tx receipt
Edge->>User: exit event id
ChildERC20Predicate.sol-->>Edge: L2ERC20Withdraw Event
L2StateSender.sol-->>Edge: StateSynced Event
Edge->>Edge: Seal block
Edge->>CheckpointManager.sol: submit()
```
## Exit

Finalize withdrawal of tokens from childchain to rootchain.

```mermaid
sequenceDiagram
User->>Edge: exit, event id:X
Edge->>Edge: bridge_generateExitProof()
Edge->>CheckpointManager.sol: getCheckpointBlock()
CheckpointManager.sol->>Edge: blockNum
Edge->>Edge: getExitEventsForProof(epochNum, blockNum)
Edge->>Edge: createExitTree(exitEvents)
Edge->>Edge: generateProof()
Edge->>ExitHelper.sol: exit()
ExitHelper.sol->>CheckpointManager.sol: getEventMembershipByBlockNumber()
ExitHelper.sol->>RootERC20Predicate.sol:onL2StateReceive()
RootERC20Predicate.sol->>RootERC20: transfer()
Edge->>User: ok
RootERC20Predicate.sol-->>Edge: ERC20Withdraw Event
ExitHelper.sol-->>Edge: ExitProcessed Event
```