コンテンツにスキップ

OPスタック L2チェーン

Sunriseのデータ可用性レイヤーは、OP Stackを使用して作成されたレイヤー2ブロックチェーンをサポートしています。 これは、OP Stackを使用して作成されたL2チェーンをSunrise DataでSunriseチェーンに接続するためのガイドです。データ可用性レイヤーは、Sunrise v0.3.0以降でサポートされています。

このバージョンのOPスタックでは、L1 EVMチェーンの運用が必要です。何らかのテストネットまたはローカルチェーンを使用してください。

例として、OP Stackを使用してL2チェーンを作成し、Sunriseのデータ可用性レイヤーで実行する方法を以下に示します。

このガイドでは、OPスタックの要件を満たすためにEthereum Sepoliaテストネットを使用していますが、ローカルEVMチェーンでも動作します。

sequenceDiagram
   autonumber
   L2 ->> Ethereum Sepolia: トランザクションを送信(例:トークン転送)
   Ethereum Sepolia --> L2: APIとトランザクションの応答
   L2 ->> Sunrise: ブロックデータを送信して保存

Ubuntu 22.04の依存関係と一般的なインストール手順。

  • node

    ターミナル
    curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && sudo apt-get install -y nodejs
  • pnpm

    ターミナル
    curl -fsSL https://get.pnpm.io/install.sh | sh -
  • foundry

    ターミナル
    curl -L https://foundry.paradigm.xyz | bash
  • just

    ターミナル
    wget -qO - 'https://proget.makedeb.org/debian-feeds/prebuilt-mpr.pub' | gpg --dearmor | sudo tee /usr/share/keyrings/prebuilt-mpr-archive-keyring.gpg 1> /dev/null
    echo "deb [arch=all,$(dpkg --print-architecture) signed-by=/usr/share/keyrings/prebuilt-mpr-archive-keyring.gpg] https://proget.makedeb.org prebuilt-mpr $(lsb_release -cs)" | sudo tee /etc/apt/sources.list.d/prebuilt-mpr.list
    sudo apt update
    sudo apt install just
  1. optimismリポジトリをクローンします

    ターミナル
    git clone https://github.com/ethereum-optimism/optimism.git
  2. 正しいブランチをチェックアウトします

    ターミナル
    cd optimism
    git checkout v1.9.1

ドキュメント更新時点で最新バージョンでの動作を確認しています。他のバージョンを使用する場合は、差異を確認してください。

  1. すべての依存関係があることを確認するために以下を実行します

    ターミナル
    ./packages/contracts-bedrock/scripts/getting-started/versions.sh
  2. Optimismに関連するすべてのパッケージをビルドします

    ターミナル
    make op-node op-batcher op-proposer

    この手順で問題が発生した場合は、バージョンがoptimismのドキュメントと一致していることを確認してください。具体的には、goのバージョンをダウングレードする必要がある場合があります。

  3. op-gethをクローンしてビルドします

    ターミナル
    cd ~
    git clone https://github.com/ethereum-optimism/op-geth.git
    cd op-geth
    make geth

サポートされているop-gethの詳細については、optimismリポジトリのProduction Releasesを確認してください。

  1. 環境変数を入力します

    ターミナル
    cd ~/optimism
    cp .envrc.example .envrc

    optimismリポジトリで次のコマンドを使用してアドレスを生成するスクリプトを実行します: ./packages/contracts-bedrock/scripts/getting-started/wallets.sh

    出力は次のようになり、これを環境ファイルに貼り付ける必要があります:

    ターミナル
    ##################################################
    # はじめに #
    ##################################################
    # 管理者アカウント
    export GS_ADMIN_ADDRESS=0x82eeB61600f290ce3F9400d345aAEcBe5faF7AEB
    export GS_ADMIN_PRIVATE_KEY=0x7c726817d047ee62cbb060312fe2620ba5462495e34f7e8279ba22faa96bca20
    # バッチャーアカウント
    export GS_BATCHER_ADDRESS=0x7BECbC4C747922d92e4F917951D9D8c3Ada7eb60
    export GS_BATCHER_PRIVATE_KEY=0xc7dfaa7b8449f00480196377da50d29318b2397fd0296d0ab4f11d48ee3cf723
    # 提案者アカウント
    export GS_PROPOSER_ADDRESS=0x773F4527fECc889d6DD3Cd7d044F4AC1Ad765a31
    export GS_PROPOSER_PRIVATE_KEY=0xed6029a5928e83c5d2a28d9574304bae9a825e19f7f18a50d34edc13b505afed
    # シーケンサーアカウント
    export GS_SEQUENCER_ADDRESS=0x2B43c41FCbabc5437A6E1B97F47cA085a4B16f61
    export GS_SEQUENCER_PRIVATE_KEY=0x0a7d4ce467fe4d00b8930215c98335e06c16db34cd501c8c3f3173015487662e
    ##################################################
    # チェーン情報 #
    ##################################################
    # L1チェーン情報
    export L1_CHAIN_ID=11155111
    export L1_BLOCK_TIME=12
    # L2チェーン情報
    export L2_CHAIN_ID=42069
    export L2_BLOCK_TIME=2
    ##################################################
    # op-node設定 #
    ##################################################
    # RPCプロバイダーの種類。最適なトランザクションレシートの
    # 取得方法を通知するために使用されます。有効なオプション:alchemy、quicknode、infura、parity、nethermind、
    # debug_geth、erigon、basic、any。
    export L1_RPC_KIND=infura
    ##################################################
    # コントラクトのデプロイ #
    ##################################################
    # 対話するL1ネットワークのRPC URL
    export L1_RPC_URL=https://sepolia.infura.io/v3/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    RPC URLのAPIキーはInfuraまたは他のプロバイダーで見つけることができます。

  2. 十分なSepolia ETHでアドレスに資金を供給します。optimismのドキュメントでは以下を推奨しています:

    • 管理者 — 0.5 Sepolia ETH
    • 提案者 — 0.2 Sepolia ETH
    • バッチャー — 0.1 Sepolia ETH

    参照:Sepolia PoW Faucet

  3. direnvで環境変数をロードします direnv allow その後、次のようなものが表示されるはずです:

    ターミナル
    direnv: loading ~/optimism/.envrc direnv: export +DEPLOYMENT_CONTEXT +ETHERSCAN_API_KEY +GS_ADMIN_ADDRESS +GS_ADMIN_PRIVATE_KEY +GS_BATCHER_ADDRESS +GS_BATCHER_PRIVATE_KEY +GS_PROPOSER_ADDRESS +GS_PROPOSER_PRIVATE_KEY +GS_SEQUENCER_ADDRESS +GS_SEQUENCER_PRIVATE_KEY +IMPL_SALT +L1_RPC_KIND +L1_RPC_URL +PRIVATE_KEY +TENDERLY_PROJECT +TENDERLY_USERNAME

    何も出力されない場合は、試してください

    nano ~/.zshrc

    nano ~/.bashrc

    bashとzshのどちらを使用するかに応じて、次の行を追加します

    ターミナル
    eval "$(direnv hook zsh)"
    ターミナル
    eval "$(direnv hook bash)"

    変更を保存します

    source ~/.zshrc

    source ~/.bashrc

  4. ネットワークを設定します

    ターミナル
    cd ~/optimism/packages/contracts-bedrock
    ./scripts/getting-started/config.sh

    **deploy-config/getting-started.json**ファイルで設定を表示できます 生成された設定の末尾に以下を追加します

    ターミナル
    nano deploy-config/getting-started.json
    ...
    "preimageOracleMinProposalSize": 1800000,
    "preimageOracleChallengePeriod": 300,
    "useAltDA": true,
    "daCommitmentType": "GenericCommitment",
    "daChallengeWindow": 160,
    "daResolveWindow": 160,
    "daBondSize": 1000000,
    "daResolverRefundPercentage": 0
    }
  5. L1コントラクトをデプロイします

    ターミナル
    just install
    DEPLOYMENT_OUTFILE=deployments/artifact.json \
    DEPLOY_CONFIG_PATH=deploy-config/getting-started.json \
    forge script scripts/deploy/Deploy.s.sol:Deploy \
    --broadcast --private-key $GS_ADMIN_PRIVATE_KEY \
    --rpc-url $L1_RPC_URL --slow

    L2 Allocs

    ターミナル
    CONTRACT_ADDRESSES_PATH=deployments/artifact.json \
    DEPLOY_CONFIG_PATH=deploy-config/getting-started.json \
    STATE_DUMP_PATH=deploy-config/statedump.json \
    forge script scripts/L2Genesis.s.sol:L2Genesis \
    --sig 'runWithStateDump()' \
    --chain 42069

    --chainにL2チェーンIDを使用してください。

    EvmError: RevertScript failedを含む不明なエラーが表示された場合は、IMPL_SALT環境変数を変更する必要がある可能性があります。この変数は、CREATE2(新しいタブで開く)を介してデプロイされるさまざまなスマートコントラクトのアドレスを決定します。同じIMPL_SALTを使用して同じコントラクトを2回デプロイすると、2回目のデプロイは失敗します。Optimism Monorepoのどこでもdirenv allowを実行することで、新しいIMPL_SALTを生成できます。

  6. L2設定ファイルを生成します

    ターミナル
    cd ~/optimism/op-node
    ./bin/op-node genesis l2 \
    --deploy-config ../packages/contracts-bedrock/deploy-config/getting-started.json \
    --l1-deployments ../packages/contracts-bedrock/deployments/artifact.json \
    --outfile.l2 genesis.json \
    --outfile.rollup rollup.json \
    --l1-rpc $L1_RPC_URL \
    --l2-allocs ../packages/contracts-bedrock/deploy-config/statedump.json

    生成されたrollup.jsonの末尾を確認します

    "alt_da": {
    "da_challenge_contract_address": "0x0000000000000000000000000000000000000000",
    "da_commitment_type": "GenericCommitment",
    "da_challenge_window": 160,
    "da_resolve_window": 160
    }
  7. 認証キーを作成します

    ターミナル
    openssl rand -hex 32 > jwt.txt
  8. genesisファイルをop-gethディレクトリにコピーします

    ターミナル
    cp genesis.json ~/op-geth
    cp jwt.txt ~/op-geth
  9. op-gethを初期化します

    ターミナル
    cd ~/op-geth
    mkdir datadir
    make geth
    build/bin/geth init --datadir=datadir genesis.json

optimismを開始する前に、sunrisedsunrise-dataなどを設定してください。

Sunrise Data

  1. op-gethを開始します

    ターミナル
    ./build/bin/geth \
    --datadir ./datadir \
    --http \
    --http.corsdomain="*" \
    --http.vhosts="*" \
    --http.addr=0.0.0.0 \
    --http.port=9545 \
    --http.api=web3,debug,eth,txpool,net,engine \
    --ws \
    --ws.addr=0.0.0.0 \
    --ws.port=9546 \
    --ws.origins="*" \
    --ws.api=debug,eth,txpool,net,engine \
    --syncmode=full \
    --nodiscover \
    --maxpeers=0 \
    --networkid=42069 \
    --authrpc.vhosts="*" \
    --authrpc.addr=0.0.0.0 \
    --authrpc.port=9551 \
    --authrpc.jwtsecret=./jwt.txt \
    --rollup.disabletxpoolgossip=true
  2. op-nodeを開始します

    ターミナル
    cd ~/optimism/op-node
    ./bin/op-node \
    --l2=http://localhost:9551 \
    --l2.jwt-secret=./jwt.txt \
    --sequencer.enabled \
    --sequencer.l1-confs=5 \
    --verifier.l1-confs=4 \
    --rollup.config=./rollup.json \
    --rpc.addr=0.0.0.0 \
    --rpc.port=8547 \
    --p2p.disable \
    --rpc.enable-admin \
    --p2p.sequencer.key=$GS_SEQUENCER_PRIVATE_KEY \
    --l1=$L1_RPC_URL \
    --l1.rpckind=$L1_RPC_KIND \
    --altda.enabled=true \
    --altda.da-server=http://localhost:3100 \
    --altda.da-service=true \
    --l1.beacon.ignore=true

    —altda.da-serverは、da-sererのhttp URLです

  3. op-batcherを開始します

    ターミナル
    cd ~/optimism/op-batcher
    ./bin/op-batcher \
    --l2-eth-rpc=http://localhost:9545 \
    --rollup-rpc=http://localhost:8547 \
    --poll-interval=1s \
    --sub-safety-margin=6 \
    --num-confirmations=1 \
    --safe-abort-nonce-too-low-count=3 \
    --resubmission-timeout=30s \
    --rpc.addr=0.0.0.0 \
    --rpc.port=8548 \
    --rpc.enable-admin \
    --max-channel-duration=1 \
    --l1-eth-rpc=$L1_RPC_URL \
    --private-key=$GS_BATCHER_PRIVATE_KEY \
    --altda.enabled=true \
    --altda.da-service=true \
    --altda.da-server=http://localhost:3100
  4. op-proposerを開始します

    ターミナル
    cd ~/optimism/op-proposer
    ./bin/op-proposer \
    --poll-interval=12s \
    --rpc.port=9560 \
    --rollup-rpc=http://localhost:8547 \
    --l2oo-address=$(cat ../packages/contracts-bedrock/deployments/42069-deploy.json | jq -r .L2OutputOracleProxy) \
    --private-key=$GS_PROPOSER_PRIVATE_KEY \
    --l1-eth-rpc=$L1_RPC_URL
  5. 動作