Skip to content

Commit 204a926

Browse files
L2EP updates (#2452)
* new ccip networks * add mantle and soneium + overall doc improvements * fix anchor link * Update src/content/data-feeds/l2-sequencer-feeds.mdx Co-authored-by: Karim H. <98668332+khadni@users.noreply.github.com> * Update src/content/data-feeds/l2-sequencer-feeds.mdx Co-authored-by: Karim H. <98668332+khadni@users.noreply.github.com> --------- Co-authored-by: Karim H. <98668332+khadni@users.noreply.github.com>
1 parent e0a46b0 commit 204a926

File tree

2 files changed

+69
-26
lines changed

2 files changed

+69
-26
lines changed

src/config/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,9 @@ export type SupportedChain =
144144
| "UNICHAIN_SEPOLIA"
145145
| "UNICHAIN_MAINNET"
146146
| "APECHAIN_CURTIS"
147-
| "HEMI_SEPOLIA"
148147
| "CRONOS_TESTNET"
149148
| "CRONOS_ZKEVM_TESTNET"
149+
| "HEMI_SEPOLIA"
150150
| "TRON_MAINNET"
151151

152152
export type ExplorerInfo = {

src/content/data-feeds/l2-sequencer-feeds.mdx

Lines changed: 68 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,30 +7,73 @@ title: "L2 Sequencer Uptime Feeds"
77
import { ClickToZoom, CodeSample } from "@components"
88
import { Aside } from "@components"
99

10-
Optimistic rollup protocols move all execution off the layer 1 (L1) Ethereum chain, complete execution on a layer 2 (L2) chain, and return the results of the L2 execution back to the L1. These protocols have a [sequencer](https://docs.optimism.io/stack/rollup/overview) that executes and rolls up the L2 transactions by batching multiple transactions into a single transaction.
10+
Optimistic rollups (e.g., Arbitrum, Optimism) and many ZK-rollups rely on sequencers to efficiently manage transaction ordering, execution, and batching before submitting them to Layer 1 (L1) blockchains like Ethereum. The sequencer plays a crucial role in optimizing transaction throughput, reducing fees, and ensuring fast transaction confirmations on L2 networks, making it a key component of their scalability and performance.
1111

12-
If a sequencer becomes unavailable, it is impossible to access read/write APIs that consumers are using and applications on the L2 network will be down for most users without interacting directly through the L1 optimistic rollup contracts. The L2 has not stopped, but it would be unfair to continue providing service on your applications when only a few users can use them.
12+
However, if the sequencer becomes unavailable, users will lose access to the standard read/write APIs, preventing them from interacting with applications on the L2 network. Although the L2 chain's security and state commitments remain enforced by Layer 1, no new batched blocks will be produced by the sequencer. Users with sufficient technical expertise can still interact directly with the network through the underlying rollup contracts on L1. However, this process is more complex and costly, creating an unfair advantage for those who can bypass the sequencer. This imbalance in access can lead to disruptions or distortions in applications, such as liquidations or market operations that rely on timely transactions.
1313

14-
To help your applications identify when the sequencer is unavailable, you can use a data feed that tracks the last known status of the sequencer at a given point in time. This helps you prevent mass liquidations by providing a grace period to allow customers to react to such an event.
14+
To mitigate these risks, your applications can integrate a **Sequencer Uptime Data Feed**, which continuously monitors and records the last known status of the sequencer. By utilizing this feed, you can:
1515

16-
## Available networks
16+
- Detect sequencer downtime in real time.
17+
- Implement a grace period to prevent mass liquidations or unexpected disruptions.
18+
- Ensure fair access to services by temporarily pausing operations during sequencer failures.
19+
20+
This proactive approach enhances the resilience and fairness of applications operating on L2 networks, ensuring a more stable and equitable user experience.
21+
22+
## Supported Networks
1723

1824
You can find proxy addresses for the L2 sequencer feeds at the following addresses:
1925

20-
- Arbitrum:
21-
- Arbitrum mainnet: [0xFdB631F5EE196F0ed6FAa767959853A9F217697D](https://arbiscan.io/address/0xFdB631F5EE196F0ed6FAa767959853A9F217697D)
22-
- OP:
23-
- OP mainnet: [0x371EAD81c9102C9BF4874A9075FFFf170F2Ee389](https://optimistic.etherscan.io/address/0x371EAD81c9102C9BF4874A9075FFFf170F2Ee389)
24-
- BASE:
25-
- BASE mainnet: [0xBCF85224fc0756B9Fa45aA7892530B47e10b6433](https://basescan.org/address/0xBCF85224fc0756B9Fa45aA7892530B47e10b6433)
26-
- Metis:
27-
- Andromeda mainnet: [0x58218ea7422255EBE94e56b504035a784b7AA204](https://andromeda-explorer.metis.io/address/0x58218ea7422255EBE94e56b504035a784b7AA204)
28-
- Scroll:
29-
- Scroll mainnet: [0x45c2b8C204568A03Dc7A2E32B71D67Fe97F908A9](https://scrollscan.com/address/0x45c2b8C204568A03Dc7A2E32B71D67Fe97F908A9)
30-
- zkSync:
31-
- zkSync mainnet: [0x0E6AC8B967393dcD3D36677c126976157F993940](https://explorer.zksync.io/address/0x0E6AC8B967393dcD3D36677c126976157F993940)
32-
33-
## Arbitrum
26+
### <img src="/assets/chains/arbitrum.svg" style="height: 20px; width: auto; margin-right: 8px;" />Arbitrum
27+
28+
Arbitrum Mainnet: [0xFdB631F5EE196F0ed6FAa767959853A9F217697D](https://arbiscan.io/address/0xFdB631F5EE196F0ed6FAa767959853A9F217697D)
29+
30+
<br />
31+
32+
### <img src="/assets/chains/base.svg" style="height: 20px; width: auto; margin-right: 8px;" />BASE
33+
34+
BASE Mainnet: [0xBCF85224fc0756B9Fa45aA7892530B47e10b6433](https://basescan.org/address/0xBCF85224fc0756B9Fa45aA7892530B47e10b6433)
35+
36+
<br />
37+
38+
### <img src="/assets/chains/mantle.svg" style="height: 20px; width: auto; margin-right: 8px;" />Mantle
39+
40+
Mantle Mainnet: [0xaDE1b9AbB98c6A542E4B49db2588a3Ec4bF7Cdf0](https://mantlescan.xyz/address/0xaDE1b9AbB98c6A542E4B49db2588a3Ec4bF7Cdf0)
41+
42+
<br />
43+
44+
### <img src="/assets/chains/metis.svg" style="height: 20px; width: auto; margin-right: 8px;" />Metis
45+
46+
Andromeda Mainnet: [0x58218ea7422255EBE94e56b504035a784b7AA204](https://andromeda-explorer.metis.io/address/0x58218ea7422255EBE94e56b504035a784b7AA204)
47+
48+
<br />
49+
50+
### <img src="/assets/chains/optimism.svg" style="height: 20px; width: auto; margin-right: 8px;" />OP
51+
52+
OP Mainnet: [0x371EAD81c9102C9BF4874A9075FFFf170F2Ee389](https://optimistic.etherscan.io/address/0x371EAD81c9102C9BF4874A9075FFFf170F2Ee389)
53+
54+
<br />
55+
56+
### <img src="/assets/chains/scroll.svg" style="height: 20px; width: auto; margin-right: 8px;" />Scroll
57+
58+
Scroll Mainnet: [0x45c2b8C204568A03Dc7A2E32B71D67Fe97F908A9](https://scrollscan.com/address/0x45c2b8C204568A03Dc7A2E32B71D67Fe97F908A9)
59+
60+
<br />
61+
62+
### <img src="/assets/chains/soneium.svg" style="height: 20px; width: auto; margin-right: 8px;" />Soneium
63+
64+
Soneium Mainnet: [0xaDE1b9AbB98c6A542E4B49db2588a3Ec4bF7Cdf0](https://soneium.blockscout.com/address/0xaDE1b9AbB98c6A542E4B49db2588a3Ec4bF7Cdf0)
65+
66+
<br />
67+
68+
### <img src="/assets/chains/zksync.svg" style="height: 20px; width: auto; margin-right: 8px;" />ZKsync
69+
70+
zkSync Mainnet: [0x0E6AC8B967393dcD3D36677c126976157F993940](https://explorer.zksync.io/address/0x0E6AC8B967393dcD3D36677c126976157F993940)
71+
72+
<br />
73+
74+
## Real-time Monitoring Process
75+
76+
### Arbitrum
3477

3578
The diagram below shows how these feeds update and how a consumer retrieves the status of the Arbitrum sequencer.
3679

@@ -41,13 +84,13 @@ The diagram below shows how these feeds update and how a consumer retrieves the
4184
1. The inbox contract sends the message to the [`ArbitrumSequencerUptimeFeed` contract](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.8/l2ep/dev/arbitrum/ArbitrumSequencerUptimeFeed.sol). The message calls the `updateStatus` function in the `ArbitrumSequencerUptimeFeed` contract and updates the latest sequencer status to 0 if the sequencer is up and 1 if it is down. It also records the block timestamp to indicate when the message was sent from the L1 network.
4285
1. A consumer contract on the L2 network can read these values from the [`ArbitrumUptimeFeedProxy` contract](https://github.com/smartcontractkit/chainlink/blob/contracts-v1.0.0/contracts/src/v0.6/EACAggregatorProxy.sol), which reads values from the `ArbitrumSequencerUptimeFeed` contract.
4386

44-
### Handling Arbitrum outages
87+
#### Handling Arbitrum Outages
4588

4689
If the Arbitrum network becomes unavailable, the `ArbitrumValidator` contract continues to send messages to the L2 network through the delayed inbox on L1. This message stays there until the sequencer is back up again. When the sequencer comes back online after downtime, it processes all transactions from the delayed inbox before it accepts new transactions. The message that signals when the sequencer is down will be processed before any new messages with transactions that require the sequencer to be operational.
4790

48-
## OP, BASE, Metis, Scroll, and zkSync
91+
### Other Supported Networks
4992

50-
On OP, BASE, Metis, Scroll, and zkSync, the sequencer's status is relayed from L1 to L2 where the consumer can retrieve it.
93+
On BASE, Mantle, Metis, OP, Scroll, Soneium and zkSync, the sequencer's status is relayed from L1 to L2 where the consumer can retrieve it.
5194

5295
<ClickToZoom src="/images/data-feed/l2-diagram-optimism-metis.webp" />
5396

@@ -71,7 +114,7 @@ On OP, BASE, Metis, Scroll, and zkSync, the sequencer's status is relayed from L
71114

72115
1. Consumers can then read from the `AggregatorProxy` contract, which fetches the latest round data from the `OptimismSequencerUptimeFeed` contract.
73116

74-
### Handling outages on OP, BASE, Metis, Scroll, and zkSync
117+
#### Handling Other Supported Network Outages
75118

76119
If the sequencer is down, messages cannot be transmitted from L1 to L2 and **no L2 transactions are executed**. Instead, messages are enqueued in the `CanonicalTransactionChain` on L1 and only processed in the order they arrived later when the sequencer comes back up. As long as the message from the validator on L1 is already enqueued in the `CTC`, the flag on the sequencer uptime feed on L2 will be guaranteed to be flipped prior to any subsequent transactions. The transaction that flips the flag on the uptime feed will be executed before transactions that were enqueued after it. This is further explained in the diagrams below.
77120

@@ -89,11 +132,11 @@ After the sequencer comes back up, it moves all transactions in the pending queu
89132

90133
<ClickToZoom src="/images/data-feed/seq-down-2.webp" />
91134

92-
## Example code
135+
## Example Consumer Contract
93136

94-
This example code works on the Arbitrum, OP, and Metis networks. Create the consumer contract for sequencer uptime feeds similarly to the contracts that you use for other [Chainlink Data Feeds](/data-feeds/using-data-feeds). Configure the constructor using the following variables:
137+
This example code works on any network that supports Solidity. Create the consumer contract for sequencer uptime feeds similarly to the contracts that you use for other [Chainlink Data Feeds](/data-feeds/using-data-feeds). Configure the constructor using the following variables:
95138

96-
- Configure the `sequencerUptimeFeed` object with the [sequencer uptime feed proxy address](#available-networks) for your L2 network.
139+
- Configure the `sequencerUptimeFeed` object with the [sequencer uptime feed proxy address](#supported-networks) for your L2 network.
97140
- Configure the `dataFeed` object with one of the [Data Feed proxy addresses](/data-feeds/price-feeds/addresses) that are available for your network.
98141

99142
<CodeSample src="samples/DataFeeds/DataConsumerWithSequencerCheck.sol" />

0 commit comments

Comments
 (0)