diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 31b977bb8cd..4d6aaa838c9 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -49,4 +49,4 @@ jobs: run: npm install --no-package-lock --legacy-peer-deps - name: Run Link Checker - run: npm run check-links -- --all --concurrency=2 --skip="celestia.org,nexus.hyperlane.xyz" + run: npm run check-links -- --all --concurrency=2 --skip="celestia.org,nexus.hyperlane.xyz,infura.io" diff --git a/app/build/stacks/_meta.js b/app/build/stacks/_meta.js index 25a9430bbc9..634b20c6888 100644 --- a/app/build/stacks/_meta.js +++ b/app/build/stacks/_meta.js @@ -1,6 +1,6 @@ const meta = { - "nitro-das-server": "Nitro DAS server", - "op-alt-da": "OP alt DA", + nitro: "Arbitrum Nitro", + optimism: "Optimism", }; export default meta; diff --git a/app/build/stacks/nitro/_meta.js b/app/build/stacks/nitro/_meta.js new file mode 100644 index 00000000000..abe9a0d0c8d --- /dev/null +++ b/app/build/stacks/nitro/_meta.js @@ -0,0 +1,7 @@ +const meta = { + "nitro-das-server": "Nitro DAS server overview", + "local-devnet": "Nitro local devnet", + "popkins-popsigner": "Deploy with Popkins and Popsigner", +}; + +export default meta; diff --git a/app/build/stacks/nitro/local-devnet/page.mdx b/app/build/stacks/nitro/local-devnet/page.mdx new file mode 100644 index 00000000000..a91ca613be8 --- /dev/null +++ b/app/build/stacks/nitro/local-devnet/page.mdx @@ -0,0 +1,217 @@ +# Local Nitro devnet + +This guide will teach you how to spin up a complete local Arbitrum Nitro rollup with Celestia DA for testing. + +**What `pop-deployer` does:** It spins up a temporary Anvil instance, deploys all Nitro infrastructure contracts (`RollupCreator`, `Bridge`, `SequencerInbox`, `Outbox`, challenge manager, one-step provers, etc.), creates the rollup via `createRollup`, deploys WETH for BOLD staking, captures the chain state to a snapshot, then packages everything into a tarball. When you run the bundle, Anvil loads the pre-deployed state instantly - no waiting for contract deployments. + +import { Callout, Steps } from "nextra/components"; + + + The "Build the bundle generator" and "Generate the pre-deployed bundle" steps will soon be available through the Popkins UI. + + + +## Prerequisites + +See [overview of Popsigner and Popkins](/build/stacks/optimism/popkins-popsigner#overview). + +## Option 1: In the UI + + + +### Log in to Popkins + +Go to https://popkins.popsigner.com and login. + +### Set up the local chain + + + +#### New chain + +Click "+ NEW CHAIN" in the top right of the Popkins UI. + +Select "POPKINS BUNDLE" and click continue: + +![1.deploy-new-chain](/img/build/stacks/optimism/popkins-popsigner/1.deploy-new-chain.png) + +#### Pick stack + +Then select "ARBITRUM NITRO", put a chain name and chain ID into the fields, and click "πŸš€ CREATE BUNDLE". + +![2.pick_nitro](/img/build/stacks/optimism/popkins-popsigner/2.pick_nitro.png) + +#### Wait for bundle generation + +Wait for the bundle to be generated: + +![3.wait-for-deploy-nitro.png](/img/build/stacks/optimism/popkins-popsigner/3.wait-for-deploy-nitro.png) + +#### Review details +After it has generated, review the details: + +![4.download-bundle-nitro](/img/build/stacks/optimism/popkins-popsigner/4.download-bundle-nitro.png) + +![4.1.look-at-details-nitro](/img/build/stacks/optimism/popkins-popsigner/4.1.look-at-details-nitro.png) + + + +### Download the bundle + +Download the bundle by clicking the "DOWNLOAD BUNDLE" button. + +![5.download](/img/build/stacks/optimism/popkins-popsigner/5.download.png) + +### Extract the tarball + +Extract the tarball by running the following command: + +```bash +unzip my-local-devnet-pop-bundle-artifacts.tar.gz +cd my-local-devnet-pop-bundle-artifacts +``` + +### Run the bundle + +Run the bundle by running the following command: + +```bash +docker compose up -d +``` + + + + +## Option 2: In the terminal + + + +### Clone Popsigner + +```bash +git clone https://github.com/celestiaorg/popsigner.git +``` + +### Build the bundle generator + +```bash +cd popsigner/control-plane/cmd/pop-deployer +go build -o pop-deployer . +``` + +### Generate the pre-deployed bundle + +```bash +./pop-deployer --stack nitro +``` + +### Extract and run + +The bundle comes with all contracts already deployed and configured - just extract and run. + +```bash +tar xzf nitro-local-devnet-bundle.tar.gz +./scripts/start.sh +``` + +Verify it's running: + +```bash +cast chain-id --rpc-url http://localhost:8547 +# 42069 +``` + +This starts the following services: + +#### Services and ports + +| Service | Port | Description | +|---------|------|-------------| +| **Anvil** | `8545` (RPC) | L1 chain with pre-deployed Nitro contracts including:
β€’ `RollupCreator` - Factory for creating new rollups
β€’ `Bridge` - Cross-chain asset bridge
β€’ `SequencerInbox` - Receives L2 transactions
β€’ `Outbox` - Processes L2β†’L1 messages
β€’ Challenge manager & one-step provers for fraud proofs | +| **Nitro Sequencer** | `8547` (RPC) | L2 execution and sequencing node (nitro-node) that:
β€’ Processes transactions
β€’ Produces blocks
β€’ Manages state transitions
β€’ Handles deposits and withdrawals | +| **Localestia** | `26658` (Bridge API) | Mock Celestia DA layer providing:
β€’ Data availability for L2 batches
β€’ Blob storage and retrieval
β€’ DA attestations | +| **POPSigner-Lite** | Internal | Local signing service that:
β€’ Signs batch data for Celestia DA
β€’ Manages validator keys
β€’ Provides attestation signatures | + +#### Default funded accounts (L1 only) + + +These are standard Anvil test accounts with publicly known private keys. **NEVER use these on mainnet or testnets!** They are only for local development. + + +The following accounts are pre-funded with 10,000 ETH on **L1 only**. You must bridge funds to L2 as shown in the examples below: + +| Account | Address | Private Key (TEST ONLY) | +|---------|---------|-------------------------| +| Account #0 | `0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266` | `0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80` | +| Account #1 | `0x70997970C51812dc3A010C7d01b50e0d17dc79C8` | `0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d` | +| Account #2 | `0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC` | `0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a` | +| Account #3 | `0x90F79bf6EB2c4f870365E785982E1f101E93b906` | `0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6` | +| Account #4 | `0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65` | `0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a` | + + +To use these accounts on L2, you must first bridge funds from L1 using the deposit function as shown in the "Fund your L2 account" step below. + + +These are the standard Anvil development accounts and are safe to use in documentation since they're universally known test keys. + +
+ +Congratulations! You've successfully deployed a Nitro local devnet. + +### Testing with a smart contract + + + +#### Fund your L2 account + +```bash +cast send 0x72d8D69ae87568ab98C2A652F7B8feE62fBB862b "depositEth()" \ + --value 1ether \ + --rpc-url http://localhost:8545 \ + --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 +``` + +Wait ~10 seconds for the deposit to process, then verify: +```bash +cast balance 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --rpc-url http://localhost:8547 +``` + +#### Deploy a contract + +```bash +rm -rf /tmp/counter && mkdir -p /tmp/counter && cd /tmp/counter +forge init +cat > src/Counter.sol << 'EOF' +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +contract Counter { + uint256 public count; + function increment() public { count += 1; } +} +EOF +forge create src/Counter.sol:Counter \ + --rpc-url http://localhost:8547 \ + --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 \ + --broadcast +``` + +#### Interact with it + +```bash +cast call 0x5FbDB2315678afecb367f032d93F642f64180aa3 "count()" --rpc-url http://localhost:8547 +``` + +```bash +cast send 0x5FbDB2315678afecb367f032d93F642f64180aa3 "increment()" \ + --rpc-url http://localhost:8547 \ + --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 +``` + +```bash +cast call 0x5FbDB2315678afecb367f032d93F642f64180aa3 "count()" --rpc-url http://localhost:8547 +``` + + + +You've now deployed and interacted with a smart contract on your local Nitro devnet. diff --git a/app/build/stacks/nitro-das-server/page.mdx b/app/build/stacks/nitro/nitro-das-server/page.mdx similarity index 100% rename from app/build/stacks/nitro-das-server/page.mdx rename to app/build/stacks/nitro/nitro-das-server/page.mdx diff --git a/app/build/stacks/nitro/popkins-popsigner/page.mdx b/app/build/stacks/nitro/popkins-popsigner/page.mdx new file mode 100644 index 00000000000..596bf829beb --- /dev/null +++ b/app/build/stacks/nitro/popkins-popsigner/page.mdx @@ -0,0 +1,393 @@ +# How to deploy a Nitro rollup with Docker, Popsigner, and Popkins + +## Overview + +Arbitrum Nitro allows you to run Orbit rollups that post batch data to Celestia instead of Ethereum by using a [Celestia DAS server](/build/stacks/nitro/nitro-das-server/) sidecar. In this tutorial, you'll learn how to run a Nitro rollup on Sepolia using: + +- **[Popsigner](https://github.com/celestiaorg/popsigner)** for key management. Popsigner is a great way to create, manage, and revoke keys, or even export them if you'd like. +- **[Popkins](https://popkins.popsigner.com/)** for deploying contracts and chain setup. Popkins deploys the Nitro infrastructure contracts on Sepolia (RollupCreator, Bridge, SequencerInbox, etc.) and gives you the bundle to run your rollup locally. +- **Docker** for running your rollup bundle (two services: the Nitro sequencer and the Celestia DAS server). + +In order to get started, you will need a basic understanding of the key roles that make up this stack: + +1. **batch poster**: Posts batch commitments to the SequencerInbox on L1, while the actual batch data is sent to Celestia via the DAS server. Needs ongoing ETH on Sepolia. +2. **staker/validator**: Stakes on L2 state assertions using the BOLD protocol. Needs WETH on Sepolia. +3. **celestia**: The signing key used by the Celestia DAS server to submit blobs to Celestia. Needs TIA on Mocha testnet. + +The batch poster and staker both sign L1 transactions via Popsigner using **mTLS certificates** (included in the bundle). The Celestia key signs blob transactions via a separate Popsigner **API key**. This means you'll have two different signing methods but potentially three different keys on Popsigner. With these combined, you will be able to run a Nitro rollup that posts to Celestia for data availability! Let's get started. + +## Environment setup + +This tutorial has been tested on MacOS and Linux (Ubuntu 24.04). + +Before you run Nitro, you'll need: + +1. Docker installed and running locally. +2. An Ethereum Sepolia RPC endpoint (WSS recommended) from a provider like [Quicknode](https://www.quicknode.com/), [Alchemy](https://www.alchemy.com/), or [Infura](https://www.infura.io/) +3. An Ethereum Sepolia Beacon Chain API endpoint (for EIP-4844 blob data). A public option is `https://ethereum-sepolia-beacon-api.publicnode.com` +4. A Celestia Mocha testnet RPC and gRPC endpoint from [Quicknode](https://www.quicknode.com/) for posting and retrieving blobs + +That's it for now! Let's get everything else set up. + +import { Callout, Steps } from "nextra/components"; + + + +## Setting up keys on Popsigner + +First, you'll set up the keys for the batch poster, staker, and Celestia. This will allow us to deploy the rollup through Popkins and then start it locally, posting blobs to Celestia. + +1. Go to [https://popsigner.com/](https://popsigner.com/) and make an account by clicking "Deploy": + + ![popsigner1](/img/build/stacks/optimism/popkins-popsigner/popsigner1.png) + +2. Once you're logged in, click "CREATE_KEY" in the top right: + + ![popsigner2](/img/build/stacks/optimism/popkins-popsigner/popsigner2.png) + +3. Make 3 keys, all universal for simplicity: + 1. deployer-1 + 2. batcher-1 + 3. validator-1 + + ![popsigner3](/img/build/stacks/optimism/popkins-popsigner/popsigner3.png) + +## Funding keys + +Now that you've set the keys up, you need to fund them accordingly. + +1. Find the addresses in your dashboard, for Ethereum Sepolia keys, copy the 0x address: + + ![popsigner4](/img/build/stacks/optimism/popkins-popsigner/popsigner4.png) + + and click "VIEW" to see the Celestia address: + + ![popsigner5](/img/build/stacks/optimism/popkins-popsigner/popsigner5.png) +2. Deployer key: `deployer-1` + 1. Fund the `deployer-1` with at least 0.5 sepoliaETH +3. Batcher key: `batcher-1` + 1. Fund with at least 0.5 sepoliaETH +4. Validator key: `validator-1` + 1. Fund with at least **0.2 sepoliaETH** if you plan to run the validator/staker. + + + BOLD requires WETH (not native ETH) for staking. The sequencer will automatically call `WETH.deposit()` with 0.1 ETH β€” if your staker only has exactly 0.1 ETH, there won't be enough left for gas and it will fail with `insufficient funds for transfer`. + + +4. Celestia key: + 1. Here's an example address: `celestia1su2l6v5a0cj6yg05gp9cuvfen74t8u8rvck836` + 2. Fund the `celestia-1` address with 10 Mocha TIA from the [faucet](https://celenium.io/faucet) + +## Setting up deployment on Popkins + +Next, you're ready to sign in to [Popkins](https://popkins.popsigner.com/deployments) and begin your first rollup deployment with a Nitro chain. + +1. Click "+ NEW CHAIN" button in the top right corner and select Arbitrum Nitro as the stack. + +![pick-nitro](/img/build/stacks/nitro/popkins-popsigner/1.pick-nitro.png) + +2. Set up your config for the new chain! Pick a rollup name and ID that you want to use. This is where you'll also put in the Ethereum Sepolia RPC URL from the environment setup. + +![chain-info](/img/build/stacks/nitro/popkins-popsigner/2.chain-info.png) + +3. Click "CONTINUE", then assign keys accordingly: + 1. Deployer key: `deployer-1` + 2. Batch poster key: `batcher-1` + 3. Validator key: `validator-1` + 4. You'll set the Celestia key up later in the `.env` and `celestia-config.toml` + +![pick-keys](/img/build/stacks/nitro/popkins-popsigner/3.pick-keys.png) + + Then click "CONTINUE" again. + +4. Once you've set up the config, double-check the values before proceeding! Make sure you have sepoliaETH in the batcher key and 10 mochaTIA in your Celestia account. + 1. Click "πŸš€ DEPLOY CHAIN" + +![4.deploy-chain](/img/build/stacks/nitro/popkins-popsigner/4.deploy-chain.png) + +5. Keep an eye out on the process as it completes. Once it's finished, you will be able to download the config to run your rollup with Docker compose. + +![5.download-bundle](/img/build/stacks/nitro/popkins-popsigner/5.download-bundle.png) + +6. Download the bundle by clicking "DOWNLOAD BUNDLE": + + Then extract: + + ```bash + unzip YOUR-NITRO-BUNDLE-NAME.zip + ``` + +## Running locally with Docker + +Now that you've set the rollup up by deploying contracts and downloading the artifacts, you're ready to run it on your own and start producing blocks! Let's start by understanding the bundle and making some config changes. + +### What's in the bundle + +``` +my-nitro-rollup-v7-nitro-bundle/ +β”œβ”€β”€ config/ +β”‚ β”œβ”€β”€ chain-info.json # Chain configuration (from SDK) +β”‚ β”œβ”€β”€ core-contracts.json # Deployed contract addresses (rollup, bridge, inbox, etc.) +β”‚ β”œβ”€β”€ node-config.json # Original node config (reference only) +β”‚ └── celestia-config.toml # Celestia DAS server config +β”œβ”€β”€ certs/ # PopSigner mTLS certificates (auto-generated during deployment) +β”‚ β”œβ”€β”€ client.crt +β”‚ β”œβ”€β”€ client.key +β”‚ └── ca.crt +β”œβ”€β”€ docker-compose.yaml # Main Docker Compose configuration +β”œβ”€β”€ .env.example # Environment template +└── README.md +``` + +### Architecture + +The bundle uses a **ClientTX architecture** β€” no local Celestia node required. The two Docker services connect directly to remote Celestia infrastructure: + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Docker Compose β”‚ +β”‚ β”‚ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚ Nitro Sequencer β”‚ ─────────► β”‚ Celestia DAS Server β”‚ β”‚ +β”‚ β”‚ (nitro-node) β”‚ daprovider β”‚ (nitro-das-celestia)β”‚ β”‚ +β”‚ β”‚ β”‚ RPC β”‚ ClientTX β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β”‚ β”‚ β”‚ β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ β”‚ + β”‚ L1 RPC β”‚ gRPC (write) + JSON-RPC (read) + β–Ό β–Ό + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ Sepolia β”‚ β”‚ Celestia Mocha Testnet β”‚ + β”‚ (L1) │◄───────────── β”‚ - Consensus (gRPC) β”‚ + β”‚ β”‚ Blobstream β”‚ - DA Bridge (RPC) β”‚ + β”‚ Blobstream X β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ Contract β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +- **Writes (blob submission)**: The Celestia DAS server sends blobs via direct gRPC to Celestia consensus nodes, signed remotely by PopSigner. +- **Reads (blob retrieval)**: The Celestia DAS server reads blobs via JSON-RPC from Celestia DA Bridge nodes. +- **L1 transactions**: The Nitro sequencer posts batch commitments and staker assertions to Sepolia, signed remotely by PopSigner via mTLS. +- **Startup order**: The Nitro sequencer waits for the Celestia DAS server's healthcheck to pass before starting. + +### Two PopSigner keys explained + +This setup uses **two separate PopSigner keys** with different authentication methods: + +| | L1 (Sepolia) PopSigner | Celestia PopSigner | +|---|---|---| +| **Used by** | Nitro batch poster and staker/validator | Celestia DAS server | +| **Purpose** | Signing L1 transactions (batch submissions, staking) | Signing Celestia blob transactions | +| **Auth method** | mTLS certificates (`./certs/`) | API key + Key ID | +| **Config** | `POPSIGNER_MTLS_URL` + cert files | `POPSIGNER_CELESTIA_API_KEY` + `POPSIGNER_CELESTIA_KEY_ID` | +| **Funds needed** | ETH on Sepolia | TIA on Celestia Mocha | + +The mTLS certificates in `./certs/` are **auto-generated during deployment** by Popkins β€” you don't need to create them manually. + +### Services and ports + +| Service | Port | Description | +|---------|------|-------------| +| Nitro Sequencer | `8547` | HTTP RPC | +| Nitro Sequencer | `8548` | WebSocket RPC | +| Nitro Sequencer | `9642` | Metrics | +| Nitro Sequencer | `9644` | Feed (for full nodes to subscribe) | +| Celestia DAS Server | `9876` | DA Provider RPC (Nitro connects here) | +| Celestia DAS Server | `6060` | Metrics | + +### Set up Popsigner API key + +Set up an API key on [Popsigner.com](https://popsigner.com). This is different than creating a key for a blockchain account. Save this for the next step in your clipboard. You'll only be able to see it once, for safe security practice. + +![popsigner13](/img/build/stacks/optimism/popkins-popsigner/popsigner13.png) + +### Configure `.env` + +1. Copy `.env.example` into `.env`: + + ```bash + cd my-nitro-rollup-v7-nitro-bundle && cp .env.example .env + ``` + +2. Fill in the **L1 (Sepolia) RPC URL**. WSS is recommended for sequencers (real-time updates, lower latency): + + ``` + L1_RPC_URL=wss://sepolia.infura.io/ws/v3/YOUR_KEY + ``` + +4. Verify the **batch poster and staker addresses** match your PopSigner keys. These were populated during deployment: + + ``` + BATCH_POSTER_ADDRESS=0xYOUR_BATCH_POSTER_ADDRESS + STAKER_ADDRESS=0xYOUR_STAKER_ADDRESS + ``` + +5. Fill in the **Celestia Popsigner credentials**: + 1. For `POPSIGNER_CELESTIA_API_KEY`, use the API key you created in Step 1: + + ``` + POPSIGNER_CELESTIA_API_KEY=bbr_live_YOUR_API_KEY + ``` + + 2. For `POPSIGNER_CELESTIA_KEY_ID`, go to the Celestia key in Popsigner, click "View", and copy the "KEY_ID": + + ``` + POPSIGNER_CELESTIA_KEY_ID=YOUR_KEY_ID + ``` + +6. Verify the **Docker images** are set. The defaults should work out of the box: + + ``` + NITRO_IMAGE=rg.nl-ams.scw.cloud/banhbao/nitro-node-dev:v3.10.0 + NITRO_DAS_IMAGE=rg.nl-ams.scw.cloud/banhbao/nitro-das-server:v0.8.2 + ``` + + If you've built Nitro locally from source (`make docker` in the nitro repo), you can swap `NITRO_IMAGE` to your local tag instead (e.g. `nitro-node-dev:latest`). + +### Configure `config/celestia-config.toml` + +This is the configuration for the Celestia DAS server β€” the sidecar that translates between Nitro's DA provider protocol and Celestia. You need to fill in the Celestia endpoints and namespace. + +1. **Set the namespace**. Celestia namespaces are hex strings. Generate a unique one: + + ```bash + export NAMESPACE=$(openssl rand -hex 10) && echo $NAMESPACE + ``` + + Then update the config: + + ```toml + [celestia] + namespace_id = "YOUR_GENERATED_NAMESPACE_HEX" + ``` + +2. **Set the reader endpoint** (for reading blobs via JSON-RPC). Use your Quicknode Celestia Mocha endpoint: + + ```toml + [celestia.reader] + rpc = "https://delicate-sleek-lambo.celestia-mocha.quiknode.pro/8d7f3e5a9b2c4f1e6d8c9a5b7e4f2c1a6d3b9e5f/" + auth_token = "" + enable_tls = true + ``` + +3. **Set the writer endpoint** (for submitting blobs via gRPC). Use the same Quicknode endpoint, but as gRPC β€” no `https://`, add port `9090`: + + ```toml + [celestia.writer] + core_grpc = "delicate-sleek-lambo.celestia-mocha.quiknode.pro:9090" + core_token = "8d7f3e5a9b2c4f1e6d8c9a5b7e4f2c1a6d3b9e5f" + enable_tls = true + ``` + +4. **Set the PopSigner signer credentials**. Open the `[celestia.signer.remote]` section and replace `api_key` and `key_id` with your actual values. Use the API key from Step 1 and the Key ID from your Popsigner dashboard (click "View" on your Celestia key): + + ```toml + [celestia.signer.remote] + api_key = "bbr_live_YOUR_ACTUAL_API_KEY" + key_id = "your-actual-key-id-uuid" + ``` + +5. **Set the validator RPC endpoint**. In the `[celestia.validator]` section, replace `eth_rpc` with your Sepolia RPC URL (the same one from your `.env`): + + ```toml + [celestia.validator] + eth_rpc = "wss://sepolia.infura.io/ws/v3/YOUR_KEY" + ``` + + This is used by Blobstream to query data root attestations for fraud proofs. + +### Run with Docker + +Now you're ready to run this with Docker! + +```bash +docker compose up -d +``` + +On Linux, use `docker compose --env-file .env up -d` to load the `.env`. + +Check the logs to verify everything is running: + +```bash +docker compose logs -f +``` + +You should see the Celestia DAS server start first (it has a healthcheck), followed by the Nitro sequencer connecting to it via the DA provider RPC and beginning to produce blocks. + +### Verify it's running + +Test the Celestia DAS server: + +```bash +curl -X POST http://localhost:9876 \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","method":"daprovider_getSupportedHeaderBytes","params":[],"id":1}' +``` + +Check the chain ID on the sequencer: + +```bash +cast chain-id --rpc-url http://localhost:8547 +``` + + + +Congratulations! You're now running your first Nitro rollup with Celestia for DA. + +## Blobstream and fraud proofs + +[Blobstream](/build/blobstream/) is a bridge that relays Celestia data root attestations to Ethereum. This is critical for validators β€” it enables fraud proofs for batches posted to Celestia. + +Here's how the flow works: + +1. **Batch Poster** posts batch data to Celestia via the DAS server, getting back a `BlobPointer` +2. **Batch Poster** posts the batch commitment to the Sequencer Inbox on L1 +3. **Blobstream** relays Celestia block data roots to the Blobstream X contract on L1 +4. **Validator** (during a fraud proof challenge) calls `GetProof` on the Celestia DAS server +5. **Celestia DAS server** queries the Blobstream contract for the data root attestation +6. **Celestia DAS server** returns proof data that can be verified on-chain + +The Blobstream X contract address for Sepolia is configured in `celestia-config.toml` under `[celestia.validator]`. You can check the latest deployed addresses in [the Blobstream documentation](/build/blobstream/). + +## Troubleshooting + +### Check service health + +```bash +docker compose ps +docker compose logs celestia-das-server +docker compose logs nitro-sequencer +``` + +### Test Celestia DAS server + +```bash +curl -X POST http://localhost:9876 \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","method":"daprovider_getSupportedHeaderBytes","params":[],"id":1}' +``` + +### Celestia DAS server fails with "unauthorized: Authentication required" + +This usually means the PopSigner credentials in `celestia-config.toml` weren't filled in. Check the `[celestia.signer.remote]` section β€” if `api_key` or `key_id` still contain placeholder values like `${POPSIGNER_CELESTIA_API_KEY}`, replace them with the **actual values**. TOML does not support environment variable substitution. + +### Batch poster not submitting to Celestia + +1. Check if Celestia PopSigner key is funded with TIA +2. Check celestia-das-server logs: `docker compose logs -f celestia-das-server` +3. Verify Celestia endpoint connectivity in `celestia-config.toml` + +### Blobstream proof failures + +1. Verify `blobstream_addr` in `celestia-config.toml` is correct for Sepolia +2. Check that `eth_rpc` in `[celestia.validator]` can reach the parent chain +3. Blobstream may need time to relay attestations (~1 hour) + +### BOLD staker issues + +The BOLD protocol requires WETH (not native ETH) for staking. Before starting, ensure your `STAKER_ADDRESS` has: +1. WETH tokens (wrap ETH via `WETH.deposit()`) +2. Approved the ChallengeManager contract to spend WETH + +The stake amount is ~0.1 ETH equivalent per assertion level. diff --git a/app/build/stacks/op-alt-da/_meta.js b/app/build/stacks/op-alt-da/_meta.js deleted file mode 100644 index f10b9f23681..00000000000 --- a/app/build/stacks/op-alt-da/_meta.js +++ /dev/null @@ -1,6 +0,0 @@ -const meta = { - "introduction": "Introduction", - "aws-kms-guide": "AWS KMS guide", -}; - -export default meta; \ No newline at end of file diff --git a/app/build/stacks/optimism/_meta.js b/app/build/stacks/optimism/_meta.js new file mode 100644 index 00000000000..585eb44114f --- /dev/null +++ b/app/build/stacks/optimism/_meta.js @@ -0,0 +1,9 @@ +const meta = { + "op-alt-da": "OP alt DA", + "popkins-popsigner": + "Deploying OP alt DA with Popkins, Popsigner, and Docker", + "aws-kms-guide": "AWS KMS guide", + "local-devnet": "Local OP Stack Devnet", +}; + +export default meta; diff --git a/app/build/stacks/op-alt-da/aws-kms-guide/page.mdx b/app/build/stacks/optimism/aws-kms-guide/page.mdx similarity index 100% rename from app/build/stacks/op-alt-da/aws-kms-guide/page.mdx rename to app/build/stacks/optimism/aws-kms-guide/page.mdx diff --git a/app/build/stacks/optimism/local-devnet/page.mdx b/app/build/stacks/optimism/local-devnet/page.mdx new file mode 100644 index 00000000000..ad9d6614f95 --- /dev/null +++ b/app/build/stacks/optimism/local-devnet/page.mdx @@ -0,0 +1,130 @@ +# Local OP Stack devnet + +This guide will teach you how to spin up a complete local OP Stack rollup with Celestia DA for testing. + +**What `pop-deployer` does:** It spins up a temporary Anvil instance, deploys all OP Stack contracts (`SystemConfig`, `L1CrossDomainMessenger`, `OptimismPortal`, etc.), captures the chain state to a snapshot, then packages everything into a tarball. When you run the bundle, Anvil loads the pre-deployed state instantly - no waiting for contract deployments. + +import { Steps } from "nextra/components"; + +## Prerequisites + +See [overview of Popsigner and Popkins](/build/stacks/optimism/popkins-popsigner#overview). + +## Option 1: In the UI + + + +### Log in to Popkins + +Go to https://popkins.popsigner.com and login. + +### Set up the local chain + + + +#### New chain + +Click "+ NEW CHAIN" in the top right of the Popkins UI. + +Select "POPKINS BUNDLE" and click continue: + +![1.deploy-new-chain](/img/build/stacks/optimism/popkins-popsigner/1.deploy-new-chain.png) + +#### Pick stack + +Then select "OP STACK", put a chain name and chain ID into the fields, and click "πŸš€ CREATE BUNDLE". + +![2.pick_op](/img/build/stacks/optimism/popkins-popsigner/2.pick_op.png) + +#### Wait for bundle generation + +Wait for the bundle to be generated: + +![3.wait-for-deploy.png](/img/build/stacks/optimism/popkins-popsigner/3.wait-for-deploy.png) + +#### Review details +After it has generated, review the details: + +![4.download-bundle](/img/build/stacks/optimism/popkins-popsigner/4.download-bundle.png) + +![4.1.look-at-details](/img/build/stacks/optimism/popkins-popsigner/4.1.look-at-details.png) + + + +### Download the bundle + +Download the bundle by clicking the "DOWNLOAD BUNDLE" button. + +![5.download](/img/build/stacks/optimism/popkins-popsigner/5.download.png) + +### Extract the tarball + +Extract the tarball by running the following command: + +```bash +unzip my-local-devnet-pop-bundle-artifacts.tar.gz +cd my-local-devnet-pop-bundle-artifacts +``` + +Set up the `.env`: + +```bash +cp .env.example .env +``` + +### Run the bundle + +Run the bundle by running the following command: + +```bash +docker compose up -d +``` + + + +## Option 2: In the terminal + + +### Clone Popsigner + +```bash +git clone https://github.com/celestiaorg/popsigner.git +``` + +### Build the bundle generator + +```bash +cd popsigner/control-plane/cmd/pop-deployer +go build -o pop-deployer . +``` + +### Generate the pre-deployed bundle + +```bash +./pop-deployer --stack opstack +``` + +### Extract and run + +The bundle comes with all contracts already deployed and configured - just extract and run. + +```bash +tar xzf opstack-local-devnet-bundle.tar.gz +docker compose up -d +``` + +Verify it's running: + +```bash +cast block-number --rpc-url http://localhost:8545 +# 55 +``` + +This starts: +- **Anvil** - L1 chain with pre-deployed OP Stack contracts +- **OP-Geth** - L2 execution client +- **OP-Node** - L2 consensus/derivation +- **Localestia** - Mock Celestia DA layer +- **POPSigner-Lite** - Local signing service + + diff --git a/app/build/stacks/op-alt-da/introduction/page.mdx b/app/build/stacks/optimism/op-alt-da/page.mdx similarity index 98% rename from app/build/stacks/op-alt-da/introduction/page.mdx rename to app/build/stacks/optimism/op-alt-da/page.mdx index 12c5beb9a1e..918942023b8 100644 --- a/app/build/stacks/op-alt-da/introduction/page.mdx +++ b/app/build/stacks/optimism/op-alt-da/page.mdx @@ -1,4 +1,4 @@ -# Introduction +# OP Stack with Celestia DA ## Overview @@ -24,4 +24,4 @@ The [Celestia fork](https://github.com/celestiaorg/optimism/blob/celestia-develo ## Resources - [op-alt-da repository](https://github.com/celestiaorg/op-alt-da) -- [Celestia OP Stack fork](https://github.com/celestiaorg/optimism) \ No newline at end of file +- [Celestia OP Stack fork](https://github.com/celestiaorg/optimism) diff --git a/app/build/stacks/optimism/popkins-popsigner/page.mdx b/app/build/stacks/optimism/popkins-popsigner/page.mdx new file mode 100644 index 00000000000..355589704bb --- /dev/null +++ b/app/build/stacks/optimism/popkins-popsigner/page.mdx @@ -0,0 +1,325 @@ +# How to deploy an OP Stack rollup with Docker, Popsigner, and Popkins + +## Overview + +OP Stack, the stack behind Optimism, allows you to run rollups that post data to Celestia instead of Ethereum by using op-alt-da. Learn more in [the overview of op-alt-da](/build/stacks/optimism/op-alt-da/). In this tutorial, you’ll learn how to run an OP stack rollup using: + +- **[Popsigner](https://github.com/celestiaorg/popsigner)** for key management. Popsigner is a great way to create, manage, and revoke keys, or even export them if you’d like. +- **[Popkins](https://popkins.popsigner.com/)** for deploying contracts and chain setup. Popkins sets up your keys from Popsigner for rollup deployment, deploys your contracts, and gives you the bundle to run your rollup locally. +- **Docker** for the devops of running your rollup bundle. + +In order to get started, you will need a basic understanding of a few components with accounts you will create that make up this stack: + +1. **deployer**: Deploys and configures L1 contracts. Needs most ETH for gas. +2. **batcher**: This account submits L2 transaction batches to L1. Needs ongoing ETH. +3. **proposer**: Submits L2 state roots to L1 for withdrawals. +4. **celestia**: This account posts data to Celestia’s Mocha testnet + +With these four components and accounts combined, you will be able to run an OP Stack rollup that posts to Celestia for data availability! Let’s get started. + +## Environment setup + +This tutorial has been tested on MacOS and Linux (Ubuntu 24.04). + +Before you run OP stack, you’ll need: + +1. Docker installed and running locally. +2. An Ethereum Sepolia RPC endpoint from a provider like [Quicknode](https://www.quicknode.com/), [Alchemy](https://www.alchemy.com/), or [Infura](https://www.infura.io/) +3. A Celestia Mocha testnet RPC and gRPC endpoint from [Quicknode](https://www.quicknode.com/) for posting and retrieving blobs + +That’s it for now! Let’s get everything else set up. + +import { Steps } from "nextra/components"; + + + +## Setting up keys on Popsigner + +First, you’ll set up the keys for the batcher, deployer, proposer, and Celestia. This will allow us to deploy the rollup through Popkins and then start it locally, posting blobs to Celestia. + +1. Go to [https://popsigner.com/](https://popsigner.com/) and make an account by clicking β€œDeploy”: + + ![popsigner1](/img/build/stacks/optimism/popkins-popsigner/popsigner1.png) + +2. Once you’re logged in, click β€œCREATE_KEY” in the top right: + + ![popsigner2](/img/build/stacks/optimism/popkins-popsigner/popsigner2.png) + +3. Make 4 keys, all universal for simplicity: + 1. deploy-1 + 2. batcher-1 + 3. proposer-1 + 4. celestia-1 + + ![popsigner3](/img/build/stacks/optimism/popkins-popsigner/popsigner3.png) + +## Funding keys + +Now that you’ve set the keys up, you need to fund 3 of the addresses accordingly. + +1. Find the addresses in your dashboard, for Ethereum Sepolia keys, copy the 0x address: + + ![popsigner4](/img/build/stacks/optimism/popkins-popsigner/popsigner4.png) + + and click β€œVIEW” to see the Celestia address: + + ![popsigner5](/img/build/stacks/optimism/popkins-popsigner/popsigner5.png) +2. Deployer key: `deploy-1` (or whatever you named this) + 1. Here’s my example address: `0x7C7ece049b23b68D8c4a087f5252040B61F9fAe8` + 2. Fund the `deploy-1` with at least 1 sepoliaETH +3. Batcher key: `batcher-1` + 1. Here's my example address: `0xDB00E7dfd960bD8C497807f07fa161016a4900F3` + 2. Fund the `batcher-1` with at least 0.5 sepoliaETH +4. Proposer key: `proposer-1` + 1. Here’s my example address: `0xd66a3047fcFd200b36F8c8Da1a4B1d4Ddb497c6C` + 2. You only need to fund this key if you plan to make withdrawals from the L2 to L1. +5. Celestia key: + 1. Here’s my example address: `celestia1su2l6v5a0cj6yg05gp9cuvfen74t8u8rvck836` + 2. Fund the `celestia-1` address with 10 Mocha TIA from the [faucet](https://celenium.io/faucet) + +## Setting up deployment on Popkins + +Next, you’re ready to sign in to [Popkins](https://popkins.popsigner.com/deployments) and begin your first rollup deployment with an OP Stack chain. + +1. Click β€œ+ NEW CHAIN” button in the top right corner and select OP Stack as the stack. + + ![popsigner6](/img/build/stacks/optimism/popkins-popsigner/popsigner6.png) + +2. Set up your config for the new chain! Pick a rollup name and ID that you want to use. This is where you’ll also put in the Ethereum Sepolia RPC URL from the environment setup. + + ![popsigner7](/img/build/stacks/optimism/popkins-popsigner/popsigner7.png) + +3. Click β€œCONTINUE”, then assign keys accordingly: + 1. Deployer key: `deploy-1` (or whatever you setup for this) + 2. Batcher key: `batcher-1` + 3. Proposer key: `proposer-1` + 4. You’ll set the Celestia key up later in the `.env` + + Then click β€œCONTINUE” again: + + ![popsigner8](/img/build/stacks/optimism/popkins-popsigner/popsigner8.png) + +4. Once you’ve set up the config, double-check the values before proceeding! Make sure you have 1 sepoliaETH in the deploy key and 0.5 sepoliaETH in the batcher key, and 10 mochaTIA in your Celestia account. + 1. Click β€œπŸš€Β DEPLOY CHAIN” + + ![popsigner9](/img/build/stacks/optimism/popkins-popsigner/popsigner9.png) + +5. Keep an eye out on the process as it completes. Once it’s finished, you will be able to download the config to run your rollup with Docker compose. + + ![popsigner10](/img/build/stacks/optimism/popkins-popsigner/popsigner10.png) + +6. Click β€œBACK TO MY CHAINS” + + ![popsigner11](/img/build/stacks/optimism/popkins-popsigner/popsigner11.png) + +7. Go to the chain you just set up. Download the bundle by clicking β€œDOWNLOAD ARTIFACTS” + + ![popsigner12](/img/build/stacks/optimism/popkins-popsigner/popsigner12.png) + +## Running locally with Docker + +Now that you’ve set the rollup up by deploying contracts and downloading the artifacts, you’re ready to run it on your own and start producing blocks! Let’s start by making some config changes. + +1. Set up API key on [Popsigner.com](https://popsigner.com). This is different than creating a key for a blockchain account. Save this for the next step in your clipboard. You’ll only be able to see it once, for safe security practice. + + ![popsigner13](/img/build/stacks/optimism/popkins-popsigner/popsigner13.png) + +2. Copy `.env.example` into `.env` to put in your environment variables: + 1. Fill in the Popsigner API key in your `.env` after copying it in step 1: + + ``` + # Your POPSigner API key (get from dashboard.popsigner.com) + POPSIGNER_API_KEY= + ``` + + Here’s what mine looks like: + + ``` + POPSIGNER_API_KEY=bbr_live_7Kp3xM9nR2bQ4sL8wXy6Zv1a + ``` + + 2. Next, fill in the Celestia information: + 1. To find your Key ID, go to the Celestia key in Popsigner, click β€œView”, and copy the β€œKEY_ID”: + + ``` + # Your Celestia key ID from POPSigner (UUID format) + CELESTIA_KEY_ID= + ``` + + Here’s what mine looks like: + + ``` + CELESTIA_KEY_ID=7f4a8c21-b9e3-4d6e-ac52-1e8f9d3c7b65 + ``` + + 2. For the bridge/light node RPC, use Quicknode: + + ``` + # Celestia Bridge/Light Node RPC (for reading blobs) + # Example: https://your-provider.celestia-mocha.quiknode.pro/your-token/ + CELESTIA_BRIDGE_ADDR= + CELESTIA_BRIDGE_AUTH_TOKEN= + ``` + + Here’s what mine looks like: + + ``` + CELESTIA_BRIDGE_ADDR=https://delicate-sleek-lambo.celestia-mocha.quiknode.pro/8d7f3e5a9b2c4f1e6d8c9a5b7e4f2c1a6d3b9e5f/ + CELESTIA_BRIDGE_AUTH_TOKEN= + ``` + + 3. For the core gRPC, use the same Quicknode endpoint, constructed slightly differently β€” no `https://`, add port 9090: + + ``` + # Celestia Core gRPC (for submitting blobs) + # Example: your-provider.celestia-mocha.quiknode.pro:9090 + CELESTIA_GRPC_ADDR= + CELESTIA_GRPC_AUTH_TOKEN= + ``` + + Here’s what mine looks like: + + ``` + CELESTIA_GRPC_ADDR=delicate-sleek-lambo.celestia-mocha.quiknode.pro:9090 + CELESTIA_GRPC_AUTH_TOKEN=8d7f3e5a9b2c4f1e6d8c9a5b7e4f2c1a6d3b9e5f + ``` + + 4. Lastly, set the namespace. Celestia namespaces are 29 bytes (58 hex characters). Version 0 namespaces require 18 leading zero bytes (36 hex zeros), leaving 11 bytes (22 hex characters) for your namespace ID: + + ``` + # Celestia namespace (29 bytes / 58 hex chars) + CELESTIA_NAMESPACE=0000000000000000000000000000000000000009d94e20cae97add6d34 + ``` + + 5. You can autogenerate a random namespace with: + + ```bash + export CELESTIA_NAMESPACE=$(printf '%036d' 0)$(openssl rand -hex 11) && echo $CELESTIA_NAMESPACE + ``` + + 3. Lastly, change the Popsigner RPC URL to: + + ``` + # POPSigner RPC endpoint (for op-node, op-batcher signing) + POPSIGNER_RPC_URL=https://rpc.popsigner.com + ``` + +3. Open up `config.toml` and set the variables accordingly: + 1. For namespace, update from: + + ``` + [celestia] + # Celestia namespace (29 bytes / 58 hex chars, version 0 requires 18 leading zero bytes) + namespace = "0x706f7000000000016942" + ``` + + To this, the same way you did in `.env`: + + ``` + [celestia] + # Celestia namespace (29 bytes / 58 hex chars, version 0 requires 18 leading zero bytes) + namespace = "0000000000000000000000000000000000000009d94e20cae97add6d34" + ``` + + 2. For bridge node for reading blobs, update from: + + ``` + # ------------------------------------------------------------------------------ + # Bridge Node (for reading blobs) + # ------------------------------------------------------------------------------ + bridge_addr = "${CELESTIA_BRIDGE_ADDR}" + bridge_auth_token = "${CELESTIA_BRIDGE_AUTH_TOKEN}" + bridge_tls_enabled = false + ``` + + To your Quicknode endpoint, similarly to how you did in `.env`: + + ``` + # ------------------------------------------------------------------------------ + # Bridge Node (for reading blobs) + # ------------------------------------------------------------------------------ + bridge_addr = "https://delicate-sleek-lambo.celestia-mocha.quiknode.pro/8d7f3e5a9b2c4f1e6d8c9a5b7e4f2c1a6d3b9e5f/" + bridge_auth_token = "" + bridge_tls_enabled = true + ``` + + 3. For core gRPC node for submitting blobs, update from: + + ``` + # ------------------------------------------------------------------------------ + # Core gRPC (for submitting blobs) + # ------------------------------------------------------------------------------ + core_grpc_addr = "${CELESTIA_GRPC_ADDR}" + core_grpc_auth_token = "${CELESTIA_GRPC_AUTH_TOKEN}" + core_grpc_tls_enabled = true + ``` + + To your Quicknode endpoint, similarly to how you did in `.env`: + + ``` + # ------------------------------------------------------------------------------ + # Core gRPC (for submitting blobs) + # ------------------------------------------------------------------------------ + core_grpc_addr = "delicate-sleek-lambo.celestia-mocha.quiknode.pro:9090" + core_grpc_auth_token = "8d7f3e5a9b2c4f1e6d8c9a5b7e4f2c1a6d3b9e5f" + core_grpc_tls_enabled = true + ``` + + 4. For POPSigner configuration update from: + + ``` + # ------------------------------------------------------------------------------ + # POPSigner Configuration + # ------------------------------------------------------------------------------ + # Keys remain remote. You remain sovereign. + + [celestia.signer.popsigner] + api_key = "${POPSIGNER_API_KEY}" + key_id = "${CELESTIA_KEY_ID}" + base_url = "https://api.popsigner.com/" + ``` + + To your API key and Key ID for your POPSigner keys, similarly to how you did in `.env`: + + ``` + # ------------------------------------------------------------------------------ + # POPSigner Configuration + # ------------------------------------------------------------------------------ + # Keys remain remote. You remain sovereign. + + [celestia.signer.popsigner] + api_key = "bbr_live_7Kp3xM9nR2bQ4sL8wXy6Zv1a" + key_id = "7f4a8c21-b9e3-4d6e-ac52-1e8f9d3c7b65" + base_url = "https://api.popsigner.com/" + ``` + +4. Now you’re ready to run this with Docker! + 1. If you are on ARM/MacOS, update the image in `docker-compose.yaml` to: + + ``` + image: rg.nl-ams.scw.cloud/banhbao/op-alt-da:v0.10.1 + ``` + + 2. If you are on Linux/AMD64, update the image in `docker-compose.yaml` to: + + ``` + image: rg.nl-ams.scw.cloud/banhbao/op-alt-da:v0.10.1-amd64 + ``` + +5. Just run `docker-compose up` and watch the magic happen 😎 + 1. On Linux, use `docker-compose --env-file .env up` to load the `.env` + 1. Else, you will have many missing variables: + + ```bash + WARNING: The L1_RPC_URL variable is not set. Defaulting to a blank string. + WARNING: The L1_BEACON_URL variable is not set. Defaulting to a blank string. + WARNING: The POPSIGNER_RPC_URL variable is not set. Defaulting to a blank string. + WARNING: The BATCHER_ADDRESS variable is not set. Defaulting to a blank string. + WARNING: The POPSIGNER_API_KEY variable is not set. Defaulting to a blank string. + WARNING: The DISPUTE_GAME_FACTORY_ADDRESS variable is not set. Defaulting to a blank string. + WARNING: The PROPOSER_ADDRESS variable is not set. Defaulting to a blank string. + ``` + + + +Congratulations! You’re now running your first OP Stack rollup with Celestia for DA. diff --git a/public/img/build/stacks/nitro/popkins-popsigner/1.pick-nitro.png b/public/img/build/stacks/nitro/popkins-popsigner/1.pick-nitro.png new file mode 100644 index 00000000000..50a603a5a12 Binary files /dev/null and b/public/img/build/stacks/nitro/popkins-popsigner/1.pick-nitro.png differ diff --git a/public/img/build/stacks/nitro/popkins-popsigner/2.chain-info.png b/public/img/build/stacks/nitro/popkins-popsigner/2.chain-info.png new file mode 100644 index 00000000000..584c9eaaf34 Binary files /dev/null and b/public/img/build/stacks/nitro/popkins-popsigner/2.chain-info.png differ diff --git a/public/img/build/stacks/nitro/popkins-popsigner/3.pick-keys.png b/public/img/build/stacks/nitro/popkins-popsigner/3.pick-keys.png new file mode 100644 index 00000000000..b9bd3c16826 Binary files /dev/null and b/public/img/build/stacks/nitro/popkins-popsigner/3.pick-keys.png differ diff --git a/public/img/build/stacks/nitro/popkins-popsigner/4.deploy-chain.png b/public/img/build/stacks/nitro/popkins-popsigner/4.deploy-chain.png new file mode 100644 index 00000000000..994daf184a0 Binary files /dev/null and b/public/img/build/stacks/nitro/popkins-popsigner/4.deploy-chain.png differ diff --git a/public/img/build/stacks/nitro/popkins-popsigner/5.download-bundle.png b/public/img/build/stacks/nitro/popkins-popsigner/5.download-bundle.png new file mode 100644 index 00000000000..15bbe702cb4 Binary files /dev/null and b/public/img/build/stacks/nitro/popkins-popsigner/5.download-bundle.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/1.deploy-new-chain.png b/public/img/build/stacks/optimism/popkins-popsigner/1.deploy-new-chain.png new file mode 100644 index 00000000000..14c0d3b4a14 Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/1.deploy-new-chain.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/2.pick_nitro.png b/public/img/build/stacks/optimism/popkins-popsigner/2.pick_nitro.png new file mode 100644 index 00000000000..13b3bb2c24e Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/2.pick_nitro.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/2.pick_op.png b/public/img/build/stacks/optimism/popkins-popsigner/2.pick_op.png new file mode 100644 index 00000000000..31e50dedb62 Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/2.pick_op.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/3.wait-for-deploy-nitro.png b/public/img/build/stacks/optimism/popkins-popsigner/3.wait-for-deploy-nitro.png new file mode 100644 index 00000000000..205ba06e06a Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/3.wait-for-deploy-nitro.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/3.wait-for-deploy.png b/public/img/build/stacks/optimism/popkins-popsigner/3.wait-for-deploy.png new file mode 100644 index 00000000000..ea39dc6d54e Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/3.wait-for-deploy.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/4.1.look-at-details-nitro.png b/public/img/build/stacks/optimism/popkins-popsigner/4.1.look-at-details-nitro.png new file mode 100644 index 00000000000..242be111d8e Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/4.1.look-at-details-nitro.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/4.1.look-at-details.png b/public/img/build/stacks/optimism/popkins-popsigner/4.1.look-at-details.png new file mode 100644 index 00000000000..f9f4b258a14 Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/4.1.look-at-details.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/4.download-bundle-nitro.png b/public/img/build/stacks/optimism/popkins-popsigner/4.download-bundle-nitro.png new file mode 100644 index 00000000000..b3f8165c75d Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/4.download-bundle-nitro.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/4.download-bundle.png b/public/img/build/stacks/optimism/popkins-popsigner/4.download-bundle.png new file mode 100644 index 00000000000..fd7c0aafaa4 Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/4.download-bundle.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/5.download.png b/public/img/build/stacks/optimism/popkins-popsigner/5.download.png new file mode 100644 index 00000000000..ff6d7de013e Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/5.download.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/popsigner1.png b/public/img/build/stacks/optimism/popkins-popsigner/popsigner1.png new file mode 100644 index 00000000000..ae0fb5e007b Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/popsigner1.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/popsigner10.png b/public/img/build/stacks/optimism/popkins-popsigner/popsigner10.png new file mode 100644 index 00000000000..ff2d1a2e746 Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/popsigner10.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/popsigner11.png b/public/img/build/stacks/optimism/popkins-popsigner/popsigner11.png new file mode 100644 index 00000000000..15e52039f4c Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/popsigner11.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/popsigner12.png b/public/img/build/stacks/optimism/popkins-popsigner/popsigner12.png new file mode 100644 index 00000000000..27d71c18b67 Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/popsigner12.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/popsigner13.png b/public/img/build/stacks/optimism/popkins-popsigner/popsigner13.png new file mode 100644 index 00000000000..9ad48c7baaa Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/popsigner13.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/popsigner2.png b/public/img/build/stacks/optimism/popkins-popsigner/popsigner2.png new file mode 100644 index 00000000000..9b8926ef368 Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/popsigner2.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/popsigner3.png b/public/img/build/stacks/optimism/popkins-popsigner/popsigner3.png new file mode 100644 index 00000000000..370a2e0cd39 Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/popsigner3.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/popsigner4.png b/public/img/build/stacks/optimism/popkins-popsigner/popsigner4.png new file mode 100644 index 00000000000..b3a5729fc48 Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/popsigner4.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/popsigner5.png b/public/img/build/stacks/optimism/popkins-popsigner/popsigner5.png new file mode 100644 index 00000000000..4676a75c311 Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/popsigner5.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/popsigner6.png b/public/img/build/stacks/optimism/popkins-popsigner/popsigner6.png new file mode 100644 index 00000000000..a36c01e61b4 Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/popsigner6.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/popsigner7.png b/public/img/build/stacks/optimism/popkins-popsigner/popsigner7.png new file mode 100644 index 00000000000..f9295c5731b Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/popsigner7.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/popsigner8.png b/public/img/build/stacks/optimism/popkins-popsigner/popsigner8.png new file mode 100644 index 00000000000..79e70ce5667 Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/popsigner8.png differ diff --git a/public/img/build/stacks/optimism/popkins-popsigner/popsigner9.png b/public/img/build/stacks/optimism/popkins-popsigner/popsigner9.png new file mode 100644 index 00000000000..4f25f6f5772 Binary files /dev/null and b/public/img/build/stacks/optimism/popkins-popsigner/popsigner9.png differ diff --git a/yarn.lock b/yarn.lock index 989d21bfc40..cc26739fcb3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -228,7 +228,7 @@ "@emnapi/wasi-threads@1.1.0", "@emnapi/wasi-threads@^1.1.0": version "1.1.0" - resolved "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz#60b2102fddc9ccb78607e4a3cf8403ea69be41bf" integrity sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ== dependencies: tslib "^2.4.0"