@@ -13,14 +13,39 @@ OS := $(shell uname -s)
1313
1414# Variables
1515IMAGE_KEY_TO_ADDRESS: =ghcr.io/gattaca-com/based-op/key-to-address:latest
16+ # # This image is totally vanilla, but automatically sets isthmus at genesis when using v3.0.0 contracts
17+ IMAGE_OP_DEPLOYER: =ghcr.io/gattaca-com/based-optimism/based-op-deployer:latest
1618
1719
1820START_GATEWAY_COMPOSE_FILES := -f .local_gateway_and_follower/compose.yml
19- ifeq ($(OS ) ,Darwin)
20- START_GATEWAY_COMPOSE_FILES += -f .local_gateway_and_follower/compose.mac.yml
21- endif
21+ START_MAIN_NODE_COMPOSE_FILES := -f .local_main_node/compose.yml
2222
2323# Overridable Variables
24+ L1_CHAIN_ID? =11155111
25+ L2_CHAIN_ID? =$(shell \
26+ RAW=$$(od -An -N2 -tu2 /dev/urandom | tr -d ' ' ) ; \
27+ echo $$((RAW % 50000 + 1 ) ) ; \
28+ )
29+ L2_CHAIN_ID_HEX: =$(shell printf "0x% 064x" $(L2_CHAIN_ID ) )
30+ PORTAL? =http://18.185.199.51:8080
31+ L1_RPC_URL? =http://34.194.193.217:8545
32+ L1_BEACON_RPC_URL? =http://34.194.193.217:5052
33+ PUBLIC_IP? =$(shell curl ifconfig.me)
34+ # if GATEWAY_SEQUENCING_KEY is set, use that one, otherwise key_to_address will generate a new one
35+ GATEWAY_SEQUENCING_KEY ?= $(shell \
36+ [ -f .local_gateway_and_follower/.env ] && \
37+ grep -m1 '^GATEWAY_SEQUENCING_KEY=' .local_gateway_and_follower/.env \
38+ | cut -d= -f2 \
39+ )
40+ _GATEWAY_KEY_AND_WALLET: =$(shell docker run --rm -i $(IMAGE_KEY_TO_ADDRESS ) $(GATEWAY_SEQUENCING_KEY ) )
41+ GATEWAY_SEQUENCING_KEY: =$(word 1,$(_GATEWAY_KEY_AND_WALLET ) )
42+ GATEWAY_SEQUENCING_ADDRESS: =$(word 2,$(_GATEWAY_KEY_AND_WALLET ) )
43+
44+ BASED_GATEWAY_DATA_DIR? =.local_gateway_and_follower/data/gateway
45+ BASED_OP_NODE_DATA_DIR? =.local_gateway_and_follower/data/node
46+ BASED_OP_GETH_DATA_DIR? =.local_gateway_and_follower/data/geth
47+
48+ DEPLOYER_CACHE_DIR: =/tmp/op-deployer-cache
2449
2550# Some servers default to executing shell scripts below with /bin/sh, we set bash to make sure our bash syntax works
2651SHELL := /bin/bash
@@ -57,35 +82,25 @@ build-based-op-node: ## 🏗️ Build OP geth from op-eth directory
5782 --load \
5883 op-node
5984
85+ build-based-op-deployer : # # 🏗️ Build OP deployer from op-eth directory
86+ cd ../based-optimism && \
87+ IMAGE_TAGS =develop \
88+ docker buildx bake \
89+ -f docker-bake.hcl \
90+ --set op-deployer.tags=local_based_op_deployer \
91+ --load \
92+ op-deployer
93+
6094build-rabby-chrom : # # 🏗️ Build modified Rabby wallet for Google Chrome and Firefox
6195 cd rabby && \
6296 yarn && \
6397 yarn build:pro && \
6498 yarn build:pro:mv2
6599
66- L1_CHAIN_ID? =11155111
67- L2_CHAIN_ID? =$(shell \
68- RAW=$$(od -An -N2 -tu2 /dev/urandom | tr -d ' ' ) ; \
69- echo $$((RAW % 50000 + 1 ) ) ; \
70- )
71- L2_CHAIN_ID_HEX: =$(shell printf "0x% 064x" $(L2_CHAIN_ID ) )
72- PORTAL? =http://18.185.199.51:8080
73- L1_RPC_URL? =http://34.194.193.217:8545
74- L1_BEACON_RPC_URL? =http://34.194.193.217:5052
75- # if GATEWAY_SEQUENCING_KEY is set, use that one, otherwise key_to_address will generate a new one
76- GATEWAY_SEQUENCING_KEY ?= $(shell \
77- [ -f .local_gateway_and_follower/.env ] && \
78- grep -m1 '^GATEWAY_SEQUENCING_KEY=' .local_gateway_and_follower/.env \
79- | cut -d= -f2 \
80- )
81- _GATEWAY_KEY_AND_WALLET: =$(shell docker run --rm -i $(IMAGE_KEY_TO_ADDRESS ) $(GATEWAY_SEQUENCING_KEY ) )
82- GATEWAY_SEQUENCING_KEY: =$(word 1,$(_GATEWAY_KEY_AND_WALLET ) )
83- GATEWAY_SEQUENCING_ADDRESS: =$(word 2,$(_GATEWAY_KEY_AND_WALLET ) )
100+ create-network :
101+ docker network inspect based_op_net > /dev/null 2>&1 || docker network create based_op_net
84102
85- BASED_GATEWAY_DATA_DIR? =.local_gateway_and_follower/data/gateway
86- BASED_OP_NODE_DATA_DIR? =.local_gateway_and_follower/data/node
87- BASED_OP_GETH_DATA_DIR? =.local_gateway_and_follower/data/geth
88- start-gateway :
103+ start-gateway : create-network
89104 @if docker ps --format ' {{.Names}}' | grep -wq based-op-gateway ; then \
90105 echo " ❌ Gateway already running." ; \
91106 exit 1; \
@@ -106,7 +121,7 @@ start-gateway:
106121 echo "Gateway Sequencing Wallet: $(GATEWAY_SEQUENCING_ADDRESS)"; \
107122 { \
108123 echo "PORTAL=$(PORTAL)"; \
109- echo "OP_NODE_GOSSIP_IP=$$(curl ifconfig.me )"; \
124+ echo "OP_NODE_GOSSIP_IP=$(PUBLIC_IP )"; \
110125 echo "GATEWAY_SEQUENCING_KEY=$(GATEWAY_SEQUENCING_KEY)"; \
111126 echo "MAIN_OP_NODE_GOSSIP_STATIC=$$(curl -s -X POST -H 'Content-Type: application/json' \
112127 --data '{"jsonrpc":"2.0","method":"portal_opNodeGossipStatic","params":[],"id":1}' \
@@ -168,7 +183,7 @@ start-gateway:
168183 cat .local_gateway_and_follower/.env; \
169184 echo; echo; \
170185 echo "Calling registerGateway method via JSON-RPC :"; \
171- GATEWAY_URL =http://$$( curl -s ifconfig.me ) :$$(grep -m1 '^GATEWAY_PORT[[:space:]]*=' .local_gateway_and_follower/.env | cut -d= -f2 ) ; \
186+ GATEWAY_URL =http://$( PUBLIC_IP ) :$$(grep -m1 '^GATEWAY_PORT[[:space:]]*=' .local_gateway_and_follower/.env | cut -d= -f2 ) ; \
172187 GATEWAY_ADDRESS=$$wallet; \
173188 JWT=$$(cat .local_gateway_and_follower/config/jwt ) ; \
174189 curl -X POST "$(PORTAL ) " \
@@ -185,7 +200,7 @@ start-gateway:
185200 $(MAKE) start-overseer
186201
187202start-overseer :
188- docker exec -it based-op-gateway overseer --portal-url $(PORTAL ) --based-op-node-url http://based-op-node:8547 --based-op-geth-url http://based-op-geth:8645
203+ docker exec -it based-op-gateway overseer --portal-url $(PORTAL )
189204
190205
191206# ────────────────────────────────────────────────────────────────────────────────
@@ -219,7 +234,7 @@ deploy-chain:
219234 exit 1; \
220235 fi
221236 @mkdir -p .local_main_node/config
222- @docker run -v $$(pwd ) /.local_main_node/config:/config --entrypoint sh --rm us-docker.pkg.dev/oplabs-tools-artifacts/images/op-deployer:v0.0.11 -c " /op-deployer init --l1-chain-id $( L1_CHAIN_ID) --l2-chain-ids $( L2_CHAIN_ID) --workdir /config && chmod 666 /config/*"
237+ @docker run -v $$(pwd ) /.local_main_node/config:/config --entrypoint sh -e DEPLOYER_CACHE_DIR= $( DEPLOYER_CACHE_DIR ) $( IMAGE_OP_DEPLOYER ) -c " /usr/local/bin/ op-deployer init --l1-chain-id $( L1_CHAIN_ID) --l2-chain-ids $( L2_CHAIN_ID) --workdir /config && chmod 666 /config/*"
223238 @wallet_batcher=$$(docker run --rm -i $(IMAGE_KEY_TO_ADDRESS ) $(OP_PROPOSER_KEY ) | tail -n1 ) ; \
224239 wallet_proposer=$$(docker run --rm -i $(IMAGE_KEY_TO_ADDRESS ) $(OP_PROPOSER_KEY ) | tail -n1 ) ; \
225240 wallet_main=$$(docker run --rm -i $(IMAGE_KEY_TO_ADDRESS ) $(MAIN_KEY ) | tail -n1 ) ; \
@@ -232,18 +247,10 @@ deploy-chain:
232247 main_node/intent.template.toml \
233248 > .local_main_node/config/intent.toml
234249
235- @docker run -v $$(pwd)/.local_main_node/config:/config --rm us-docker.pkg.dev/oplabs-tools-artifacts/images/op-deployer:v0.0.11 apply --workdir /config --l1-rpc-url $(L1_RPC_URL) --private-key $(MAIN_KEY)
236- @docker run -v $$(pwd)/.local_main_node/config:/config --rm us-docker.pkg.dev/oplabs-tools-artifacts/images/op-deployer:v0.2.0 inspect genesis --workdir /config $(L2_CHAIN_ID_HEX) > $$(pwd)/.local_main_node/config/genesis.json
237- @docker run -v $$(pwd)/.local_main_node/config:/config --rm us-docker.pkg.dev/oplabs-tools-artifacts/images/op-deployer:v0.2.0 inspect rollup --workdir /config $(L2_CHAIN_ID_HEX) > $$(pwd)/.local_main_node/config/rollup.json
238- @docker run -v $$(pwd)/.local_main_node/config:/config --entrypoint sh --rm us-docker.pkg.dev/oplabs-tools-artifacts/images/op-deployer:v0.2.0 -c "chmod 666 /config/*"
239- @docker run -v $$(pwd)/.local_main_node/config:/config --rm -i imega/jq '.chain_op_config = {"eip1559Elasticity":6, "eip1559Denominator":50, "eip1559DenominatorCanyon":250}' /config/rollup.json \
240- > $$(pwd)/.local_main_node/config/rollup.json.tmp && mv $$(pwd)/.local_main_node/config/rollup.json.tmp $$(pwd)/.local_main_node/config/config.json
241- @blockNumber=$$(docker run -v $$(pwd)/.local_main_node/config:/config --rm -i imega/jq -r '.genesis.l1.number' /config/rollup.json); \
242- hex=$$(printf "0x%x" $$blockNumber); \
243- hash=$$(curl -s -X POST -H 'Content-Type: application/json' \
244- --data '{"jsonrpc":"2.0","id":1,"method":"eth_getBlockByNumber","params":["'"$$hex"'",false]}' \
245- $(L1_RPC_URL) | docker run --rm -i imega/jq -r '.result.hash'); \
246- docker run -v $$(pwd)/.local_main_node/config:/config --rm -i imega/jq --arg h "$$hash" '.genesis.l1.hash = $$h' /config/rollup.json > $$(pwd)/.local_main_node/config/rollup.json.tmp && mv $$(pwd)/.local_main_node/config/rollup.json.tmp $$(pwd)/.local_main_node/config/rollup.json
250+ @docker run -v $$(pwd)/.local_main_node/config:/config -e DEPLOYER_CACHE_DIR=$(DEPLOYER_CACHE_DIR) $(IMAGE_OP_DEPLOYER) op-deployer apply --workdir /config --l1-rpc-url $(L1_RPC_URL) --private-key $(MAIN_KEY)
251+ @docker run -v $$(pwd)/.local_main_node/config:/config -e DEPLOYER_CACHE_DIR=$(DEPLOYER_CACHE_DIR) $(IMAGE_OP_DEPLOYER) op-deployer inspect genesis --workdir /config $(L2_CHAIN_ID_HEX) > $$(pwd)/.local_main_node/config/genesis.json
252+ @docker run -v $$(pwd)/.local_main_node/config:/config -e DEPLOYER_CACHE_DIR=$(DEPLOYER_CACHE_DIR) $(IMAGE_OP_DEPLOYER) op-deployer inspect rollup --workdir /config $(L2_CHAIN_ID_HEX) > $$(pwd)/.local_main_node/config/rollup.json
253+ @docker run -v $$(pwd)/.local_main_node/config:/config -e DEPLOYER_CACHE_DIR=$(DEPLOYER_CACHE_DIR) --entrypoint sh $(IMAGE_OP_DEPLOYER) -c "chmod 666 /config/*"
247254
248255 @openssl rand -hex 32 | tr -d '\n' | sed 's/^/0x/' > .local_main_node/config/jwt
249256 @echo "...Done deploying. See chain config in"
@@ -309,7 +316,7 @@ config-main-node:
309316 @echo
310317
311318# By default these will be pointing to directories under .local_<xyz>
312- start-main-node :
319+ start-main-node : create-network
313320 @if docker ps --format ' {{.Names}}' | grep -wq op-node ; then \
314321 echo " ❌ Main node already running." ; \
315322 exit 1; \
@@ -325,7 +332,7 @@ start-main-node:
325332 @# generate .env and fetch JSON if missing
326333 @if [ ! -f .local_main_node/.env ]; then \
327334 cp main_node/env_example .local_main_node/.env; \
328- cp main_node/compose.yml .local_main_node/compose.yml ; \
335+ cp main_node/compose* .local_main_node; \
329336 $(MAKE ) fix-compose; \
330337 echo " Initializing all components of a main sequencing node in ./.local_main_node ..." ; \
331338 { \
@@ -334,7 +341,7 @@ start-main-node:
334341 echo " L1_RPC_URL=$( L1_RPC_URL) " ; \
335342 echo " L1_BEACON_RPC_URL=$( L1_BEACON_RPC_URL) " ; \
336343 echo " OP_NODE_SEQUENCER_KEY=$( MAIN_KEY) " ; \
337- echo " OP_NODE_GOSSIP_IP=$$ (curl ifconfig.me )" ; \
344+ echo " OP_NODE_GOSSIP_IP=$( PUBLIC_IP ) " ; \
338345 echo " OP_BATCHER_PRIVATE_KEY=$( OP_BATCHER_KEY) " ; \
339346 echo " OP_PROPOSER_PRIVATE_KEY=$( OP_PROPOSER_KEY) " ; \
340347 } >> .local_main_node/.env; \
@@ -349,7 +356,7 @@ start-main-node:
349356 @echo
350357 @echo
351358
352- @cd .local_main_node && docker compose up -d
359+ @docker compose $(START_MAIN_NODE_COMPOSE_FILES) up -d
353360 $(MAKE) logs-main-node
354361
355362start-portal : build-portal
@@ -421,7 +428,7 @@ logs-based-op-node: ## 📜 Show based op-node logs
421428 docker logs based-op-node --tail 100 -f
422429
423430logs-based-op-geth : # # 📜 Show based op-geth logs
424- docker logs based-op-node --tail 100 -f
431+ docker logs based-op-geth --tail 100 -f
425432
426433logs-op-node : # # 📜 Show main op-node logs (only for main sequencing node)
427434 docker logs op-node --tail 100 -f
0 commit comments