Compare commits
14 Commits
main
...
pm-use-for
Author | SHA1 | Date | |
---|---|---|---|
01dbde3239 | |||
71cb9cd459 | |||
87cb522aed | |||
11d1049acf | |||
4661babd13 | |||
eaa23dcf73 | |||
0b0fc0d933 | |||
384c450f61 | |||
16a290c050 | |||
558eb81a7e | |||
d0d59a7125 | |||
e3589ddaa6 | |||
999c211e24 | |||
87030605bd |
@ -17,8 +17,6 @@ services:
|
||||
CERC_L1_ACCOUNTS_CSV_URL: ${CERC_L1_ACCOUNTS_CSV_URL}
|
||||
CERC_L1_ADDRESS: ${CERC_L1_ADDRESS}
|
||||
CERC_L1_PRIV_KEY: ${CERC_L1_PRIV_KEY}
|
||||
CERC_PROPOSER_AMOUNT: ${CERC_PROPOSER_AMOUNT}
|
||||
CERC_BATCHER_AMOUNT: ${CERC_BATCHER_AMOUNT}
|
||||
volumes:
|
||||
- ../config/network/wait-for-it.sh:/app/packages/contracts-bedrock/wait-for-it.sh
|
||||
- ../config/fixturenet-optimism/optimism-contracts/deploy-contracts.sh:/app/packages/contracts-bedrock/deploy-contracts.sh
|
||||
@ -31,35 +29,14 @@ services:
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
l2-config-generation:
|
||||
restart: on-failure
|
||||
image: cerc/optimism-op-node:local
|
||||
depends_on:
|
||||
fixturenet-optimism-contracts:
|
||||
condition: service_completed_successfully
|
||||
env_file:
|
||||
- ../config/fixturenet-optimism/l1-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_L1_CHAIN_ID: ${CERC_L1_CHAIN_ID}
|
||||
CERC_L1_RPC: ${CERC_L1_RPC}
|
||||
volumes:
|
||||
- ../config/fixturenet-optimism/generate-l2-config.sh:/generate-l2-config.sh
|
||||
- l1_deployment:/l1-deployment:ro
|
||||
- l2_config:/l2-config
|
||||
entrypoint: "bash"
|
||||
command: "/generate-l2-config.sh"
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
# Initializes and runs the L2 execution client (outputs to volume l2_geth_data)
|
||||
op-geth:
|
||||
restart: always
|
||||
image: cerc/optimism-l2geth:local
|
||||
hostname: op-geth
|
||||
depends_on:
|
||||
l2-config-generation:
|
||||
condition: service_completed_successfully
|
||||
op-node:
|
||||
condition: service_started
|
||||
volumes:
|
||||
- ../config/fixturenet-optimism/run-op-geth.sh:/run-op-geth.sh
|
||||
- l2_config:/l2-config:ro
|
||||
@ -86,14 +63,13 @@ services:
|
||||
image: cerc/optimism-op-node:local
|
||||
hostname: op-node
|
||||
depends_on:
|
||||
op-geth:
|
||||
condition: service_healthy
|
||||
fixturenet-optimism-contracts:
|
||||
condition: service_completed_successfully
|
||||
env_file:
|
||||
- ../config/fixturenet-optimism/l1-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_L1_RPC: ${CERC_L1_RPC}
|
||||
CERC_L1_BEACON: ${CERC_L1_BEACON}
|
||||
volumes:
|
||||
- ../config/fixturenet-optimism/run-op-node.sh:/run-op-node.sh
|
||||
- l1_deployment:/l1-deployment:ro
|
||||
|
@ -1,43 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
||||
set -x
|
||||
fi
|
||||
|
||||
CERC_L1_CHAIN_ID="${CERC_L1_CHAIN_ID:-${DEFAULT_CERC_L1_CHAIN_ID}}"
|
||||
CERC_L1_RPC="${CERC_L1_RPC:-${DEFAULT_CERC_L1_RPC}}"
|
||||
DEPLOYMENT_CONTEXT="$CERC_L1_CHAIN_ID"
|
||||
|
||||
deploy_config_file="/l2-config/$DEPLOYMENT_CONTEXT.json"
|
||||
l1_deployment_file="/l1-deployment/$DEPLOYMENT_CONTEXT-deploy.json"
|
||||
l2_allocs_file="/l2-config/allocs-l2.json"
|
||||
genesis_outfile="/l2-config/genesis.json"
|
||||
rollup_outfile="/l2-config/rollup.json"
|
||||
jwt_file="/l2-config/l2-jwt.txt"
|
||||
|
||||
# Create a JWT secret at shared path if not found
|
||||
if [ ! -f "$jwt_file" ]; then
|
||||
openssl rand -hex 32 > $jwt_file
|
||||
echo "Generated JWT secret at $jwt_file"
|
||||
fi
|
||||
|
||||
# Check if genesis.json and rollup.json already exist
|
||||
if [ -f "$genesis_outfile" ] && [ -f "$rollup_outfile" ]; then
|
||||
echo "Skipping generation, files already exist: $genesis_outfile, $rollup_outfile"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# If files don't exist, proceed with generation
|
||||
echo "Generating l2 config files..."
|
||||
|
||||
op-node genesis l2 \
|
||||
--deploy-config "$deploy_config_file" \
|
||||
--l1-deployments "$l1_deployment_file" \
|
||||
--l2-allocs "$l2_allocs_file" \
|
||||
--outfile.l2 "$genesis_outfile" \
|
||||
--outfile.rollup "$rollup_outfile" \
|
||||
--l1-rpc "$CERC_L1_RPC"
|
||||
|
||||
echo "Generated the l2 config files successfully"
|
||||
echo "Exiting"
|
@ -10,6 +10,3 @@ DEFAULT_CERC_L1_PORT=8545
|
||||
# that are used to send balance to Optimism Proxy contract
|
||||
# (enables them to do transactions on L2)
|
||||
DEFAULT_CERC_L1_ACCOUNTS_CSV_URL="http://fixturenet-eth-bootnode-geth:9898/accounts.csv"
|
||||
DEFAULT_CERC_PROPOSER_AMOUNT="0.2ether"
|
||||
DEFAULT_CERC_BATCHER_AMOUNT="0.1ether"
|
||||
DEFAULT_CERC_L1_BEACON=http://fixturenet-eth-lighthouse-1:8001
|
@ -9,9 +9,6 @@ CERC_L1_RPC="${CERC_L1_RPC:-${DEFAULT_CERC_L1_RPC}}"
|
||||
|
||||
CERC_L1_ACCOUNTS_CSV_URL="${CERC_L1_ACCOUNTS_CSV_URL:-${DEFAULT_CERC_L1_ACCOUNTS_CSV_URL}}"
|
||||
|
||||
CERC_PROPOSER_AMOUNT="${CERC_PROPOSER_AMOUNT:-${DEFAULT_CERC_PROPOSER_AMOUNT}}"
|
||||
CERC_BATCHER_AMOUNT="${CERC_BATCHER_AMOUNT:-${DEFAULT_CERC_BATCHER_AMOUNT}}"
|
||||
|
||||
export DEPLOYMENT_CONTEXT="$CERC_L1_CHAIN_ID"
|
||||
# Optional create2 salt for deterministic deployment of contract implementations
|
||||
export IMPL_SALT=$(openssl rand -hex 32)
|
||||
@ -19,10 +16,10 @@ export IMPL_SALT=$(openssl rand -hex 32)
|
||||
echo "Using L1 RPC endpoint ${CERC_L1_RPC}"
|
||||
|
||||
# Exit if a deployment already exists (on restarts)
|
||||
if [ -f "/l1-deployment/$DEPLOYMENT_CONTEXT-deploy.json" ]; then
|
||||
echo "Deployment directory /l1-deployment/$DEPLOYMENT_CONTEXT-deploy.json, checking OptimismPortal deployment"
|
||||
if [ -d "/l1-deployment/$DEPLOYMENT_CONTEXT" ]; then
|
||||
echo "Deployment directory /l1-deployment/$DEPLOYMENT_CONTEXT, checking OptimismPortal deployment"
|
||||
|
||||
OPTIMISM_PORTAL_ADDRESS=$(cat /l1-deployment/$DEPLOYMENT_CONTEXT-deploy.json | jq -r .OptimismPortal)
|
||||
OPTIMISM_PORTAL_ADDRESS=$(cat /l1-deployment/$DEPLOYMENT_CONTEXT/.deploy | jq -r .OptimismPortal)
|
||||
contract_code=$(cast code $OPTIMISM_PORTAL_ADDRESS --rpc-url $CERC_L1_RPC)
|
||||
|
||||
if [ -z "${contract_code#0x}" ]; then
|
||||
@ -50,78 +47,59 @@ wait_for_block() {
|
||||
}
|
||||
|
||||
# We need four accounts and their private keys for the deployment: Admin, Proposer, Batcher, and Sequencer
|
||||
# Check if accounts file already exists
|
||||
l2_accounts_file="/l2-accounts/accounts.json"
|
||||
if [ -f $l2_accounts_file ]; then
|
||||
echo "Using existing accounts from $l2_accounts_file."
|
||||
|
||||
ADMIN=$(jq -r .Admin $l2_accounts_file)
|
||||
ADMIN_KEY=$(jq -r .AdminKey $l2_accounts_file)
|
||||
# If $CERC_L1_ADDRESS and $CERC_L1_PRIV_KEY have been set, we'll assign it to Admin and generate/fund the remaining three accounts from it
|
||||
# If not, we'll assume the L1 is the stack's own fixturenet-eth and use the pre-funded accounts/keys from $CERC_L1_ACCOUNTS_CSV_URL
|
||||
if [ -n "$CERC_L1_ADDRESS" ] && [ -n "$CERC_L1_PRIV_KEY" ]; then
|
||||
wallet1=$(cast wallet new)
|
||||
wallet2=$(cast wallet new)
|
||||
wallet3=$(cast wallet new)
|
||||
# Admin
|
||||
ADMIN=$CERC_L1_ADDRESS
|
||||
ADMIN_KEY=$CERC_L1_PRIV_KEY
|
||||
# Proposer
|
||||
PROPOSER=$(jq -r .Proposer $l2_accounts_file)
|
||||
PROPOSER_KEY=$(jq -r .ProposerKey $l2_accounts_file)
|
||||
PROPOSER=$(echo "$wallet1" | awk '/Address:/{print $2}')
|
||||
PROPOSER_KEY=$(echo "$wallet1" | awk '/Private key:/{print $3}')
|
||||
# Batcher
|
||||
BATCHER=$(jq -r .Batcher $l2_accounts_file)
|
||||
BATCHER_KEY=$(jq -r .BatcherKey $l2_accounts_file)
|
||||
BATCHER=$(echo "$wallet2" | awk '/Address:/{print $2}')
|
||||
BATCHER_KEY=$(echo "$wallet2" | awk '/Private key:/{print $3}')
|
||||
# Sequencer
|
||||
SEQ=$(jq -r .Seq $l2_accounts_file)
|
||||
SEQ_KEY=$(jq -r .SeqKey $l2_accounts_file)
|
||||
SEQ=$(echo "$wallet3" | awk '/Address:/{print $2}')
|
||||
SEQ_KEY=$(echo "$wallet3" | awk '/Private key:/{print $3}')
|
||||
|
||||
echo "Funding accounts."
|
||||
wait_for_block 1 300
|
||||
cast send --from $ADMIN --rpc-url $CERC_L1_RPC --value 5ether $PROPOSER --private-key $ADMIN_KEY
|
||||
cast send --from $ADMIN --rpc-url $CERC_L1_RPC --value 10ether $BATCHER --private-key $ADMIN_KEY
|
||||
cast send --from $ADMIN --rpc-url $CERC_L1_RPC --value 2ether $SEQ --private-key $ADMIN_KEY
|
||||
else
|
||||
# If $CERC_L1_ADDRESS and $CERC_L1_PRIV_KEY have been set, we'll assign it to Admin and generate/fund the remaining three accounts from it
|
||||
# If not, we'll assume the L1 is the stack's own fixturenet-eth and use the pre-funded accounts/keys from $CERC_L1_ACCOUNTS_CSV_URL
|
||||
|
||||
if [ -n "$CERC_L1_ADDRESS" ] && [ -n "$CERC_L1_PRIV_KEY" ]; then
|
||||
echo "Creating new accounts for Optimism deployment."
|
||||
wallet1=$(cast wallet new)
|
||||
wallet2=$(cast wallet new)
|
||||
wallet3=$(cast wallet new)
|
||||
# Admin
|
||||
ADMIN=$CERC_L1_ADDRESS
|
||||
ADMIN_KEY=$CERC_L1_PRIV_KEY
|
||||
# Proposer
|
||||
PROPOSER=$(echo "$wallet1" | awk '/Address:/{print $2}')
|
||||
PROPOSER_KEY=$(echo "$wallet1" | awk '/Private key:/{print $3}')
|
||||
# Batcher
|
||||
BATCHER=$(echo "$wallet2" | awk '/Address:/{print $2}')
|
||||
BATCHER_KEY=$(echo "$wallet2" | awk '/Private key:/{print $3}')
|
||||
# Sequencer
|
||||
SEQ=$(echo "$wallet3" | awk '/Address:/{print $2}')
|
||||
SEQ_KEY=$(echo "$wallet3" | awk '/Private key:/{print $3}')
|
||||
|
||||
echo "Funding accounts..."
|
||||
wait_for_block 1 300
|
||||
cast send --from $ADMIN --rpc-url $CERC_L1_RPC --value $CERC_PROPOSER_AMOUNT $PROPOSER --private-key $ADMIN_KEY
|
||||
cast send --from $ADMIN --rpc-url $CERC_L1_RPC --value $CERC_BATCHER_AMOUNT $BATCHER --private-key $ADMIN_KEY
|
||||
else
|
||||
curl -o accounts.csv $CERC_L1_ACCOUNTS_CSV_URL
|
||||
# Admin
|
||||
ADMIN=$(awk -F ',' 'NR == 1 {print $2}' accounts.csv)
|
||||
ADMIN_KEY=$(awk -F ',' 'NR == 1 {print $3}' accounts.csv)
|
||||
# Proposer
|
||||
PROPOSER=$(awk -F ',' 'NR == 2 {print $2}' accounts.csv)
|
||||
PROPOSER_KEY=$(awk -F ',' 'NR == 2 {print $3}' accounts.csv)
|
||||
# Batcher
|
||||
BATCHER=$(awk -F ',' 'NR == 3 {print $2}' accounts.csv)
|
||||
BATCHER_KEY=$(awk -F ',' 'NR == 3 {print $3}' accounts.csv)
|
||||
# Sequencer
|
||||
SEQ=$(awk -F ',' 'NR == 4 {print $2}' accounts.csv)
|
||||
SEQ_KEY=$(awk -F ',' 'NR == 4 {print $3}' accounts.csv)
|
||||
fi
|
||||
|
||||
# These accounts will be needed by other containers, so write them to a shared volume
|
||||
echo "Writing accounts/private keys to volume l2_accounts."
|
||||
accounts_json=$(jq -n \
|
||||
--arg Admin "$ADMIN" --arg AdminKey "$ADMIN_KEY" \
|
||||
--arg Proposer "$PROPOSER" --arg ProposerKey "$PROPOSER_KEY" \
|
||||
--arg Batcher "$BATCHER" --arg BatcherKey "$BATCHER_KEY" \
|
||||
--arg Seq "$SEQ" --arg SeqKey "$SEQ_KEY" \
|
||||
'{Admin: $Admin, AdminKey: $AdminKey, Proposer: $Proposer, ProposerKey: $ProposerKey, Batcher: $Batcher, BatcherKey: $BatcherKey, Seq: $Seq, SeqKey: $SeqKey}')
|
||||
echo "$accounts_json" > $l2_accounts_file
|
||||
curl -o accounts.csv $CERC_L1_ACCOUNTS_CSV_URL
|
||||
# Admin
|
||||
ADMIN=$(awk -F ',' 'NR == 1 {print $2}' accounts.csv)
|
||||
ADMIN_KEY=$(awk -F ',' 'NR == 1 {print $3}' accounts.csv)
|
||||
# Proposer
|
||||
PROPOSER=$(awk -F ',' 'NR == 2 {print $2}' accounts.csv)
|
||||
PROPOSER_KEY=$(awk -F ',' 'NR == 2 {print $3}' accounts.csv)
|
||||
# Batcher
|
||||
BATCHER=$(awk -F ',' 'NR == 3 {print $2}' accounts.csv)
|
||||
BATCHER_KEY=$(awk -F ',' 'NR == 3 {print $3}' accounts.csv)
|
||||
# Sequencer
|
||||
SEQ=$(awk -F ',' 'NR == 4 {print $2}' accounts.csv)
|
||||
SEQ_KEY=$(awk -F ',' 'NR == 4 {print $3}' accounts.csv)
|
||||
fi
|
||||
|
||||
echo "Using accounts:"
|
||||
echo -e "Admin: $ADMIN\nProposer: $PROPOSER\nBatcher: $BATCHER\nSequencer: $SEQ"
|
||||
|
||||
# These accounts will be needed by other containers, so write them to a shared volume
|
||||
echo "Writing accounts/private keys to volume l2_accounts."
|
||||
accounts_json=$(jq -n \
|
||||
--arg Admin "$ADMIN" --arg AdminKey "$ADMIN_KEY" \
|
||||
--arg Proposer "$PROPOSER" --arg ProposerKey "$PROPOSER_KEY" \
|
||||
--arg Batcher "$BATCHER" --arg BatcherKey "$BATCHER_KEY" \
|
||||
--arg Seq "$SEQ" --arg SeqKey "$SEQ_KEY" \
|
||||
'{Admin: $Admin, AdminKey: $AdminKey, Proposer: $Proposer, ProposerKey: $ProposerKey, Batcher: $Batcher, BatcherKey: $BatcherKey, Seq: $Seq, SeqKey: $SeqKey}')
|
||||
echo "$accounts_json" > "/l2-accounts/accounts.json"
|
||||
|
||||
# Get a finalized L1 block to set as the starting point for the L2 deployment
|
||||
# If the chain is a freshly created fixturenet-eth, a finalized block won't be available for many minutes; rather than wait, we can use block 1
|
||||
echo "Checking L1 for finalized block..."
|
||||
@ -139,16 +117,7 @@ if [ -z "$finalized" ]; then
|
||||
fi
|
||||
|
||||
# Generate the deploy-config/getting-started.json file
|
||||
GS_ADMIN_ADDRESS=$ADMIN \
|
||||
GS_BATCHER_ADDRESS=$BATCHER \
|
||||
GS_PROPOSER_ADDRESS=$PROPOSER \
|
||||
GS_SEQUENCER_ADDRESS=$SEQ \
|
||||
L1_RPC_URL=$CERC_L1_RPC \
|
||||
L1_CHAIN_ID=$CERC_L1_CHAIN_ID \
|
||||
L2_CHAIN_ID=42069 \
|
||||
L1_BLOCK_TIME=12 \
|
||||
L2_BLOCK_TIME=2 \
|
||||
$config_build_script
|
||||
GS_ADMIN_ADDRESS=$ADMIN GS_BATCHER_ADDRESS=$BATCHER GS_PROPOSER_ADDRESS=$PROPOSER GS_SEQUENCER_ADDRESS=$SEQ L1_RPC_URL=$CERC_L1_RPC $config_build_script
|
||||
|
||||
echo "Writing deployment config."
|
||||
deploy_config_file="deploy-config/$DEPLOYMENT_CONTEXT.json"
|
||||
@ -158,6 +127,7 @@ cp deploy-config/getting-started.json $deploy_config_file
|
||||
# 1. Update L1 chain id
|
||||
# 2. Add missing faultGameWithdrawalDelay field
|
||||
# (see issue: https://github.com/ethereum-optimism/optimism/issues/9773#issuecomment-2080224969)
|
||||
echo "$(jq ". += {"l1ChainID": $DEPLOYMENT_CONTEXT, "faultGameWithdrawalDelay": 604800}" $deploy_config_file)" > $deploy_config_file
|
||||
|
||||
mkdir -p deployments/$DEPLOYMENT_CONTEXT
|
||||
|
||||
@ -177,25 +147,24 @@ if [ "$create2CodeSize" -eq 0 ]; then
|
||||
fi
|
||||
|
||||
# Create the L2 deployment
|
||||
# Writes out artifact to /app/packages/contracts-bedrock/deployments/$DEPLOYMENT_CONTEXT-deploy.json
|
||||
# Writes out artifact to /app/packages/contracts-bedrock/deployments/$DEPLOYMENT_CONTEXT/.deploy
|
||||
echo "Deploying L1 Optimism contracts..."
|
||||
DEPLOY_CONFIG_PATH=$deploy_config_file forge script scripts/Deploy.s.sol:Deploy --private-key $ADMIN_KEY --broadcast --rpc-url $CERC_L1_RPC
|
||||
forge script scripts/Deploy.s.sol:Deploy --private-key $ADMIN_KEY --broadcast --rpc-url $CERC_L1_RPC
|
||||
echo "Done deploying contracts."
|
||||
|
||||
echo "Generating L2 genesis allocs..."
|
||||
L2_CHAIN_ID=$(jq ".l2ChainID" $deploy_config_file)
|
||||
DEPLOY_CONFIG_PATH=$deploy_config_file \
|
||||
CONTRACT_ADDRESSES_PATH="deployments/$DEPLOYMENT_CONTEXT-deploy.json" \
|
||||
forge script --chain-id $L2_CHAIN_ID scripts/L2Genesis.s.sol:L2Genesis --sig 'runWithAllUpgrades()' --private-key $ADMIN_KEY
|
||||
|
||||
cp /app/packages/contracts-bedrock/state-dump-$L2_CHAIN_ID.json allocs-l2.json
|
||||
CONTRACT_ADDRESSES_PATH=deployments/$DEPLOYMENT_CONTEXT/.deploy forge script --chain-id $L2_CHAIN_ID scripts/L2Genesis.s.sol:L2Genesis --sig 'runWithAllUpgrades()' --private-key $ADMIN_KEY
|
||||
echo "{ \"accounts\": $(jq '.' /app/packages/contracts-bedrock/state-dump-$L2_CHAIN_ID.json) }" > allocs-l2.json
|
||||
echo "Done."
|
||||
|
||||
echo "*************************************"
|
||||
|
||||
# Copy files needed by other containers to the appropriate shared volumes
|
||||
echo "Copying deployment artifacts to volume l1_deployment and deploy-config to volume l2_config"
|
||||
cp /app/packages/contracts-bedrock/deployments/$DEPLOYMENT_CONTEXT-deploy.json /l1-deployment
|
||||
echo "Copying deployment artifacts volume l1_deployment and deploy-config to volume l2_config"
|
||||
cp -a /app/packages/contracts-bedrock/deployments/$DEPLOYMENT_CONTEXT /l1-deployment
|
||||
cp /app/packages/contracts-bedrock/deploy-config/$DEPLOYMENT_CONTEXT.json /l2-config
|
||||
cp allocs-l2.json /l2-config
|
||||
openssl rand -hex 32 > /l2-config/l2-jwt.txt
|
||||
|
||||
echo "Deployment successful. Exiting"
|
||||
|
@ -7,14 +7,24 @@ fi
|
||||
CERC_L1_CHAIN_ID="${CERC_L1_CHAIN_ID:-${DEFAULT_CERC_L1_CHAIN_ID}}"
|
||||
CERC_L1_RPC="${CERC_L1_RPC:-${DEFAULT_CERC_L1_RPC}}"
|
||||
DEPLOYMENT_CONTEXT="$CERC_L1_CHAIN_ID"
|
||||
CERC_L1_BEACON="${CERC_L1_BEACON:-${DEFAULT_CERC_L1_BEACON}}"
|
||||
|
||||
deploy_config_file="/l2-config/$DEPLOYMENT_CONTEXT.json"
|
||||
l1_deployment_file="/l1-deployment/$DEPLOYMENT_CONTEXT-deploy.json"
|
||||
l1_deployment_file="/l1-deployment/$DEPLOYMENT_CONTEXT/.deploy"
|
||||
l2_allocs_file="/l2-config/allocs-l2.json"
|
||||
genesis_outfile="/l2-config/genesis.json"
|
||||
rollup_outfile="/l2-config/rollup.json"
|
||||
|
||||
# Generate L2 genesis (if not already done)
|
||||
if [ ! -f "$genesis_outfile" ] || [ ! -f "$rollup_outfile" ]; then
|
||||
op-node genesis l2 \
|
||||
--deploy-config $deploy_config_file \
|
||||
--l1-deployments $l1_deployment_file \
|
||||
--l2-allocs $l2_allocs_file \
|
||||
--outfile.l2 $genesis_outfile \
|
||||
--outfile.rollup $rollup_outfile \
|
||||
--l1-rpc $CERC_L1_RPC
|
||||
fi
|
||||
|
||||
# Start op-node
|
||||
SEQ_KEY=$(cat /l2-accounts/accounts.json | jq -r .SeqKey)
|
||||
jwt_file=/l2-config/l2-jwt.txt
|
||||
@ -34,5 +44,4 @@ op-node \
|
||||
--rpc.enable-admin \
|
||||
--p2p.sequencer.key="${SEQ_KEY#0x}" \
|
||||
--l1=$CERC_L1_RPC \
|
||||
--l1.rpckind=$RPC_KIND \
|
||||
--l1.beacon=$CERC_L1_BEACON
|
||||
--l1.rpckind=$RPC_KIND
|
||||
|
@ -11,7 +11,7 @@ DEPLOYMENT_CONTEXT="$CERC_L1_CHAIN_ID"
|
||||
# Start op-proposer
|
||||
ROLLUP_RPC="http://op-node:8547"
|
||||
PROPOSER_KEY=$(cat /l2-accounts/accounts.json | jq -r .ProposerKey)
|
||||
L2OO_ADDR=$(cat /l1-deployment/$DEPLOYMENT_CONTEXT-deploy.json | jq -r .L2OutputOracleProxy)
|
||||
L2OO_ADDR=$(cat /l1-deployment/$DEPLOYMENT_CONTEXT/.deploy | jq -r .L2OutputOracleProxy)
|
||||
|
||||
op-proposer \
|
||||
--poll-interval=12s \
|
||||
|
4
container-build/cerc-foundry/build.sh
Executable file
4
container-build/cerc-foundry/build.sh
Executable file
@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build a local version of the foundry-rs/foundry image
|
||||
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
|
||||
docker build -t cerc/foundry:local -f ${CERC_REPO_BASE_DIR}/foundry/Dockerfile-debian ${build_command_args} ${CERC_REPO_BASE_DIR}/foundry
|
@ -1,16 +1,17 @@
|
||||
# TODO: Make work for arm64/Apple Silicon
|
||||
FROM ghcr.io/foundry-rs/foundry:nightly-c4a984fbf2c48b793c8cd53af84f56009dd1070c
|
||||
# FROM ghcr.io/foundry-rs/foundry:nightly-267e14fab654d9ce955dce64c0eb09f01c8538ee
|
||||
FROM cerc/foundry:local
|
||||
|
||||
RUN apk update
|
||||
|
||||
# Install node (use edge repo to get latest version)
|
||||
RUN apk add --update --no-cache curl wget bash git busybox jq openssl \
|
||||
&& apk add nodejs --update-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/main --allow-untrusted \
|
||||
&& apk add npm \
|
||||
# Install node (local foundry is a debian based image)
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y curl wget \
|
||||
&& curl --silent --location https://deb.nodesource.com/setup_18.x | bash - \
|
||||
&& apt-get update \
|
||||
&& apt-get install -y nodejs git busybox jq \
|
||||
&& node -v
|
||||
|
||||
# Add corepack for yarn and pnpm
|
||||
RUN npm install -g corepack && corepack enable \
|
||||
RUN corepack enable \
|
||||
&& yarn --version
|
||||
|
||||
WORKDIR /app
|
||||
|
@ -6,6 +6,7 @@ RUN apk add --no-cache make gcc musl-dev linux-headers git jq bash
|
||||
|
||||
# build op-batcher with the shared go.mod & go.sum files
|
||||
COPY ./op-batcher /app/op-batcher
|
||||
COPY ./op-bindings /app/op-bindings
|
||||
COPY ./op-node /app/op-node
|
||||
COPY ./op-service /app/op-service
|
||||
COPY ./op-plasma /app/op-plasma
|
||||
|
@ -8,6 +8,7 @@ RUN apk add --no-cache make gcc musl-dev linux-headers git jq bash
|
||||
COPY ./op-node /app/op-node
|
||||
COPY ./op-chain-ops /app/op-chain-ops
|
||||
COPY ./op-service /app/op-service
|
||||
COPY ./op-bindings /app/op-bindings
|
||||
COPY ./op-plasma /app/op-plasma
|
||||
COPY ./op-conductor /app/op-conductor
|
||||
COPY ./go.mod /app/go.mod
|
||||
|
@ -6,6 +6,7 @@ RUN apk add --no-cache make gcc musl-dev linux-headers git jq bash
|
||||
|
||||
# build op-proposer with the shared go.mod & go.sum files
|
||||
COPY ./op-proposer /app/op-proposer
|
||||
COPY ./op-bindings /app/op-bindings
|
||||
COPY ./op-node /app/op-node
|
||||
COPY ./op-service /app/op-service
|
||||
COPY ./op-plasma /app/op-plasma
|
||||
|
@ -112,15 +112,6 @@ Inside the `fixturenet-eth-deployment` deployment directory, open `config.env` f
|
||||
CERC_ALLOW_UNPROTECTED_TXS=true
|
||||
```
|
||||
|
||||
Inside the `fixturenet-optimism-deployment` deployment directory, open `config.env` file and set following env variables:
|
||||
|
||||
```bash
|
||||
# Optional
|
||||
# Funding amounts for proposer and batcher accounts on L1
|
||||
CERC_PROPOSER_AMOUNT= # Default 0.2ether
|
||||
CERC_BATCHER_AMOUNT= # Default 0.1ether
|
||||
```
|
||||
|
||||
## Start the stack
|
||||
|
||||
Start the deployment:
|
||||
|
@ -64,9 +64,6 @@ Inside the deployment directory, open the file `config.env` and add the followin
|
||||
CERC_L1_HOST=
|
||||
CERC_L1_PORT=
|
||||
|
||||
# External L1 Beacon node endpoint
|
||||
CERC_L1_BEACON=
|
||||
|
||||
# URL to get CSV with credentials for accounts on L1
|
||||
# that are used to send balance to Optimism Proxy contract
|
||||
# (enables them to do transactions on L2)
|
||||
@ -77,13 +74,6 @@ Inside the deployment directory, open the file `config.env` and add the followin
|
||||
# Other generated accounts will be funded from this account, so it should contain ~20 Eth
|
||||
CERC_L1_ADDRESS=
|
||||
CERC_L1_PRIV_KEY=
|
||||
|
||||
# Optional
|
||||
|
||||
# Funding amounts for proposer and batcher accounts on L1
|
||||
# (Accounts funded using the Admin account)
|
||||
CERC_PROPOSER_AMOUNT=
|
||||
CERC_BATCHER_AMOUNT=
|
||||
```
|
||||
|
||||
* NOTE: If L1 is running on the host machine, use `host.docker.internal` as the hostname to access the host port, or use the `ip a` command to find the IP address of the `docker0` interface (this will usually be something like `172.17.0.1` or `172.18.0.1`)
|
||||
|
@ -3,10 +3,12 @@ name: fixturenet-optimism
|
||||
description: "Optimism Fixturenet"
|
||||
repos:
|
||||
# L2 (optimism)
|
||||
- github.com/ethereum-optimism/optimism@v1.7.7
|
||||
- github.com/ethereum-optimism/op-geth@v1.101315.2
|
||||
- github.com/cerc-io/foundry@pm-merge-upstream-changes
|
||||
- github.com/ethereum-optimism/optimism@v1.7.4
|
||||
- github.com/ethereum-optimism/op-geth@v1.101311.0
|
||||
containers:
|
||||
# L2 (optimism)
|
||||
- cerc/foundry
|
||||
- cerc/optimism-contracts
|
||||
- cerc/optimism-op-node
|
||||
- cerc/optimism-l2geth
|
||||
|
Loading…
Reference in New Issue
Block a user