# ОП Стек

Уровень доступности данных Sunrise поддерживает блокчейны уровня 2, созданные с использованием [стека OP](https://github.com/ethereum-optimism/optimism) . Это руководство по подключению цепочки L2, созданной с использованием стека OP, к цепочке Sunrise с [сервером Sunrise OP DA](https://app.gitbook.com/o/bCIY9H0ipM7G01Bxmgsu/s/IGeWpCPYo9e3ugxWZCjR/~/changes/1/stroit/blokcheiny-l2/server-sunrise-op-da) . Уровень доступности данных поддерживается в Sunrise v0.3.0 и более поздних версиях.

## Как настроить OP-стек <a href="#how-to-set-up-op-stack" id="how-to-set-up-op-stack"></a>

В качестве примера рассмотрим, как использовать OP Stack для создания цепочки L2 для тестовой сети Ethereum Sepolia и запустить ее на уровне доступности данных Sunrise.

<figure><img src="https://3315707819-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIGeWpCPYo9e3ugxWZCjR%2Fuploads%2F0Xm8TfBdmok7OIqVCA9d%2Fimage.png?alt=media&#x26;token=e49bacbf-916a-4b3c-91be-7e51d4270577" alt=""><figcaption></figcaption></figure>

## Зависимости <a href="#dependencies" id="dependencies"></a>

Зависимости и общие инструкции по установке для Ubuntu 22.04.

* узел

```
  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
```

#### Настройка Optimism Rollup Testnet <a href="#set-up-optimism-rollup-testnet" id="set-up-optimism-rollup-testnet"></a>

#### Оптимизм <a href="#optimism" id="optimism"></a>

1. **Клонируйте репозиторий оптимизма**

```
git clone https://github.com/ethereum-optimism/optimism.git
```

Проверьте правильную ветку

```
cd optimism
git checkout v1.9.1
```

Выполните следующее, чтобы проверить наличие всех зависимостей.

```
./packages/contracts-bedrock/scripts/getting-started/versions.sh
```

**Собрать все пакеты, связанные с Оптимизмом**

```
make op-node op-batcher op-proposer
```

1. Если у вас возникли проблемы с этим шагом, убедитесь, что ваши версии соответствуют версиям в документации по оптимизму. В частности, вам может потребоваться понизить версию go до 1.21
2. **Клонировать и собрать op-geth**

```
cd ~
git clone https://github.com/ethereum-optimism/op-geth.git
cd op-geth
make geth
```

Заполните переменные среды

```
cd ~/optimism
cp .envrc.example .envrc
```

Запустите скрипт для генерации адресов с помощью следующей команды в репозитории Optimism:`./packages/contracts-bedrock/scripts/getting-started/wallets.sh`

Вывод будет выглядеть следующим образом, и его также нужно будет вставить в файл среды:

```
##################################################
#                 Getting Started                #
##################################################

# Admin account
export GS_ADMIN_ADDRESS=0x82eeB61600f290ce3F9400d345aAEcBe5faF7AEB
export GS_ADMIN_PRIVATE_KEY=0x7c726817d047ee62cbb060312fe2620ba5462495e34f7e8279ba22faa96bca20

# Batcher account
export GS_BATCHER_ADDRESS=0x7BECbC4C747922d92e4F917951D9D8c3Ada7eb60
export GS_BATCHER_PRIVATE_KEY=0xc7dfaa7b8449f00480196377da50d29318b2397fd0296d0ab4f11d48ee3cf723

# Proposer account
export GS_PROPOSER_ADDRESS=0x773F4527fECc889d6DD3Cd7d044F4AC1Ad765a31
export GS_PROPOSER_PRIVATE_KEY=0xed6029a5928e83c5d2a28d9574304bae9a825e19f7f18a50d34edc13b505afed

# Sequencer account
export GS_SEQUENCER_ADDRESS=0x2B43c41FCbabc5437A6E1B97F47cA085a4B16f61
export GS_SEQUENCER_PRIVATE_KEY=0x0a7d4ce467fe4d00b8930215c98335e06c16db34cd501c8c3f3173015487662e

##################################################
#                Chain Information               #
##################################################

# L1 chain information
export L1_CHAIN_ID=11155111
export L1_BLOCK_TIME=12

# L2 chain information
export L2_CHAIN_ID=42069
export L2_BLOCK_TIME=2

##################################################
#              op-node Configuration             #
##################################################

# The kind of RPC provider, used to inform optimal transactions receipts
# fetching. Valid options: alchemy, quicknode, infura, parity, nethermind,
# debug_geth, erigon, basic, any.
export L1_RPC_KIND=infura

##################################################
#               Contract Deployment              #
##################################################

# RPC URL for the L1 network to interact with
export L1_RPC_URL=https://sepolia.infura.io/v3/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```

1. Ключ API для URL RPC можно найти в [Infura](https://www.infura.io/) или у других поставщиков.
2. **Финансируйте адреса достаточным количеством Sepolia ETH, оптимистичные доктора рекомендуют следующее:**

   * Администратор — 0,5 Sepolia ETH
   * Предлагающий — 0,2 Sepolia ETH
   * Дозатор — 0,1 Sepolia ETH

   Ссылка: [Sepolia PoW Faucet](https://sepolia-faucet.pk910.de/)
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)"
```

1. Сохраните изменения с помощью

   `source ~/.zshrc`

   `source ~/.bashrc`
2. **Настройте сеть**

```
cd ~/optimism/packages/contracts-bedrock
./scripts/getting-started/config.sh
```

Вы можете просмотреть конфигурацию в **`deploy-config/getting-started.json`**&#x444;айле. Добавьте следующее в конец сгенерированной конфигурации.

```
nano **deploy-config/getting-started.json**
```

```
...
  "preimageOracleMinProposalSize": 1800000,
  "preimageOracleChallengePeriod": 300,

  "useAltDA": true,
  "daCommitmentType": "GenericCommitment",
  "daChallengeWindow": 160,
  "daResolveWindow": 160,
  "daBondSize": 1000000,
  "daResolverRefundPercentage": 0
}
```

**Развертывание контрактов 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

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
## YOUR_L2_CHAINID
```

1. > Если вы видите неописуемую ошибку, которая включает `EvmError: Revert`и , `Script failed`то вам, вероятно, нужно изменить `IMPL_SALT`переменную окружения. Эта переменная определяет адреса различных смарт-контрактов, которые развертываются через [CREATE2(открывается в новой вкладке)](https://eips.ethereum.org/EIPS/eip-1014) . Если одно и то же `IMPL_SALT`используется для развертывания одних и тех же контрактов дважды, второе развертывание завершится неудачей. **Вы можете сгенерировать новый `IMPL_SALT`, запустив его `direnv allow`в любом месте Optimism Monorepo.**
2. **Сгенерируйте файлы конфигурации 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
  }
```

**Создать ключ аутентификации**

```
openssl rand -hex 32 > jwt.txt
```

openssl rand -hex 32 > jwt.txt

```
cd ~/op-geth
mkdir datadir
make geth
build/bin/geth init --datadir=datadir genesis.json
```

## Старт L2 <a href="#start-l2" id="start-l2"></a>

## **Прежде чем начать оптимистично, настройте sunrise и sunrise-op-da-server и т. д.**

### [Сервер Sunrise OP DA](https://app.gitbook.com/o/bCIY9H0ipM7G01Bxmgsu/s/IGeWpCPYo9e3ugxWZCjR/~/changes/1/stroit/blokcheiny-l2/server-sunrise-op-da)

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
```

\
**Начинать`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:8000 \
  --altda.da-service=true \
  --l1.beacon.ignore=true
```

1. \--altda.da-server — это http URL вашего da-сервера
2. **Начинать`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:8000
```

**Начинать`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
```

Работа
