@hyperlane-xyz/core
Version:
Core solidity contracts for Hyperlane
157 lines (126 loc) • 4.52 kB
Markdown
## Burn Message
```mermaid
flowchart LR
Iris((Iris))
Relayer((Relayer))
subgraph Origin Chain
User
TBCCTP_O[TokenBridgeCctp]
M_O[(Mailbox)]
TM_O[TokenMessenger]
MT_O[MessageTransmitter]
USDC_O[USDC]
User -- "transferRemote(amount, recipient)" --> TBCCTP_O
TBCCTP_O -- "depositForBurn()" --> TM_O
TM_O -- "burn" --> USDC_O
User -. "amount" .-> USDC_O
TM_O -- "sendMessage(burnMessage)" --> MT_O
TBCCTP_O -- "dispatch(tokenMessage)" --> M_O
end
subgraph Destination Chain
Recipient[Recipient]
TBCCTP_D[TokenBridgeCctp]
M_D[(Mailbox)]
TM_D[TokenMessenger]
MT_D[MessageTransmitter]
USDC_D[USDC]
TBCCTP_D -- "receiveMessage(
burnMessage,
attestation)" --> MT_D
MT_D -- "burnMessage" --> TM_D
TM_D -- "mint" --> USDC_D
USDC_D -. "amount" .-> Recipient
end
M_O -. "tokenMessage" .-> Relayer
Relayer -- "getOffchainVerifyInfo(tokenMessage)" --> TBCCTP_D
TBCCTP_D -. "OffchainLookup" .-> Iris
Iris -. "burnMessage, attestation" .-> Relayer
Relayer -- "process(
[burnMessage, attestation],
tokenMessage)" --> M_D
M_D -- "verify([burnMessage, attestation], tokenMessage)" --> TBCCTP_D
M_D -- "handle(tokenMessage)" --> TBCCTP_D
MT_O -. "burnMessage" .-> Iris
classDef cctp fill:#e3f2fd
classDef hyperlane fill:#f3e5f5
class MT_O,MT_D,TM_O,TM_D,Iris,USDC_O,USDC_D cctp
class M_O,M_D,Relayer hyperlane
```
## Hook Message
```mermaid
flowchart LR
Iris((Iris))
Relayer((Relayer))
subgraph Origin Chain
App
M_O[(Mailbox)]
TBCCTP_O[TokenBridgeCctp]
MT_O[MessageTransmitter]
App -- "dispatch(hyperlaneMessage)" --> M_O
M_O -- "postDispatch(hyperlaneMessage)" --> TBCCTP_O
TBCCTP_O -- "sendMessage(hyperlaneMessage.id())" --> MT_O
end
subgraph Destination Chain
Recipient[Recipient]
TBCCTP_D[TokenBridgeCctp]
M_D[(Mailbox)]
MT_D[MessageTransmitter]
TBCCTP_D -- "receiveMessage(
cctpMessage,
attestation)" --> MT_D
MT_D -- "handleReceiveMessage(cctpMessage)" --> TBCCTP_D
end
M_O -. "hyperlaneMessage" .-> Relayer
TBCCTP_D -. "interchainSecurityModule()" .- Recipient
TBCCTP_D -. "OffchainLookup" .-> Iris
Iris -. "cctpMessage, attestation" .-> Relayer
Relayer -- "getOffchainVerifyInfo(hyperlaneMessage)" --> TBCCTP_D
Relayer -- "process(
[cctpMessage, attestation],
hyperlaneMessage)" --> M_D
M_D -- "verify([cctpMessage, attestation], hyperlaneMessage)" --> TBCCTP_D
M_D -- "handle(hyperlaneMessage)" ----> Recipient
MT_O -. "cctpMessage" .-> Iris
classDef cctp fill:#e3f2fd
classDef hyperlane fill:#f3e5f5
class MT_O,MT_D,TM_O,TM_D,Iris,USDC_O,USDC_D cctp
class M_O,M_D,Relayer hyperlane
```
## Destination Chain Sequence Diagrams
### 1. Token Message
```mermaid
sequenceDiagram
participant HR as Hyperlane Relayer
participant Mailbox as Mailbox
participant TBCCTP as TokenBridgeCctp
participant MT as MessageTransmitter
participant TM as TokenMessenger
participant USDC as USDC
participant Recipient as Recipient
HR->>Mailbox: process([burnMessage, attestation], tokenMessage)
Mailbox->>TBCCTP: verify([burnMessage, attestation], tokenMessage)
TBCCTP->>MT: receiveMessage(burnMessage, attestation)
MT->>TM: handleReceiveMessage(burnMessage)
TM->>USDC: mint(amount, recipient)
USDC-->>Recipient: amount transferred
Note over Mailbox: Marks message as delivered<br/>in delivered mapping
Mailbox->>TBCCTP: handle(tokenMessage)
TBCCTP-->>Recipient: emit event reflecting tokens were transferred
```
### 2. GMP Message
```mermaid
sequenceDiagram
participant HR as Hyperlane Relayer
participant Mailbox as Mailbox
participant TBCCTP as TokenBridgeCctp (ISM)
participant MT as MessageTransmitter
participant Recipient as Recipient App
HR->>Mailbox: process([cctpMessage, attestation], hyperlaneMessage)
Mailbox->>TBCCTP: verify([cctpMessage, attestation], hyperlaneMessage)
TBCCTP->>MT: receiveMessage(cctpMessage, attestation)
MT->>TBCCTP: handleReceiveMessage(cctpMessage)
Note over TBCCTP: Verifies message ID matches
Note over Mailbox: Marks message as delivered<br/>in delivered mapping
Mailbox->>Recipient: handle(hyperlaneMessage)
Note over Recipient: Application receives message
```