Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions components/WipCallout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,14 @@ export function WipCallout({ context }: Props): ReactElement {
);
}

export function InfoCallout({ context }: Props): ReactElement {
export function InteropCallout({ context }: Props): ReactElement {
const [closeCallout, setCloseCallout] = useState(false);
return (
<div className="custom-callouts nx-w-full nx-mt-6 nx-flex nx-justify-center nx-items-center nx-bg-white dark:nx-bg-black">
<div
className={`custom-callouts nx-w-full nx-mt-6 nx-flex nx-justify-center nx-items-center nx-bg-white dark:nx-bg-black ${
closeCallout && 'nx-hidden'
}`}
>
<div className="nx-w-full nx-px-4 nx-text-center nx-font-medium nx-text-sm nx-text-left">
{context ? (
context
Expand All @@ -69,6 +74,12 @@ export function InfoCallout({ context }: Props): ReactElement {
</div>
)}
</div>
<button
className="callout-close-btn"
onClick={() => setCloseCallout(true)}
>
x
</button>
</div>
);
}
Expand Down
2 changes: 2 additions & 0 deletions pages/stack/interop.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,6 @@ Documentation covering Cross Chain Message, Explainer, Message Passing, Op Super
<Card title="Supersim multichain development environment" href="/stack/interop/supersim" />

<Card title="Cross domain assets" href="/stack/interop/assets" />

<Card title="Interop devnet" href="/stack/interop/devnet" />
</Cards>
3 changes: 2 additions & 1 deletion pages/stack/interop/_meta.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
{
"explainer": "Interop explainer",
"cross-chain-message": "Anatomy of cross-chain message",
"devnet": "Interop devnet",
"supersim": "Supersim Multichain Development Environment",
"cross-chain-message": "Anatomy of cross-chain message",
"message-passing": "Interop message passing",
"op-supervisor": "OP Supervisor",
"assets": "Assets"
Expand Down
60 changes: 60 additions & 0 deletions pages/stack/interop/devnet.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
---
title: Interop devnet
lang: en-US
description: Details on the public interoperability devnets.
---

import { Callout, Tabs, Steps } from 'nextra/components'

# Interop devnet

The Interop devnet is a temporary public network of two OP Stack Sepolia instances that supports SuperERC20 tokens, native cross-chain messaging, and cross-chain ETH transfers. This network will be deprecated once the next devnet is released. As we iterate on Superchain interop, these networks will be deprecated once the next devnets are released.

## Interop devnet 0

| Parameter | Value |
| --------------------------- | ---------------------------------------------------------------------------------------------------- |
| Network Name | `Interop Devnet 0` |
| Chain ID | `11473209` |
| Currency Symbol<sup>1</sup> | ETH |
| Explorer | [https://optimism-interop-devnet-0.blockscout.com](https://optimism-interop-devnet-0.blockscout.com) |
| Public RPC URL | [https://interop-devnet-0.optimism.io](https://interop-devnet-0.optimism.io) |
| Sequencer URL | [https://interop-devnet-0.optimism.io](https://interop-devnet-0.optimism.io) |
| OptimismPortal<sup>2</sup> | `0xb081417d0578d70eb6bee7bfa646ef8c283eb35a` |

## Interop devnet 1

| Parameter | Value |
| --------------------------- | ---------------------------------------------------------------------------------------------------- |
| Network Name | `Interop Devnet 1` |
| Chain ID | `21473209` |
| Currency Symbol<sup>1</sup> | ETH |
| Explorer | [https://optimism-interop-devnet-1.blockscout.com](https://optimism-interop-devnet-1.blockscout.com) |
| Public RPC URL | [https://interop-devnet-1.optimism.io](https://interop-devnet-1.optimism.io) |
| Sequencer URL | [https://interop-devnet-1.optimism.io](https://interop-devnet-1.optimism.io) |
| OptimismPortal<sup>2</sup> | `0x85894f229575681130ac2f2365917cf156f8e75a` |

1. The "currency symbol" is required by some wallets like MetaMask.
2. The `OptimismPortal` is a low-level contract responsible for passing messages between L1 and L2. Messages sent directly to the `OptimismPortal` have no form of replayability. You can send ether directly to the portal to receive it to the sender address on the L2.

## Sending ETH to the interop devnets

<Steps>
### Get Sepolia ETH

You can utilize the [Superchain Faucet](https://console.optimism.io/faucet) to get ether on Sepolia.

### Send the Sepolia ETH to the devnet

You can send ether directly to the `OptimismPortal` address and it will go to the same sender address on the devnet.

### Wait for bridging to complete

It'll take approximately 2 minutes for the bridging process to complete and the ether to appear in your wallet.
</Steps>

## Next steps

* Want to start with local development? Use [Supersim](/stack/interop/supersim), a local dev environment that simulates interop for testing applications against a local version of the Superchain.
* Read about [interop message passing](/stack/interop/cross-chain-message) to see how you can implement it yourself on this devnet.

45 changes: 42 additions & 3 deletions pages/stack/interop/explainer.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ description: Learn the basics of interoperability on the OP Stack.
import { Callout } from 'nextra/components'
import Image from 'next/image'

import { InfoCallout } from '@/components/WipCallout'
import { InteropCallout } from '@/components/WipCallout'

<InfoCallout />
<InteropCallout />

# Interoperability explainer

Expand Down Expand Up @@ -40,9 +40,48 @@ Chain operators can add or remove chains from the dependency set through the `Sy

However, since the nature of defining a dependency is one way, it is impossible for a chain to know of all of the other chains that depend on it.

## New predeploys

The following predeploys have been added to enable interoperability. Predeployed smart contracts exist at predetermined addresses in the genesis state. They are similar to precompiles but instead run directly in the EVM instead of running native code outside the EVM.

### CrossL2Inbox

The `CrossL2Inbox` is the system predeploy for cross chain messaging. Anyone can trigger the execution or validation of cross chain messages, on behalf of any user.

* **Address:** `0x4200000000000000000000000000000000000022`
* **Specs:** [CrossL2Inbox](https://specs.optimism.io/interop/predeploys.html#crossl2inbox)

### L2ToL2CrossDomainMessenger

The `L2ToL2CrossDomainMessenger` is a higher level abstraction on top of the `CrossL2Inbox` that provides general message passing, utilized for secure transfers ERC20 tokens between L2 chains. Messages sent through the `L2ToL2CrossDomainMessenger` on the source chain receive both replay protection and domain binding, ie the executing transaction can only be valid on a single chain.

* **Address:** `0x4200000000000000000000000000000000000023`
* **Specs:** [L2ToL2CrossDomainMessenger](https://specs.optimism.io/interop/predeploys.html#l2tol2crossdomainmessenger)

### OptimismSuperchainERC20Factory

The `OptimismSuperchainERC20Factory` creates ERC20 contracts that implement the SuperchainERC20 standard, grants mint-burn rights to the `L2StandardBridge` (`OptimismSuperchainERC20`), and includes a remoteToken variable. These ERC20s are called `OptimismSuperchainERC20` and can be converted back and forth with `OptimismMintableERC20` tokens. The goal of the `OptimismSuperchainERC20` is to extend functionalities of the `OptimismMintableERC20` so that they are interop compatible.

* **Address:** `0x4200000000000000000000000000000000000026`
* **Specs:** [OptimismSuperchainERC20Factory](https://specs.optimism.io/interop/predeploys.html#optimismsuperchainerc20factory)


### BeaconContract

The `BeaconContract` predeploy gets called by the `OptimismSuperchainERC20` BeaconProxies deployed by the SuperchainERC20Factory. The Beacon Contract implements the interface defined in [EIP-1967](https://eips.ethereum.org/EIPS/eip-1967).

* **Address:** `0x4200000000000000000000000000000000000027`
* **Specs:** [BeaconContract](https://specs.optimism.io/interop/predeploys.html#beaconcontract)

### SuperchainERC20Bridge

The `SuperchainERC20Bridge` is an abstraction on top of the `L2toL2CrossDomainMessenger` that facilitates token bridging using interop. It has mint and burn rights over `SuperchainERC20` tokens, as described in the [token bridging spec](https://specs.optimism.io/interop/token-bridging.html).

* **Address:** `0x4200000000000000000000000000000000000028`
* **Specs:** [SuperchainERC20Bridge](https://specs.optimism.io/interop/predeploys.html#superchainerc20bridge)
## Considerations
Chain operators will need to run additional infrastructure to be part of the interoperable set.
* The Superchain-backend service, `op-supervisor`, will be a requirement for running an OP Stack chain that has interop enabled.
* The Superchain-backend service, [`op-supervisor`](op-supervisor), will be a requirement for running an OP Stack chain that has interop enabled.
`op-supervisor` is responsible for validating all cross-chain messages and will need to have an RPC configured for each chain in the dependency set.
* In the future, to reduce infrastructure costs, `op-supervisor` will rely on the P2P network and cryptographic schemes for validating cross-chain messages.

Expand Down
11 changes: 10 additions & 1 deletion words.txt
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ datadir
Dencun
Devnet
devnet
devnets
Devnode
direnv
DISABLETXPOOLGOSSIP
Expand Down Expand Up @@ -409,4 +410,12 @@ ZKPs
ZKVM
Zora
zora
interchain
Sepolia
SEPOLIA
Immunefi
Mitigations
Pyth's
Pyth
voxel
Ankr
interchain
Loading