Skip to content

Commit

Permalink
fix contract deployment
Browse files Browse the repository at this point in the history
  • Loading branch information
barnabasbusa committed Jun 3, 2024
1 parent d42bd33 commit e947433
Show file tree
Hide file tree
Showing 5 changed files with 118 additions and 60 deletions.
42 changes: 36 additions & 6 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Use the Debian base image for broader compatibility
FROM debian:latest
# Stage 1: Builder
FROM debian:latest AS builder

# Install dependencies using apt
# Install dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
git \
make \
Expand Down Expand Up @@ -49,6 +49,39 @@ RUN git clone https://github.com/ethereum-optimism/optimism.git && \
#make op-node op-batcher op-proposer && \
pnpm build

# Stage 2: Runner
FROM debian:latest

# Install runtime dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
bash \
ca-certificates \
jq \
direnv \
curl \
&& apt-get clean && rm -rf /var/lib/apt/lists/*

# Copy Go from the builder stage
COPY --from=builder /usr/local/go/ /usr/local/go/
ENV PATH="/usr/local/go/bin:${PATH}"

# Copy pnpm from the builder stage
COPY --from=builder /usr/local/lib/node_modules/pnpm /usr/local/lib/node_modules/pnpm
COPY --from=builder /usr/local/bin/pnpm /usr/local/bin/pnpm

# Copy web3 cli from the builder stage
COPY --from=builder /usr/local/bin/web3 /usr/local/bin/web3

# Copy Rust and Foundry from the builder stage
COPY --from=builder /root/.cargo /root/.cargo
ENV PATH="/root/.cargo/bin:${PATH}"

# Copy the built application from the builder stage
COPY --from=builder /workspace/optimism /workspace/optimism

# Set the working directory
WORKDIR /workspace/optimism

# Verify installed versions
RUN git --version && \
go version && \
Expand All @@ -60,8 +93,5 @@ RUN git --version && \
jq --version && \
direnv --version

# Set the working directory
WORKDIR /workspace/optimism

# Default command
CMD ["bash"]
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
## Welcome to Optimism Package
12 changes: 8 additions & 4 deletions main.star
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ input_parser = import_module("./src/package_io/input_parser.star")
ethereum_package = import_module("github.com/kurtosis-tech/ethereum-package/main.star")
contract_deployer = import_module("./src/contracts/contract_deployer.star")

def run(plan,args={}):

def run(plan, args={}):
"""Deploy a Optimism L2 with a local L1.
Args:
Expand All @@ -20,12 +21,16 @@ def run(plan,args={}):
plan.print("Deploying a local L1")
l1 = ethereum_package.run(plan, ethereum_args)
all_l1_participants = l1.all_participants
priv_key = l1.pre_funded_accounts[12].private_key # reserved for L2 contract deployer
priv_key = l1.pre_funded_accounts[
12
].private_key # reserved for L2 contract deployer
# Deploy L2 smart contracts
plan.print("Deploying the L2 smart contracts")
first_l1_el_node = all_l1_participants[0].el_context.rpc_http_url
first_l1_cl_node = all_l1_participants[0].cl_context.beacon_http_url
contract_deployer.launch_contract_deployer(plan, first_l1_el_node, first_l1_cl_node, priv_key)
contract_deployer.launch_contract_deployer(
plan, first_l1_el_node, first_l1_cl_node, priv_key
)

# Parse the values for the args
plan.print("Parsing the L2 input args")
Expand All @@ -35,4 +40,3 @@ def run(plan,args={}):
plan.print("Deploying a local L2")
args_with_right_defaults = input_parser.input_parser(plan, optimism_args)
plan.print(args_with_right_defaults)

108 changes: 60 additions & 48 deletions src/contracts/contract_deployer.star
Original file line number Diff line number Diff line change
Expand Up @@ -7,59 +7,71 @@ MAX_MEMORY = 1024
IMAGE = "bbusa/op:latest"

ENVRC_PATH = "/workspace/optimism/.envrc"
ENTRYPOINT_ARGS = ["/bin/bash", "-c"]

FACTORY_DEPLOYER_ADDRESS = "0x3fAB184622Dc19b6109349B94811493BF2a45362"
FACTORY_DEPLOYER_CODE = "0xf8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222"
def launch_contract_deployer(
plan,
el_rpc_http_url,
cl_rpc_http_url,
priv_key,
):
plan.add_service(
name="op-contract-deployer",
config=ServiceConfig(
image=IMAGE,
min_cpu=MIN_CPU,
max_cpu=MAX_CPU,
min_memory=MIN_MEMORY,
max_memory=MAX_MEMORY,
entrypoint=ENTRYPOINT_ARGS,
env_vars = {
"WEB3_RPC_URL": str(el_rpc_http_url),
"WEB3_PRIVATE_KEY": str(priv_key),
"CL_RPC_URL": str(cl_rpc_http_url),
"FUND_VALUE": "10",
},
cmd=[
" && ".join(
[
"./packages/contracts-bedrock/scripts/getting-started/wallets.sh >> {0}".format(ENVRC_PATH),
"sed -i '1d' {0}".format(ENVRC_PATH), # Remove the first line (not commented out)
"echo 'export L1_RPC_KIND=any' >> {0}".format(ENVRC_PATH),
"echo 'export L1_RPC_URL={0}' >> {1}".format(el_rpc_http_url, ENVRC_PATH),
"echo 'export IMPL_SALT=$(openssl rand -hex 32)' >> {0}".format(ENVRC_PATH),
"echo 'export DEPLOYMENT_CONTEXT=getting-started' >> {0}".format(ENVRC_PATH),
"source {0}".format(ENVRC_PATH),
"web3 transfer $FUND_VALUE to $GS_ADMIN_ADDRESS", # Fund Admin
"sleep 3",
"web3 transfer $FUND_VALUE to $GS_BATCHER_ADDRESS", # Fund Batcher
"sleep 3",
"web3 transfer $FUND_VALUE to $GS_PROPOSER_ADDRESS", # Fund Proposer
"sleep 3",
# sleep till chain is finalized
"while true; do sleep 3; echo 'Chain is not yet finalized...'; if [ $(curl -s $CL_RPC_URL/eth/v1/beacon/states/1/finality_checkpoints | jq '.finalized') = true ]; then echo 'Chain is finalized!'; break; fi; done",
"cd /workspace/optimism/packages/contracts-bedrock",
"./scripts/getting-started/config.sh",
"cd /workspace/optimism",
"sleep 3",
# "cast codesize 0x4e59b44847b379578588920cA78FbF26c0B4956C --rpc-url $WEB3_RPC_URL",
# "web3 transfer $FUND_VALUE to 0x3fAB184622Dc19b6109349B94811493BF2a45362", # Fund Factory deployer

# "sleep 12",
# "cast publish --rpc-url $WEB3_RPC_URL 0xf8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222",
"sleep 100000",
]
)
],
plan.run_sh(
description="Deploying L2 contracts (takes a few minutes (30 mins for mainnet preset - 4 mins for minimal preset) -- L1 has to be finalized first)",
image=IMAGE,
env_vars={
"WEB3_RPC_URL": str(el_rpc_http_url),
"WEB3_PRIVATE_KEY": str(priv_key),
"CL_RPC_URL": str(cl_rpc_http_url),
"FUND_VALUE": "10",
},
store=[
StoreSpec(src="/network-configs", name="op-genesis-configs"),
],
run=" && ".join(
[
"./packages/contracts-bedrock/scripts/getting-started/wallets.sh >> {0}".format(
ENVRC_PATH
),
"sed -i '1d' {0}".format(
ENVRC_PATH
), # Remove the first line (not commented out)
"echo 'export L1_RPC_KIND=any' >> {0}".format(ENVRC_PATH),
"echo 'export L1_RPC_URL={0}' >> {1}".format(
el_rpc_http_url, ENVRC_PATH
),
"echo 'export IMPL_SALT=$(openssl rand -hex 32)' >> {0}".format(
ENVRC_PATH
),
"echo 'export DEPLOYMENT_CONTEXT=getting-started' >> {0}".format(
ENVRC_PATH
),
". {0}".format(ENVRC_PATH),
"web3 transfer $FUND_VALUE to $GS_ADMIN_ADDRESS", # Fund Admin
"sleep 3",
"web3 transfer $FUND_VALUE to $GS_BATCHER_ADDRESS", # Fund Batcher
"sleep 3",
"web3 transfer $FUND_VALUE to $GS_PROPOSER_ADDRESS", # Fund Proposer
"sleep 3",
"web3 transfer $FUND_VALUE to {0}".format(
FACTORY_DEPLOYER_ADDRESS
), # Fund Factory deployer
"sleep 3",
# sleep till chain is finalized
"while true; do sleep 3; echo 'Chain is not yet finalized...'; if [ \"$(curl -s $CL_RPC_URL/eth/v1/beacon/states/head/finality_checkpoints | jq -r '.data.finalized.epoch')\" != \"0\" ]; then echo 'Chain is finalized!'; break; fi; done",
"cd /workspace/optimism/packages/contracts-bedrock",
"./scripts/getting-started/config.sh",
"cast publish --rpc-url $WEB3_RPC_URL {0}".format(FACTORY_DEPLOYER_CODE),
"sleep 12",
"forge script scripts/Deploy.s.sol:Deploy --private-key $GS_ADMIN_PRIVATE_KEY --broadcast --rpc-url $L1_RPC_URL",
"sleep 3",
"cd /workspace/optimism/op-node",
"go run cmd/main.go genesis l2 --deploy-config ../packages/contracts-bedrock/deploy-config/getting-started.json --l1-deployments ../packages/contracts-bedrock/deployments/getting-started/.deploy --outfile.l2 genesis.json --outfile.rollup rollup.json --l1-rpc $L1_RPC_URL",
"mkdir -p /network-configs",
"mv /workspace/optimism/op-node/genesis.json /network-configs/genesis.json",
"mv /workspace/optimism/op-node/rollup.json /network-configs/rollup.json",
"mv /workspace/optimism/packages/contracts-bedrock/deployments/getting-started/.deploy /network-configs/.deploy",
]
),
wait = "2000s",
)

15 changes: 13 additions & 2 deletions src/package_io/input_parser.star
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
ethereum_package_input_parser = import_module("github.com/kurtosis-tech/ethereum-package/src/package_io/input_parser.star")
ethereum_package_input_parser = import_module(
"github.com/kurtosis-tech/ethereum-package/src/package_io/input_parser.star"
)

DEFAULT_EL_IMAGES = {
"op-geth": "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:latest",
Expand All @@ -21,6 +23,7 @@ ATTR_TO_BE_SKIPPED_AT_ROOT = (
"participants",
)


def input_parser(plan, input_args):
result = parse_network_params(plan, input_args)

Expand All @@ -40,6 +43,7 @@ def input_parser(plan, input_args):
),
)


def parse_network_params(plan, input_args):
result = default_input_args(input_args)

Expand All @@ -60,7 +64,11 @@ def parse_network_params(plan, input_args):
# if the value is set in input we set it in participant
new_participant[sub_attr] = sub_value
for _ in range(0, new_participant["count"]):
participant_copy = ethereum_package_input_parser.deep_copy_participant(new_participant)
participant_copy = (
ethereum_package_input_parser.deep_copy_participant(
new_participant
)
)
participants.append(participant_copy)
result["participants"] = participants

Expand All @@ -72,6 +80,7 @@ def parse_network_params(plan, input_args):

return result


def default_input_args(input_args):
network_params = default_network_params()
participants = [default_participant()]
Expand All @@ -80,11 +89,13 @@ def default_input_args(input_args):
"network_params": network_params,
}


def default_network_params():
return {
"network": "kurtosis",
}


def default_participant():
return {
"el_type": "op-geth",
Expand Down

0 comments on commit e947433

Please sign in to comment.