Skip to content

Commit

Permalink
Add docs/sequences.md with deposit, withdraw, and exit sequences (#1354)
Browse files Browse the repository at this point in the history
* Add docs/sequences.md with deposit, withdraw, and exit sequences

* Add more detail to exit sequence

* Fix StateSyncResult Event typo

Co-authored-by: Stefan Negovanović <93934272+Stefan-Ethernal@users.noreply.github.com>

* Fix arrow typo

Co-authored-by: Stefan Negovanović <93934272+Stefan-Ethernal@users.noreply.github.com>

* Rm imx reference

Co-authored-by: Stefan Negovanović <93934272+Stefan-Ethernal@users.noreply.github.com>

* Rename NativeERC20.sol to ChildERC20.sol

Co-authored-by: Stefan Negovanović <93934272+Stefan-Ethernal@users.noreply.github.com>

* Move sequences.md to docs/bridge

* Rephrase sequence explanation sentences

* Rename Client to User

* Fix deposit sequence and specifer spender in approve()

* Add mapToken() flow

* Add DEPOSIT_SIG flow

Co-authored-by: Goran Rojovic <100121253+goran-ethernal@users.noreply.github.com>

* Rm duplicate rows in deposit

---------

Co-authored-by: Stefan Negovanović <93934272+Stefan-Ethernal@users.noreply.github.com>
Co-authored-by: Goran Rojovic <100121253+goran-ethernal@users.noreply.github.com>
  • Loading branch information
3 people committed Apr 4, 2023
1 parent 7911c43 commit 0972756
Showing 1 changed file with 64 additions and 0 deletions.
64 changes: 64 additions & 0 deletions docs/bridge/sequences.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
## 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)
RootERC20Predicate.sol-->>Edge: TokenMapped Event
StateSender.sol-->>Edge: StateSynced Event to map tokens on child predicate
RootERC20Predicate.sol->>StateSender.sol: syncState(DEPOSIT_SIG)
StateSender.sol-->>Edge: StateSynced Event to deposit on child chain
Edge->>User: ok
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
```

0 comments on commit 0972756

Please sign in to comment.