diff --git a/zeronet/2026-06-24-system-deploy/Makefile b/zeronet/2026-06-24-system-deploy/Makefile new file mode 100644 index 00000000..43f05503 --- /dev/null +++ b/zeronet/2026-06-24-system-deploy/Makefile @@ -0,0 +1,32 @@ +include ../../Makefile +include ../../Multisig.mk +include ../.env + +CONTRACTS_REPO := $(abspath ../../../contracts) +TASK_DIR := $(abspath .) +DEPLOY_SCRIPT := scripts/deploy/SystemDeploy.s.sol:SystemDeploy +SALT_MIXER ?= salt mixer + +## +# Simulation (no broadcast) +## +.PHONY: simulate +simulate: + cd $(CONTRACTS_REPO) && \ + DEPLOY_CONFIG_PATH=$(TASK_DIR)/deploy-config/zeronet.json \ + SALT_MIXER="$(SALT_MIXER)" \ + $(MISE_EXEC) forge script -vvvv $(DEPLOY_SCRIPT) \ + --rpc-url $(L1_RPC_URL) + +## +# Deployment (broadcast via Ledger) +## +.PHONY: deploy +deploy: + cd $(CONTRACTS_REPO) && \ + DEPLOY_CONFIG_PATH=$(TASK_DIR)/deploy-config/zeronet.json \ + SALT_MIXER="$(SALT_MIXER)" \ + $(MISE_EXEC) forge script -vvvv $(DEPLOY_SCRIPT) \ + --rpc-url $(L1_RPC_URL) \ + --broadcast \ + --ledger --hd-paths $(LEDGER_HD_PATH) diff --git a/zeronet/2026-06-24-system-deploy/README.md b/zeronet/2026-06-24-system-deploy/README.md new file mode 100644 index 00000000..05dcbc52 --- /dev/null +++ b/zeronet/2026-06-24-system-deploy/README.md @@ -0,0 +1,31 @@ +# zeronet system deploy + +Full L1 system deployment on zeronet using `SystemDeploy.s.sol` from the sibling `contracts/` repo. + + +## Steps + +### 0. Refresh genesis anchor values before executing + +`multiproofGenesisBlockNumber` and `multiproofGenesisOutputRoot` must point to a block that is still available in the proof node at the time of deployment. Refresh them immediately before running `make simulate` or `make deploy`: + +```sh +BLOCK=$(cast rpc optimism_syncStatus --rpc-url https://base-zeronet-reth-proofs-donotuse.cbhq.net:7545 | jq -r '.finalized_l2.number') +OUTPUT_ROOT=$(cast rpc optimism_outputAtBlock "$(printf '0x%x' "$BLOCK")" --rpc-url https://base-zeronet-reth-rpc-donotuse.cbhq.net:7545 | jq -r '.outputRoot') +echo "multiproofGenesisBlockNumber: $BLOCK" +echo "multiproofGenesisOutputRoot: $OUTPUT_ROOT" +``` + +Update `deploy-config/zeronet.json` with the printed values before proceeding. + +### 1. Simulate (no broadcast) + +```sh +make simulate +``` + +### 2. Deploy (broadcast via Ledger) + +```sh +make deploy +``` diff --git a/zeronet/2026-06-24-system-deploy/deploy-config/zeronet.json b/zeronet/2026-06-24-system-deploy/deploy-config/zeronet.json new file mode 100644 index 00000000..7291751c --- /dev/null +++ b/zeronet/2026-06-24-system-deploy/deploy-config/zeronet.json @@ -0,0 +1,44 @@ +{ + "baseFeeVaultMinimumWithdrawalAmount": "0x8ac7230489e80000", + "baseFeeVaultRecipient": "0x856611ed7e07d83243b15e93f6321f2df6865852", + "baseFeeVaultWithdrawalNetwork": 0, + "batchSenderAddress": "0x4C810feC547F6C143dB51953af51A1De79BEAD21", + "disputeGameFinalityDelaySeconds": 302400, + "delayedWETHWithdrawalDelay": 604800, + "finalSystemOwner": "0x3d59999977e0896ee1f8783bb8251df16fb483e9", + "gasPriceOracleBaseFeeScalar": 1368, + "gasPriceOracleBlobBaseFeeScalar": 810949, + "l1ChainId": 560048, + "l1FeeVaultMinimumWithdrawalAmount": "0x8ac7230489e80000", + "l1FeeVaultRecipient": "0x856611ed7e07d83243b15e93f6321f2df6865852", + "l1FeeVaultWithdrawalNetwork": 0, + "l2ChainId": 763360, + "l2GenesisBlockGasLimit": "0x1c9c380", + "l2OutputOracleStartingBlockNumber": 0, + "l2OutputOracleStartingTimestamp": 0, + "multiproofBlockInterval": 600, + "multiproofConfigHash": "0xab64b3118d2d030a3fd3fe3005239a2f332e48848bbedddca9e10df77ac7303e", + "multiproofGameType": 621, + "multiproofGenesisBlockNumber": 4179448, + "multiproofGenesisOutputRoot": "0x56d192e8832cac413dcbbe5156c5476771e90ac7d76d42ef048c168ebe12b63c", + "multiproofIntermediateBlockInterval": 30, + "nitroEnclaveVerifier": "0x4e3E30E148E803667913bE97A8ce9EBA39b65563", + "operatorFeeVaultMinimumWithdrawalAmount": "0x8ac7230489e80000", + "operatorFeeVaultRecipient": "0x856611ed7e07d83243b15e93f6321f2df6865852", + "operatorFeeVaultWithdrawalNetwork": 0, + "p2pSequencerAddress": "0xcf17274338d3128f6C96d9af54511a17e8b38a08", + "proofMaturityDelaySeconds": 604800, + "proxyAdminOwner": "0x3d59999977e0896ee1f8783bb8251df16fb483e9", + "respectedGameType": 621, + "sequencerFeeVaultMinimumWithdrawalAmount": "0x8ac7230489e80000", + "sequencerFeeVaultRecipient": "0x856611ed7e07d83243b15e93f6321f2df6865852", + "sequencerFeeVaultWithdrawalNetwork": 0, + "sp1Verifier": "0x5492E1ecd7867AeAd78464EbD5def30F96d462ba", + "superchainConfigGuardian": "0x856611ed7e07d83243b15e93f6321f2df6865852", + "superchainConfigIncidentResponder": "0x856611ed7e07d83243b15e93f6321f2df6865852", + "teeChallenger": "0xad3b1402b3ec6a23c3913258d3811f132e7e35e0", + "teeImageHash": "0x0f4c9f7b78162181ab5091680885fd8b657d67dd5aa4a466c78dbf3763ffcfab", + "teeProposer": "0x5679a6b3817a014d6f3dcd64569d6858f4e92f5e", + "zkAggregationHash": "0x0079eb47fae3287155f38d8733a2f809fcbb28da00063330d3db126a0fb0f274", + "zkRangeHash": "0x0d561a5146c64c983616b7433ad3a4244298c85f27b724d239167ffb1720c160" +}