Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@ name: Docs
on:
push:
branches:
- main
# Review gh actions docs if you want to further define triggers, paths, etc
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on
- develop

jobs:
build:
Expand Down
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,5 +35,11 @@ follower_node/.env
.local/
.local_gateway_and_follower
.local_main_node
.local_main_node2
based/.envrc
.envrc

based/data
based/genesis.json
based/temp_registry.json
temp
142 changes: 75 additions & 67 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,40 @@ OS := $(shell uname -s)
.DEFAULT_GOAL := help

# Variables
IMAGE_KEY_TO_ADDRESS:=ghcr.io/gattaca-com/based-op/key-to-address:v0.1.0
IMAGE_KEY_TO_ADDRESS:=ghcr.io/gattaca-com/based-op/key-to-address:latest
## This image is totally vanilla, but automatically sets isthmus at genesis when using v3.0.0 contracts
IMAGE_OP_DEPLOYER:=ghcr.io/gattaca-com/based-optimism/based-op-deployer:latest


START_GATEWAY_COMPOSE_FILES := -f .local_gateway_and_follower/compose.yml
ifeq ($(OS),Darwin)
START_GATEWAY_COMPOSE_FILES += -f .local_gateway_and_follower/compose.mac.yml
endif
START_MAIN_NODE_COMPOSE_FILES := -f .local_main_node/compose.yml

# Overridable Variables
L1_CHAIN_ID?=11155111
L2_CHAIN_ID?=$(shell \
RAW=$$(od -An -N2 -tu2 /dev/urandom | tr -d ' '); \
echo $$((RAW % 50000 + 1)); \
)
L2_CHAIN_ID_HEX:=$(shell printf "0x%064x" $(L2_CHAIN_ID))
PORTAL?=http://18.185.199.51:8080
L1_RPC_URL?=http://34.194.193.217:8545
L1_BEACON_RPC_URL?=http://34.194.193.217:5052
PUBLIC_IP?=$(shell curl ifconfig.me)
# if GATEWAY_SEQUENCING_KEY is set, use that one, otherwise key_to_address will generate a new one
GATEWAY_SEQUENCING_KEY ?= $(shell \
[ -f .local_gateway_and_follower/.env ] && \
grep -m1 '^GATEWAY_SEQUENCING_KEY=' .local_gateway_and_follower/.env \
| cut -d= -f2 \
)
_GATEWAY_KEY_AND_WALLET:=$(shell docker run --rm -i $(IMAGE_KEY_TO_ADDRESS) $(GATEWAY_SEQUENCING_KEY))
GATEWAY_SEQUENCING_KEY:=$(word 1,$(_GATEWAY_KEY_AND_WALLET))
GATEWAY_SEQUENCING_ADDRESS:=$(word 2,$(_GATEWAY_KEY_AND_WALLET))

BASED_GATEWAY_DATA_DIR?=.local_gateway_and_follower/data/gateway
BASED_OP_NODE_DATA_DIR?=.local_gateway_and_follower/data/node
BASED_OP_GETH_DATA_DIR?=.local_gateway_and_follower/data/geth

DEPLOYER_CACHE_DIR:=/tmp/op-deployer-cache

# Some servers default to executing shell scripts below with /bin/sh, we set bash to make sure our bash syntax works
SHELL := /bin/bash
Expand All @@ -33,57 +59,48 @@ docs: ## 📚 Build local docs
npm run build && \
npm run start

build: build-portal build-gateway build-based-op-node build-based-op-geth build-registry build-overseer## 🏗️ Build
build: build-portal build-gateway build-based-op-node build-based-op-geth build-registry ## 🏗️ Build

build-portal: ## 🏗️ Build based portal
docker build -t based_portal_local -f ./based/portal.Dockerfile --build-context reth=./reth ./based
docker build -t local_based_portal -f ./based/portal.Dockerfile --build-context reth=./reth ./based

build-registry: ## 🏗️ Build based registry
docker build -t based_registry_local -f ./based/registry.Dockerfile --build-context reth=./reth ./based
docker build -t local_based_registry -f ./based/registry.Dockerfile --build-context reth=./reth ./based

build-gateway: ## 🏗️ Build based gateway
docker build -t based_gateway_local -f ./based/gateway.Dockerfile --build-context reth=./reth ./based
docker build -t local_based_gateway -f ./based/gateway.Dockerfile --build-context reth=./reth ./based

build-based-op-geth: ## 🏗️ Build OP geth from op-eth directory
docker build -t based_op_geth ../based-op-geth
docker build -t local_based_op_geth ../based-op-geth

build-based-op-node: ## 🏗️ Build OP geth from op-eth directory
docker build -t based_op_node ../based-op-node
cd ../based-optimism && \
IMAGE_TAGS=develop \
docker buildx bake \
-f docker-bake.hcl \
--set op-node.tags=local_based_op_node \
--load \
op-node

build-based-op-deployer: ## 🏗️ Build OP deployer from op-eth directory
cd ../based-optimism && \
IMAGE_TAGS=develop \
docker buildx bake \
-f docker-bake.hcl \
--set op-deployer.tags=local_based_op_deployer \
--load \
op-deployer

build-rabby-chrom: ## 🏗️ Build modified Rabby wallet for Google Chrome and Firefox
cd rabby && \
yarn && \
yarn build:pro && \
yarn build:pro:mv2

build-key_to_address: ## 🏗️ Build based gateway from based directory
docker build -t key_to_address -f ./based/key_to_address.Dockerfile --build-context reth=./reth ./based

L1_CHAIN_ID?=11155111
L2_CHAIN_ID?=$(shell \
RAW=$$(od -An -N2 -tu2 /dev/urandom | tr -d ' '); \
echo $$((RAW % 50000 + 1)); \
)

L2_CHAIN_ID_HEX := $(shell )

PORTAL?=http://18.185.199.51:8080
L1_RPC_URL?=http://34.194.193.217:8545
L1_BEACON_RPC_URL?=http://34.194.193.217:5052
# if GATEWAY_SEQUENCING_KEY is set, use that one, otherwise key_to_address will generate a new one
GATEWAY_SEQUENCING_KEY ?= $(shell \
[ -f .local_gateway_and_follower/.env ] && \
grep -m1 '^GATEWAY_SEQUENCING_KEY=' .local_gateway_and_follower/.env \
| cut -d= -f2 \
)
_GATEWAY_KEY_AND_WALLET:=$(shell docker run --rm -i key_to_address $(GATEWAY_SEQUENCING_KEY))
GATEWAY_SEQUENCING_KEY:=$(word 1,$(_GATEWAY_KEY_AND_WALLET))
GATEWAY_SEQUENCING_ADDRESS:=$(word 2,$(_GATEWAY_KEY_AND_WALLET))
create-network:
docker network inspect based_op_net >/dev/null 2>&1 || docker network create based_op_net

BASED_GATEWAY_DATA_DIR?=.local_gateway_and_follower/data/gateway
BASED_OP_NODE_DATA_DIR?=.local_gateway_and_follower/data/node
BASED_OP_GETH_DATA_DIR?=.local_gateway_and_follower/data/geth
start-gateway:
start-gateway: create-network
@if docker ps --format '{{.Names}}' | grep -wq based-op-gateway ; then \
echo "❌ Gateway already running."; \
exit 1; \
Expand All @@ -104,7 +121,7 @@ start-gateway:
echo "Gateway Sequencing Wallet: $(GATEWAY_SEQUENCING_ADDRESS)"; \
{ \
echo "PORTAL=$(PORTAL)"; \
echo "OP_NODE_GOSSIP_IP=$$(curl ifconfig.me)"; \
echo "OP_NODE_GOSSIP_IP=$(PUBLIC_IP)"; \
echo "GATEWAY_SEQUENCING_KEY=$(GATEWAY_SEQUENCING_KEY)"; \
echo "MAIN_OP_NODE_GOSSIP_STATIC=$$(curl -s -X POST -H 'Content-Type: application/json' \
--data '{"jsonrpc":"2.0","method":"portal_opNodeGossipStatic","params":[],"id":1}' \
Expand Down Expand Up @@ -159,14 +176,14 @@ start-gateway:
mkdir -p $(BASED_GATEWAY_DATA_DIR); \
fi

@wallet=$$(docker run --rm -i $(KEY_TO_ADDRESS_IMAGE) $(GATEWAY_SEQUENCING_KEY)); \
@wallet=$$(docker run --rm -i $(IMAGE_KEY_TO_ADDRESS) $(GATEWAY_SEQUENCING_KEY)); \
echo "...Done"; \
echo; \
echo "Starting with the following generated .env:"; \
cat .local_gateway_and_follower/.env; \
echo; echo; \
echo "Calling registerGateway method via JSON-RPC:"; \
GATEWAY_URL=http://$$(curl -s ifconfig.me):$$(grep -m1 '^GATEWAY_PORT[[:space:]]*=' .local_gateway_and_follower/.env | cut -d= -f2); \
GATEWAY_URL=http://$(PUBLIC_IP):$$(grep -m1 '^GATEWAY_PORT[[:space:]]*=' .local_gateway_and_follower/.env | cut -d= -f2); \
GATEWAY_ADDRESS=$$wallet; \
JWT=$$(cat .local_gateway_and_follower/config/jwt); \
curl -X POST "$(PORTAL)" \
Expand All @@ -183,7 +200,7 @@ start-gateway:
$(MAKE) start-overseer

start-overseer:
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
docker exec -it based-op-gateway overseer --portal-url $(PORTAL)


# ────────────────────────────────────────────────────────────────────────────────
Expand Down Expand Up @@ -217,32 +234,23 @@ deploy-chain:
exit 1; \
fi
@mkdir -p .local_main_node/config
@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/*"
@wallet_batcher=$$(docker run --rm -i $(KEY_TO_ADDRESS_IMAGE) $(OP_PROPOSER_KEY) | tail -n1); \
wallet_proposer=$$(docker run --rm -i $(KEY_TO_ADDRESS_IMAGE) $(OP_BATCHER_KEY) | tail -n1); \
wallet_main=$$(docker run --rm -i $(KEY_TO_ADDRESS_IMAGE) $(MAIN_KEY) | tail -n1); \
l2_chain_id_hex=$$(printf "0x%064x" $(L2_CHAIN_ID)); \
@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/*"
@wallet_batcher=$$(docker run --rm -i $(IMAGE_KEY_TO_ADDRESS) $(OP_PROPOSER_KEY) | tail -n1); \
wallet_proposer=$$(docker run --rm -i $(IMAGE_KEY_TO_ADDRESS) $(OP_PROPOSER_KEY) | tail -n1); \
wallet_main=$$(docker run --rm -i $(IMAGE_KEY_TO_ADDRESS) $(MAIN_KEY) | tail -n1); \
sed -E \
-e "s@L1_CHAIN_ID@$(L1_CHAIN_ID)@g" \
-e "s@L2_CHAIN_ID@$${l2_chain_id_hex}@g" \
-e "s@L2_CHAIN_ID@$(L2_CHAIN_ID_HEX)@g" \
-e "s@VAULT_WALLET@$${wallet_main}@g" \
-e "s@OP_BATCHER_WALLET@$${wallet_batcher}@g" \
-e "s@OP_PROPOSER_WALLET@$${wallet_proposer}@g" \
main_node/intent.template.toml \
> .local_main_node/config/intent.toml

@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)
@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
@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
@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/*"
@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 \
> $$(pwd)/.local_main_node/config/rollup.json.tmp && mv $$(pwd)/.local_main_node/config/rollup.json.tmp $$(pwd)/.local_main_node/config/config.json
@blockNumber=$$(docker run -v $$(pwd)/.local_main_node/config:/config -i imega/jq -r '.genesis.l1.number' /config/rollup.json); \
hex=$$(printf "0x%x" $$blockNumber); \
hash=$$(curl -s -X POST -H 'Content-Type: application/json' \
--data '{"jsonrpc":"2.0","id":1,"method":"eth_getBlockByNumber","params":["'"$$hex"'",false]}' \
$(L1_RPC_URL) | docker run -i imega/jq -r '.result.hash'); \
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
@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)
@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
@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
@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/*"

@openssl rand -hex 32 | tr -d '\n' | sed 's/^/0x/' > .local_main_node/config/jwt
@echo "...Done deploying. See chain config in"
Expand Down Expand Up @@ -272,10 +280,10 @@ ifndef STATE_JSON
$(error STATE_JSON is undefined! Please invoke like \
`make $(MAKECMDGOALS) ROLLUP_JSON=… GENESIS_JSON=… STATE_JSON=… OP_GETH_DATA_DIR=… OP_NODE_DATA_DIR=…`)
endif
endif

OP_GETH_DATA_DIR?=.local_main_node/data/geth
OP_NODE_DATA_DIR?=.local_main_node/data/node
endif
# ────────────────────────────────────────────────────────────────────────────────
config-main-node:
@if [ -d .local_main_node/config ]; then \
Expand All @@ -288,12 +296,12 @@ config-main-node:
@cp $(ROLLUP_JSON) .local_main_node/config
@cp $(GENESIS_JSON) .local_main_node/config
@cp $(STATE_JSON) .local_main_node/config
@if [ "$(OP_GETH_DATA_DIR)" != ".local_main_node/data/geth" ] && [ ! -d ".local_main_node/data/geth" ] && [ -d "$(OP_GETH_DATA_DIR)" ]; then \
@if [ "$(OP_GETH_DATA_DIR)" != ".local_main_node/data/geth" ] && [ ! -d ".local_main_node/data/geth" ] && [ -d "$(OP_GETH_DATA_DIR)"]; then \
ln -s $(OP_GETH_DATA_DIR) .local_main_node/data/geth; \
else \
mkdir -p $(BASED_OP_GETH_DATA_DIR); \
fi
@if [ "$(OP_NODE_DATA_DIR)" != ".local_main_node/data/node" ] && [ ! -d ".local_main_node/data/node" ] && [ -d "$(OP_NODE_DATA_DIR)" ]; then \
@if [ "$(OP_NODE_DATA_DIR)" != ".local_main_node/data/node" ] && [ ! -d ".local_main_node/data/node" ] && [ -d "$(OP_NODE_DATA_DIR)"]; then \
ln -s $(OP_NODE_DATA_DIR) .local_main_node/data/node; \
else \
mkdir -p $(OP_NODE_DATA_DIR); \
Expand All @@ -308,7 +316,7 @@ config-main-node:
@echo

# By default these will be pointing to directories under .local_<xyz>
start-main-node: build-portal build-registry
start-main-node: create-network
@if docker ps --format '{{.Names}}' | grep -wq op-node ; then \
echo "❌ Main node already running."; \
exit 1; \
Expand All @@ -324,7 +332,7 @@ start-main-node: build-portal build-registry
@# generate .env and fetch JSON if missing
@if [ ! -f .local_main_node/.env ]; then \
cp main_node/env_example .local_main_node/.env; \
cp main_node/compose.yml .local_main_node/compose.yml; \
cp main_node/compose* .local_main_node; \
$(MAKE) fix-compose; \
echo "Initializing all components of a main sequencing node in ./.local_main_node ..."; \
{ \
Expand All @@ -333,7 +341,7 @@ start-main-node: build-portal build-registry
echo "L1_RPC_URL=$(L1_RPC_URL)"; \
echo "L1_BEACON_RPC_URL=$(L1_BEACON_RPC_URL)"; \
echo "OP_NODE_SEQUENCER_KEY=$(MAIN_KEY)"; \
echo "OP_NODE_GOSSIP_IP=$$(curl ifconfig.me)"; \
echo "OP_NODE_GOSSIP_IP=$(PUBLIC_IP)"; \
echo "OP_BATCHER_PRIVATE_KEY=$(OP_BATCHER_KEY)"; \
echo "OP_PROPOSER_PRIVATE_KEY=$(OP_PROPOSER_KEY)"; \
} >> .local_main_node/.env; \
Expand All @@ -348,7 +356,7 @@ start-main-node: build-portal build-registry
@echo
@echo

@cd .local_main_node && docker compose up -d
@docker compose $(START_MAIN_NODE_COMPOSE_FILES) up -d
$(MAKE) logs-main-node

start-portal: build-portal
Expand Down Expand Up @@ -420,7 +428,7 @@ logs-based-op-node: ## 📜 Show based op-node logs
docker logs based-op-node --tail 100 -f

logs-based-op-geth: ## 📜 Show based op-geth logs
docker logs based-op-node --tail 100 -f
docker logs based-op-geth --tail 100 -f

logs-op-node: ## 📜 Show main op-node logs (only for main sequencing node)
docker logs op-node --tail 100 -f
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
## Local Development/Quick start

### With existing OP chain
The following steps have been tested on Sepolia, with a previously deployed L2 chain (l2 non-pectra)
The following steps have been tested on Sepolia, with a previously deployed L2 chain
1. locate your `rollup.json`, `genesis.json` and `state.json` files
2. run `make config-main-node OP_NODE_DATA_DIR=<path/to/op-node/data> OP_GETH_DATA_DIR=<path/to/op-geth/data> ROLLUP_JSON=<path/to/rollup.json> GENESIS_JSON=<path/to/genesis.json> STATE_JSON=<path/to/state.json>`
3. there should be some files set up in `.local_main_node`
Expand Down
12 changes: 12 additions & 0 deletions based/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion based/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ reth-primitives = { path = "../reth/crates/primitives" }
reth-primitives-traits = { path = "../reth/crates/primitives-traits" }
reth-provider = { path = "../reth/crates/storage/provider", features = ["test-utils"] }
reth-revm = { path = "../reth/crates/revm" }
reth-rpc-builder = { path = "../reth/crates/rpc/rpc-builder" }
reth-rpc-layer = { path = "../reth/crates/rpc/rpc-layer" }
reth-stages-types = { path = "../reth/crates/stages/types" }
reth-storage-api = { path = "../reth/crates/storage/storage-api" }
Expand Down Expand Up @@ -131,4 +132,4 @@ tree_hash_derive = "0.10"
uuid = { version = "1.12.1", features = ["serde", "v4"] }

backtrace = "0.3.73"
tabwriter = "1.4.1"
tabwriter = "1.4.1"
Loading
Loading