forked from ethereum-optimism/optimism
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathjustfile
More file actions
188 lines (165 loc) · 9.03 KB
/
justfile
File metadata and controls
188 lines (165 loc) · 9.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
import '../justfiles/prerequisites.just'
KURTOSIS_PACKAGE := "./optimism-package-trampoline/"
test: _prerequisites
go test --tags=testonly ./...
_kurtosis-run PACKAGE_NAME ARG_FILE ENCLAVE:
kurtosis run {{PACKAGE_NAME}} --args-file {{ARG_FILE}} --enclave {{ENCLAVE}} --show-enclave-inspect=false --image-download=missing
_prestate-build PATH='.':
docker buildx build --output {{PATH}} --progress plain -f ../op-program/Dockerfile.repro ../
_docker_build TAG TARGET CONTEXT DOCKERFILE *ARGS: _prerequisites
#!/usr/bin/env bash
# --load is needed to ensure the image ends up in the local registry
# --provenance=false is needed to make the build idempotent
docker buildx build \
--load \
--provenance=false \
-t {{TAG}} \
-f {{CONTEXT}}/{{DOCKERFILE}} \
{{ if TARGET != '' { "--target " + TARGET } else { "" } }} \
--build-arg GIT_COMMIT={git_commit} \
--build-arg GIT_DATE={git_date} \
{{ ARGS }} \
{{CONTEXT}}
_docker_build_stack TAG TARGET *ARGS: (_docker_build TAG TARGET "../" "ops/docker/op-stack-go/Dockerfile" ARGS)
cannon-image TAG='cannon:devnet': (_docker_build_stack TAG "cannon-target")
da-server-image TAG='da-server:devnet': (_docker_build_stack TAG "da-server-target")
op-batcher-image TAG='op-batcher:devnet': (_docker_build_stack TAG "op-batcher-target")
# TODO: this is a temporary hack to get the kona + asterisc version right.
# Ideally the Dockerfile should be self-sufficient (right now we depend on
# docker-bake.hcl to do the right thing).
op-challenger-image TAG='op-challenger:devnet': (_docker_build_stack TAG "op-challenger-target" "--build-arg" "KONA_VERSION=1.0.1" "--build-arg" "ASTERISC_VERSION=v1.3.0")
op-conductor-image TAG='op-conductor:devnet': (_docker_build_stack TAG "op-conductor-target")
op-deployer-image TAG='op-deployer:devnet': (_docker_build_stack TAG "op-deployer-target")
op-dispute-mon-image TAG='op-dispute-mon:devnet': (_docker_build_stack TAG "op-dispute-mon-target")
op-node-image TAG='op-node:devnet': (_docker_build_stack TAG "op-node-target")
op-program-image TAG='op-program:devnet': (_docker_build_stack TAG "op-program-target")
op-proposer-image TAG='op-proposer:devnet': (_docker_build_stack TAG "op-proposer-target")
op-supervisor-image TAG='op-supervisor:devnet': (_docker_build_stack TAG "op-supervisor-target")
op-wheel-image TAG='op-wheel:devnet': (_docker_build_stack TAG "op-wheel-target")
op-faucet-image TAG='op-faucet:devnet': (_docker_build_stack TAG "op-faucet-target")
op-interop-mon-image TAG='op-interop-mon:devnet': (_docker_build_stack TAG "op-interop-mon-target")
op-program-builder-image TAG='op-program-builder:devnet': _prerequisites
just op-program-svc/op-program-svc {{TAG}}
# Devnet template recipe
# Note: Make sure that TEMPLATE_FILE is in the kurtosis-devnet/ directory.
# Cannot use a file from the kurtosis-devnet/templates/ directory for example.
devnet TEMPLATE_FILE DATA_FILE="" NAME="" PACKAGE=KURTOSIS_PACKAGE: _prerequisites
#!/usr/bin/env bash
export DEVNET_NAME={{NAME}}
if [ -z "{{NAME}}" ]; then
export DEVNET_NAME=`basename {{TEMPLATE_FILE}} .yaml`
if [ -n "{{DATA_FILE}}" ]; then
export DATA_FILE_NAME=`basename {{DATA_FILE}} .json`
export DEVNET_NAME="$DEVNET_NAME-$DATA_FILE_NAME"
fi
fi
export ENCL_NAME="$DEVNET_NAME"-devnet
export CONDUCTOR_CONFIG="tests/op-conductor-ops-$ENCL_NAME.toml"
go run cmd/main.go -kurtosis-package {{PACKAGE}} \
-environment "tests/$ENCL_NAME.json" \
-conductor-config "$CONDUCTOR_CONFIG" \
-template "{{TEMPLATE_FILE}}" \
-data "{{DATA_FILE}}" \
-enclave "$ENCL_NAME" \
&& cat "tests/$ENCL_NAME.json" && if [ -f "$CONDUCTOR_CONFIG" ]; then cat "$CONDUCTOR_CONFIG"; fi
devnet-test DEVNET *TEST: _prerequisites
#!/usr/bin/env bash
export TESTS=({{TEST}})
# we need a timestamp in there to force kurtosis to not cache the test solely based on its name!
export ARGS=$(printf '%s\n' "${TESTS[@]}" | jq -R . | jq -s . | jq -s '{devnet: "{{DEVNET}}", timestamp: "{{datetime("%s")}}", tests: add}')
kurtosis run --enclave {{DEVNET}} \
--show-enclave-inspect=false \
./tests/ "$ARGS"
# Devnet recipes
##### These are the main eigenda commands used by CI and automated tests #####
# Start an EigenDA devnet with the given values file (see options in eigenda-template-values/).
# The devnet will be named "eigenda-devnet" by default, but you can override this with the NAME argument.
# We also start a tx-fuzzer separately, since the optimism-package doesn't currently have that configurable as part of its package.
[group('eigenda')]
eigenda-devnet-start VALUES_FILE="eigenda-template-values/memstore-concurrent-large-blobs.json" ENCLAVE_PREFIX="eigenda": (devnet "eigenda.yaml" VALUES_FILE ENCLAVE_PREFIX)
just eigenda-devnet-add-tx-fuzzer {{ENCLAVE_PREFIX}}-devnet
[group('eigenda')]
eigenda-devnet-clean ENCLAVE_NAME="eigenda-devnet":
kurtosis enclave rm {{ENCLAVE_NAME}} --force
# Runs all tests that end with the `_Memstore` suffix, assuming the devnet was started with memstore proxy,
# meaning with a config file in eigenda-template-values/memstore-* .
[group('eigenda')]
eigenda-devnet-test-memstore *ARGS="":
go test ./tests/eigenda/... -run "_Memstore$" -v -timeout 30m {{ARGS}}
# Runs all tests that end with the `_Sepolia` suffix, assuming the devnet was started with proxy using sepolia backend.
# To start the devnet with sepolia backend, the files in eigenda-template-values/sepolia-* need have secrets injected.
# Take a look at how CI does it in .github/workflows/kurtosis-devnet.yml .
[group('eigenda')]
eigenda-devnet-test-sepolia *ARGS="":
go test ./tests/eigenda/... -run "_Sepolia$" -v -timeout 50m {{ARGS}}
[group('eigenda')]
eigenda-devnet-add-tx-fuzzer ENCLAVE_NAME="eigenda-devnet" *ARGS="":
kurtosis service add {{ENCLAVE_NAME}} tx-fuzz ethpandaops/tx-fuzz:master --cmd \
"spam \
--sk 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 \
--rpc http://op-el-2151908-node0-op-geth:8545 \
--slot-time 2 \
--accounts 100 --txcount 1" \
{{ARGS}}
##### EigenDA Commands below are for debugging and manual testing #####
# Cause proxy to start returning 503 errors to batcher, as a signal
# to failover to ethDA. Use `eigenda-devnet-failback` to revert.
[group('eigenda')]
eigenda-devnet-failover ENCLAVE_NAME="eigenda-devnet":
#!/usr/bin/env bash
PROXY_ENDPOINT=$(kurtosis port print {{ENCLAVE_NAME}} da-server-op-kurtosis http)
curl -X PATCH $PROXY_ENDPOINT/memstore/config -d '{"PutReturnsFailoverError": true}'
[group('eigenda')]
eigenda-devnet-failback ENCLAVE_NAME="eigenda-devnet":
#!/usr/bin/env bash
PROXY_ENDPOINT=$(kurtosis port print {{ENCLAVE_NAME}} da-server-op-kurtosis http)
curl -X PATCH $PROXY_ENDPOINT/memstore/config -d '{"PutReturnsFailoverError": false}'
[group('eigenda')]
eigenda-devnet-grafana ENCLAVE_NAME="eigenda-devnet":
#!/usr/bin/env bash
GRAFANA_URL=$(kurtosis port print {{ENCLAVE_NAME}} grafana http)
open $GRAFANA_URL
[group('eigenda')]
eigenda-devnet-sync-status ENCLAVE_NAME="eigenda-devnet":
#!/usr/bin/env bash
OPNODE_ENDPOINT=$(kurtosis port print {{ENCLAVE_NAME}} op-cl-2151908-node0-op-node rpc)
cast rpc optimism_syncStatus --rpc-url $OPNODE_ENDPOINT | jq
[group('eigenda')]
eigenda-devnet-configs ENCLAVE_NAME="eigenda-devnet":
#!/usr/bin/env bash
echo "OP-NODE ROLLUP CONFIG:"
OPNODE_ENDPOINT=$(kurtosis port print {{ENCLAVE_NAME}} op-cl-2151908-node0-op-node http)
cast rpc optimism_rollupConfig --rpc-url $OPNODE_ENDPOINT | jq
echo "TEKU L1-CL SPEC:"
TEKU_ENDPOINT=$(kurtosis port print {{ENCLAVE_NAME}} cl-1-teku-geth http)
curl $TEKU_ENDPOINT/eth/v1/config/spec | jq
echo "PROXY MEMSTORE CONFIG:"
PROXY_ENDPOINT=$(kurtosis port print {{ENCLAVE_NAME}} da-server-op-kurtosis http)
curl $PROXY_ENDPOINT/memstore/config | jq
curl $PROXY_ENDPOINT/admin/eigenda-dispersal-backend | jq
[group('eigenda')]
eigenda-devnet-change-proxy-backend backend="V1" ENCLAVE_NAME="eigenda-devnet":
#!/usr/bin/env bash
PROXY_ENDPOINT=$(kurtosis port print {{ENCLAVE_NAME}} da-server-op-kurtosis http)
curl -X PUT $PROXY_ENDPOINT/admin/eigenda-dispersal-backend \
-H "Content-Type: application/json" \
-d '{"eigenDADispersalBackend": "{{backend}}"}'
# See https://docs.kurtosis.com/service-update/
[group('eigenda')]
eigenda-devnet-restart-batcher ENCLAVE_NAME="eigenda-devnet":
kurtosis service update {{ENCLAVE_NAME}} op-batcher-2151908-op-kurtosis
# Simple devnet
simple-devnet: (devnet "simple.yaml")
# Interop devnet
interop-devnet: (devnet "interop.yaml")
interop-devnet-test: (devnet-test "interop-devnet" "interop-smoke-test.sh")
# User devnet
user-devnet DATA_FILE:
{{just_executable()}} devnet "user.yaml" {{DATA_FILE}} {{file_stem(DATA_FILE)}}
# Jovian devnet
jovian-devnet: (devnet "jovian.yaml")
# Flashblocks devnet
flash-devnet: (devnet "flash.yaml")
# subshells
enter-devnet DEVNET CHAIN='Ethereum' NODE_INDEX='0': _prerequisites
go run ../devnet-sdk/shell/cmd/enter/main.go --devnet kt://{{DEVNET}} --chain {{CHAIN}} --node-index {{NODE_INDEX}}