1- .PHONY: devnet-build devnet-tests-build devnet-up devnet-reset devnet-up-detach devnet-down devnet-stop devnet-clean devnet-deploy-tar devnet-upgrade devnet-new devnet-start
2- .PHONY: devnet-build-default _check-devnet-default-cfg _devnet-select-default-genesis devnet-upgrade-binaries devnet-upgrade-binaries-default devnet-update-scripts
1+ .PHONY: devnet-build devnet-tests-build devnet-up devnet-reset devnet-up-detach devnet-down devnet-stop devnet-clean devnet-deploy-tar devnet-upgrade devnet-new devnet-start devnet-evm-upgrade
2+ .PHONY: devnet-build-default _check-devnet-default-cfg _devnet-select-default-genesis devnet-refresh-bin devnet- upgrade-binaries devnet-upgrade-binaries-default devnet-update-scripts
33.PHONY: devnet-evmigration-sync-bin devnet-evmigration-prepare devnet-evmigration-estimate devnet-evmigration-migrate devnet-evmigration-migrate-validator devnet-evmigration-cleanup
4+ .PHONY: devnet-evmigrationp-prepare devnet-evmigrationp-estimate devnet-evmigrationp-migrate devnet-evmigrationp-migrate-validator devnet-evmigrationp-cleanup
45
56##### Devnet Makefile ########################################
67#
@@ -345,6 +346,28 @@ devnet-upgrade-binaries-default:
345346 echo "Using upgrade release $$release_name"; \
346347 ./devnet/scripts/upgrade-binaries.sh "${DEVNET_BIN_DIR}" "$$release_name"
347348
349+ devnet-refresh-bin:
350+ @mkdir -p "${DEVNET_BIN_DIR}"; \
351+ $(MAKE) build; \
352+ if [ ! -f "${BUILD_DIR}/lumerad" ]; then \
353+ echo "Cannot find lumerad binary [${BUILD_DIR}/lumerad]"; \
354+ exit 1; \
355+ fi; \
356+ cp -f "${BUILD_DIR}/lumerad" "${DEVNET_BIN_DIR}/lumerad"; \
357+ if [ -f "${BUILD_DIR}/libwasmvm.x86_64.so" ]; then \
358+ cp -f "${BUILD_DIR}/libwasmvm.x86_64.so" "${DEVNET_BIN_DIR}/libwasmvm.x86_64.so"; \
359+ else \
360+ go get github.com/CosmWasm/wasmvm/$(WASMVM_VERSION) && \
361+ WASMVM_SO="$$(find $$(go env GOPATH)/pkg/mod/github.com/!cosm!wasm/wasmvm/$(WASMVM_VERSION) -name "libwasmvm.x86_64.so" -print -quit)" && \
362+ if [ -z "$$WASMVM_SO" ]; then \
363+ echo "Unable to locate libwasmvm.x86_64.so in GOPATH"; \
364+ exit 1; \
365+ fi; \
366+ cp -f "$$WASMVM_SO" "${DEVNET_BIN_DIR}/libwasmvm.x86_64.so"; \
367+ fi; \
368+ chmod +x "${DEVNET_BIN_DIR}/lumerad"; \
369+ echo "Refreshed ${DEVNET_BIN_DIR} from current repo build."
370+
348371devnet-update-scripts:
349372 @if [ ! -f "$(COMPOSE_FILE)" ]; then \
350373 echo "Missing $(COMPOSE_FILE); run 'make devnet-build' first."; \
@@ -405,6 +428,7 @@ devnet-upgrade-1110:
405428 @cd devnet/scripts && ./upgrade.sh v1.11.0 auto-height ../bin-v1.11.0
406429
407430devnet-upgrade-1120:
431+ @$(MAKE) devnet-refresh-bin
408432 @cd devnet/scripts && ./upgrade.sh v1.12.0 auto-height ../bin
409433
410434devnet-new-172:
@@ -428,6 +452,70 @@ devnet-new-1110:
428452 sleep 10
429453 $(MAKE) devnet-up
430454
455+ devnet-evm-upgrade:
456+ @set -eu; \
457+ echo "==> Stage: install v1.11.0 devnet"; \
458+ if ! $(MAKE) devnet-down; then \
459+ echo "ERROR: stage 'install v1.11.0 devnet' failed during devnet-down" >&2; \
460+ exit 1; \
461+ fi; \
462+ if ! $(MAKE) devnet-clean; then \
463+ echo "ERROR: stage 'install v1.11.0 devnet' failed during devnet-clean" >&2; \
464+ exit 1; \
465+ fi; \
466+ if ! $(MAKE) devnet-build-1110; then \
467+ echo "ERROR: stage 'install v1.11.0 devnet' failed during devnet-build-1110" >&2; \
468+ exit 1; \
469+ fi; \
470+ sleep 10; \
471+ if ! $(MAKE) devnet-up-detach; then \
472+ echo "ERROR: stage 'install v1.11.0 devnet' failed during devnet-up-detach" >&2; \
473+ exit 1; \
474+ fi; \
475+ echo "==> Stage: wait for height 40"; \
476+ if ! ./devnet/scripts/wait-for-height.sh 40; then \
477+ echo "ERROR: stage 'wait for height 40' failed" >&2; \
478+ exit 1; \
479+ fi; \
480+ echo "==> Stage: devnet-evmigrationp-prepare"; \
481+ if ! $(MAKE) devnet-evmigrationp-prepare; then \
482+ echo "ERROR: stage 'devnet-evmigrationp-prepare' failed" >&2; \
483+ exit 1; \
484+ fi; \
485+ current_height="$$(docker compose -f $(COMPOSE_FILE) exec -T supernova_validator_1 \
486+ lumerad status 2>/dev/null | jq -r '.sync_info.latest_block_height // empty' 2>/dev/null || true)"; \
487+ if ! echo "$$current_height" | grep -Eq '^[0-9]+$$'; then \
488+ echo "ERROR: stage 'post-prepare wait' failed to determine current chain height" >&2; \
489+ exit 1; \
490+ fi; \
491+ target_height=$$((current_height + 5)); \
492+ echo "==> Stage: wait for height $${target_height}"; \
493+ if ! ./devnet/scripts/wait-for-height.sh "$$target_height"; then \
494+ echo "ERROR: stage 'post-prepare wait' failed while waiting for height $${target_height}" >&2; \
495+ exit 1; \
496+ fi; \
497+ echo "==> Stage: devnet-upgrade-1120"; \
498+ if ! $(MAKE) devnet-upgrade-1120; then \
499+ echo "ERROR: stage 'devnet-upgrade-1120' failed" >&2; \
500+ exit 1; \
501+ fi; \
502+ echo "==> Stage: devnet-evmigrationp-estimate"; \
503+ if ! $(MAKE) devnet-evmigrationp-estimate; then \
504+ echo "ERROR: stage 'devnet-evmigrationp-estimate' failed" >&2; \
505+ exit 1; \
506+ fi; \
507+ echo "==> Stage: devnet-evmigrationp-migrate-validator"; \
508+ if ! $(MAKE) devnet-evmigrationp-migrate-validator; then \
509+ echo "ERROR: stage 'devnet-evmigrationp-migrate-validator' failed" >&2; \
510+ exit 1; \
511+ fi; \
512+ echo "==> Stage: devnet-evmigrationp-migrate"; \
513+ if ! $(MAKE) devnet-evmigrationp-migrate; then \
514+ echo "ERROR: stage 'devnet-evmigrationp-migrate' failed" >&2; \
515+ exit 1; \
516+ fi; \
517+ echo "devnet-evm-upgrade completed successfully."
518+
431519devnet-deploy-tar:
432520 # Ensure required files exist from previous build
433521 @if [ ! -f "devnet/docker-compose.yml" ] || [ ! -f "devnet/bin/lumerad" ] || [ ! -f "devnet/bin/libwasmvm.x86_64.so" ]; then \
@@ -552,3 +640,63 @@ devnet-evmigration-migrate-validator: devnet-evmigration-sync-bin
552640
553641devnet-evmigration-cleanup: devnet-evmigration-sync-bin
554642 $(call _run_evmigration_in_containers,cleanup)
643+
644+ ##### Parallel EVM Migration targets ##########################
645+ #
646+ # Same as the sequential targets above, but all validators run
647+ # concurrently. Output is prefixed with the service name.
648+
649+ define _run_evmigration_in_containers_parallel
650+ @if [ ! -f "$(COMPOSE_FILE)" ]; then \
651+ echo "docker-compose.yml not found; run 'make devnet-build' first"; \
652+ exit 1; \
653+ fi; \
654+ services="$(_EVMIGRATION_SERVICES)"; \
655+ if [ -z "$$services" ]; then \
656+ echo "No running supernova_validator_* services found; is the devnet up?"; \
657+ exit 1; \
658+ fi; \
659+ tmpdir="$$(mktemp -d)"; \
660+ pids=""; \
661+ for svc in $$services; do \
662+ accounts_path="$(_EVMIGRATION_ACCOUNTS_CONTAINER_PREFIX)-$${svc}.json"; \
663+ echo "=== $(1) on $${svc} (parallel) ==="; \
664+ ( docker compose -f $(COMPOSE_FILE) exec -T "$${svc}" \
665+ "$(_EVMIGRATION_BIN_CONTAINER)" \
666+ $(_evmigration_common_container) \
667+ -accounts="$${accounts_path}" \
668+ -mode="$(1)" \
669+ $(2) > "$${tmpdir}/$${svc}.out" 2>&1 ; \
670+ echo $$? > "$${tmpdir}/$${svc}.rc" \
671+ ) & \
672+ pids="$$pids $$!"; \
673+ done; \
674+ wait $$pids; \
675+ failed=0; \
676+ for svc in $$services; do \
677+ rc="$$(cat "$${tmpdir}/$${svc}.rc" 2>/dev/null || echo 1)"; \
678+ echo "=== output from $${svc} (exit $$rc) ==="; \
679+ sed "s/^/[$${svc}] /" < "$${tmpdir}/$${svc}.out" 2>/dev/null || true; \
680+ if [ "$$rc" != "0" ]; then \
681+ echo "FAIL: $(1) on $${svc} exited with code $$rc"; \
682+ failed=1; \
683+ fi; \
684+ done; \
685+ rm -rf "$$tmpdir"; \
686+ if [ "$$failed" = "1" ]; then exit 1; fi
687+ endef
688+
689+ devnet-evmigrationp-prepare: devnet-evmigration-sync-bin
690+ $(call _run_evmigration_in_containers_parallel,prepare,-num-accounts=$(EVMIGRATION_NUM_ACCOUNTS) -num-extra=$(EVMIGRATION_NUM_EXTRA))
691+
692+ devnet-evmigrationp-estimate: devnet-evmigration-sync-bin
693+ $(call _run_evmigration_in_containers_parallel,estimate)
694+
695+ devnet-evmigrationp-migrate: devnet-evmigration-sync-bin
696+ $(call _run_evmigration_in_containers_parallel,migrate)
697+
698+ devnet-evmigrationp-migrate-validator: devnet-evmigration-sync-bin
699+ $(call _run_evmigration_in_containers_parallel,migrate-validator)
700+
701+ devnet-evmigrationp-cleanup: devnet-evmigration-sync-bin
702+ $(call _run_evmigration_in_containers_parallel,cleanup)
0 commit comments