From 5260ded1cb716acbdd1c27ac3da99089e5e89057 Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Mon, 14 Sep 2026 14:03:11 -0400 Subject: [PATCH 01/14] feat(zeronet): add Cobalt upgrade task Bundles the three Cobalt L1 changes into a single ProxyAdmin-owner transaction for Zeronet: - Dynamic upgrades: deploys a ProtocolVersions registry (proxy plus implementation) and redeploys AggregateVerifier, which binds the registry as a constructor immutable and so cannot be upgraded in place. - EthLockbox removal: upgrades OptimismPortal2 and SystemConfig. - CREATE2 for dispute games: upgrades DisputeGameFactory and registers the new AggregateVerifier for game type 621. Deployment is split across two Foundry profiles because base/contracts pins per-contract optimizer runs (5000 for the portal, system config, factory and proxy; 999999 for the registry and verifier). Zeronet's SystemConfig carries a local MAX_GAS_LIMIT raise, so the task re-applies it as a patch and asserts the resulting build suffix rather than letting a stock build silently revert the limit. Co-authored-by: Cursor --- active/evm/foundry.toml | 29 ++ .../2026-09-14-cobalt-upgrade/FACILITATOR.md | 134 +++++++ .../tasks/2026-09-14-cobalt-upgrade/Makefile | 215 ++++++++++++ .../config/zeronet/.env | 42 +++ .../config/zeronet/README.md | 53 +++ .../config/zeronet/addresses.json | 1 + .../patch/max-gas-limit.patch | 25 ++ .../script/DeployCobaltCoreImpls.s.sol | 84 +++++ .../script/DeployCobaltProofImpls.s.sol | 147 ++++++++ .../script/ExecuteCobaltUpgrade.s.sol | 327 ++++++++++++++++++ 10 files changed, 1057 insertions(+) create mode 100644 active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md create mode 100644 active/evm/tasks/2026-09-14-cobalt-upgrade/Makefile create mode 100644 active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env create mode 100644 active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/README.md create mode 100644 active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/addresses.json create mode 100644 active/evm/tasks/2026-09-14-cobalt-upgrade/patch/max-gas-limit.patch create mode 100644 active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltCoreImpls.s.sol create mode 100644 active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltProofImpls.s.sol create mode 100644 active/evm/tasks/2026-09-14-cobalt-upgrade/script/ExecuteCobaltUpgrade.s.sol diff --git a/active/evm/foundry.toml b/active/evm/foundry.toml index 7756163e3..4b8a9fe8c 100644 --- a/active/evm/foundry.toml +++ b/active/evm/foundry.toml @@ -30,5 +30,34 @@ optimizer_runs = 999999 bytecode_hash = "none" evm_version = "cancun" +# Cobalt deploy profiles. base/contracts pins per-contract optimizer runs via +# `compilation_restrictions` in its own foundry.toml; profile remappings replace +# rather than extend the default list, so both profiles carry the full set. +[profile.cobalt-core-deploy] +optimizer = true +optimizer_runs = 5000 +bytecode_hash = "none" +evm_version = "cancun" +remappings = [ + '@base-contracts/=lib/contracts/', + '@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/', + 'forge-std/=lib/forge-std/src/', + 'interfaces/=lib/contracts/interfaces/', + 'src/=lib/contracts/src/', +] + +[profile.cobalt-proofs-deploy] +optimizer = true +optimizer_runs = 999999 +bytecode_hash = "none" +evm_version = "cancun" +remappings = [ + '@base-contracts/=lib/contracts/', + '@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/', + 'forge-std/=lib/forge-std/src/', + 'interfaces/=lib/contracts/interfaces/', + 'src/=lib/contracts/src/', +] + [lint] lint_on_build = false diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md b/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md new file mode 100644 index 000000000..b14865323 --- /dev/null +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md @@ -0,0 +1,134 @@ +# Cobalt Upgrade — Facilitator Guide + +This task delivers the three Cobalt L1 changes in a single ProxyAdmin-owner transaction: + +| Cobalt change | Contracts touched | +| --- | --- | +| Dynamic upgrades | `ProtocolVersions` (new proxy + implementation), `AggregateVerifier` (redeployed to bind it) | +| EthLockbox removal | `OptimismPortal2`, `SystemConfig` | +| CREATE2 for dispute games | `DisputeGameFactory` | + +Replace `` with the network you are rolling out, for example `zeronet`. Every command +requires `TASK_NETWORK` explicitly — there is no default. Run everything from this directory +(`active/evm/tasks/2026-09-14-cobalt-upgrade/`). + +## 1. Install dependencies + +```bash +make TASK_NETWORK= deps +``` + +This pins `base/contracts` at `BASE_CONTRACTS_COMMIT`, installs the extra OpenZeppelin and solmate +dependencies that building those sources requires, and applies `patch/max-gas-limit.patch`. + +The patch matters. Zeronet runs a `SystemConfig` that raises `MAX_GAS_LIMIT` to 2,000,000,000, and +Cobalt modifies `SystemConfig`. Deploying a stock build would quietly drop the chain back to +500,000,000. The patch re-applies the raise and tags the semver `3.13.2+max-gas-limit-2000M`, and +the deploy script refuses to proceed if that version string is missing. On a network that does not +run the patched build, drop `apply-patches` from the `deps` prerequisites and relax the version +assertions in `DeployCobaltCoreImpls` and `ExecuteCobaltUpgrade` to the stock `3.13.2`. + +## 2. Review the network config + +Open `config//.env` and confirm every value, in particular: + +- `PROTOCOL_VERSIONS_INITIAL_SCHEDULE` — the activation timestamp imported for each upgrade id. + **Ids must stay aligned with the Base mainnet registry**: `AggregateVerifier` hardcodes upgrade + index 13 (Denim) as its block-cadence gate, so inserting or reordering entries silently repoints + that gate. Entries may be `0` for an unscheduled fork. Zeronet was re-genesised with every fork + through Beryl already active, so ids 0–11 carry the genesis timestamp and Cobalt (id 12) is `0`. +- `PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION` — must be non-zero and fit in 128 bits. +- `PROTOCOL_VERSIONS_INCIDENT_RESPONDER` — the address allowed to use the incident path. +- `OLD_*` — the currently deployed implementations. `ExecuteCobaltUpgrade` asserts these match the + live proxies before building any calls, so a stale value stops the task rather than upgrading + from an unexpected base. +- The `AGGREGATE_VERIFIER_*` values, which are carried over from the live implementation so the + redeploy changes nothing except the registry binding and the split cadence intervals. The slow + and fast pairs must divide to the same intermediate root count or the constructor reverts. + +Cobalt itself is registered unscheduled. Setting its activation timestamp is a separate, later +operation and is deliberately not part of this task. + +## 3. Deploy + +```bash +make TASK_NETWORK= deploy +``` + +This runs two steps because `base/contracts` pins different optimizer settings per contract, and +reproducible bytecode requires honouring them: + +1. `deploy-core` (5000 runs) — `OptimismPortal2`, `SystemConfig`, `DisputeGameFactory` + implementations and the `ProtocolVersions` proxy. +2. `deploy-proofs` (999999 runs) — the `ProtocolVersions` implementation and `AggregateVerifier`. + +The proxy is deployed in the first step because `AggregateVerifier` takes its address as a +constructor immutable. It is left pointing at no implementation; the upgrade transaction sets and +initializes it atomically. Each step writes to `config//addresses.json` and asserts its own +postconditions, so a wrong constructor argument fails at deploy time rather than at signing time. + +Then verify the source: + +```bash +VERIFIER_API_KEY= make TASK_NETWORK= verify-core +VERIFIER_API_KEY= make TASK_NETWORK= verify-proofs +``` + +Commit `config//addresses.json` and the `records/` broadcast artifacts. + +## 4. Generate validation files + +```bash +make TASK_NETWORK= gen-validation-cb +make TASK_NETWORK= gen-validation-sc +``` + +These write `config//validations/base-signer.json` and `security-council-signer.json`. +Commit them, then set the `config//README.md` status to `READY TO SIGN` and share it with +signers. + +## 5. Collect signatures and execute + +The ProxyAdmin owner is a 2-of-2 of the Base multisig and the Security Council, so each approves +its own nested Safe before the outer transaction runs. + +```bash +SIGNATURES= make TASK_NETWORK= approve-cb +SIGNATURES= make TASK_NETWORK= approve-sc +make TASK_NETWORK= execute +``` + +`execute` re-runs the same pre- and postconditions inside the broadcast, so it will revert rather +than land a partial upgrade. + +## What the upgrade transaction does + +Five calls, all from the ProxyAdmin owner Safe: + +1. `ProxyAdmin.upgradeAndCall(protocolVersionsProxy, protocolVersionsImpl, initialize(...))` — + `initialize` is `reinitializer(1)` on a never-initialized proxy, so it must be bundled with the + implementation set rather than sent separately. +2. `ProxyAdmin.upgrade(optimismPortal, newImpl)` +3. `ProxyAdmin.upgrade(systemConfig, newImpl)` +4. `ProxyAdmin.upgrade(disputeGameFactory, newImpl)` +5. `DisputeGameFactory.setImplementation(621, newAggregateVerifier)` + +Calls 2–4 are bare upgrades: none of those implementations adds state or bumps its init version, so +there is nothing to reinitialize. + +## Risks worth re-checking before signing + +- **ETH custody.** Cobalt deletes every `EthLockbox` code path from the portal without migrating + balances. A chain with a live lockbox would strand the ETH held there. `_preCheck` refuses to + build the transaction unless `ethLockbox()` is absent or zero. Zeronet reports zero and keeps its + ETH in the portal already, so this upgrade moves no funds — `_postCheck` asserts the portal + balance and its now-spacer slot 63 are both unchanged. +- **Pause semantics.** After the upgrade `SystemConfig.paused()` stops consulting + `superchainConfig.paused()`. On a chain where the lockbox address was paused, that is a + silent unpause. `_postCheck` asserts the effective pause state is unchanged across the upgrade. +- **Unchanged version strings.** `OptimismPortal2` stays at `5.2.0` and `DisputeGameFactory` at + `1.4.0` across this change, so `version()` alone cannot tell old from new. Confirm the + implementation addresses, not the semver. +- **Existing dispute games.** Switching the factory to `CREATE2` only affects games created after + the upgrade; existing game proxies and `gameCount()` are untouched, and `_postCheck` asserts the + count is stable. diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/Makefile b/active/evm/tasks/2026-09-14-cobalt-upgrade/Makefile new file mode 100644 index 000000000..ac2be8f8e --- /dev/null +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/Makefile @@ -0,0 +1,215 @@ +include ../../../../Makefile +include $(REPO_ROOT)/Multisig.mk + +# Cobalt rolls out across several networks from this one task directory, so the +# network is never defaulted. Select it on every command line: +# make TASK_NETWORK=zeronet deploy +ifndef TASK_NETWORK +$(error TASK_NETWORK is required, e.g. make TASK_NETWORK=zeronet $(MAKECMDGOALS)) +endif + +PROJECT_DIR := $(abspath ../..) + +include $(REPO_ROOT)/config/$(TASK_NETWORK).env +include config/$(TASK_NETWORK)/.env + +SIGNER_TOOL_PATH := $(REPO_ROOT)/signer-tool +VALIDATIONS_DIR := $(CURDIR)/config/$(TASK_NETWORK)/validations +RPC_URL := $(L1_RPC_URL) +ADDRESSES_JSON := $(CURDIR)/config/$(TASK_NETWORK)/addresses.json +DEPLOYER = $(shell $(MISE_EXEC) cast wallet address --ledger --mnemonic-derivation-path $(LEDGER_HD_PATH)) + +TASK_DIR := tasks/2026-09-14-cobalt-upgrade +DEPLOY_CORE_SCRIPT := $(TASK_DIR)/script/DeployCobaltCoreImpls.s.sol:DeployCobaltCoreImpls +DEPLOY_PROOFS_SCRIPT := $(TASK_DIR)/script/DeployCobaltProofImpls.s.sol:DeployCobaltProofImpls +UPGRADE_SCRIPT := $(TASK_DIR)/script/ExecuteCobaltUpgrade.s.sol:ExecuteCobaltUpgrade +SCRIPT_NAME := $(UPGRADE_SCRIPT) + +CB_SENDER = $(shell $(MISE_EXEC) cast call $(CB_MULTISIG) "getOwners()(address[])" --rpc-url $(L1_RPC_URL) | tr -d '[]' | cut -d',' -f1) +SC_SENDER = $(shell $(MISE_EXEC) cast call $(BASE_SECURITY_COUNCIL) "getOwners()(address[])" --rpc-url $(L1_RPC_URL) | tr -d '[]' | cut -d',' -f1) + +NEW_OPTIMISM_PORTAL_IMPL = $(shell jq -er '.optimismPortalImpl' $(ADDRESSES_JSON) 2>/dev/null) +NEW_SYSTEM_CONFIG_IMPL = $(shell jq -er '.systemConfigImpl' $(ADDRESSES_JSON) 2>/dev/null) +NEW_DISPUTE_GAME_FACTORY_IMPL = $(shell jq -er '.disputeGameFactoryImpl' $(ADDRESSES_JSON) 2>/dev/null) +NEW_AGGREGATE_VERIFIER = $(shell jq -er '.aggregateVerifier' $(ADDRESSES_JSON) 2>/dev/null) +PROTOCOL_VERSIONS_PROXY = $(shell jq -er '.protocolVersionsProxy' $(ADDRESSES_JSON) 2>/dev/null) +PROTOCOL_VERSIONS_IMPL = $(shell jq -er '.protocolVersionsImpl' $(ADDRESSES_JSON) 2>/dev/null) + +DEPLOY_ENV = ADDRESSES_JSON=$(ADDRESSES_JSON) \ + L1_PROXY_ADMIN=$(L1_PROXY_ADMIN) \ + PROOF_MATURITY_DELAY_SECONDS=$(PROOF_MATURITY_DELAY_SECONDS) \ + ANCHOR_STATE_REGISTRY_PROXY=$(ANCHOR_STATE_REGISTRY_PROXY) \ + MULTIPROOF_DELAYED_WETH_PROXY=$(MULTIPROOF_DELAYED_WETH_PROXY) \ + TEE_VERIFIER=$(TEE_VERIFIER) \ + ZK_VERIFIER=$(ZK_VERIFIER) \ + L2_CHAIN_ID=$(L2_CHAIN_ID) \ + L2_GENESIS_BLOCK_NUMBER=$(L2_GENESIS_BLOCK_NUMBER) \ + L2_GENESIS_TIMESTAMP=$(L2_GENESIS_TIMESTAMP) \ + L2_BLOCK_TIME=$(L2_BLOCK_TIME) \ + AGGREGATE_VERIFIER_CONFIG_HASH=$(AGGREGATE_VERIFIER_CONFIG_HASH) \ + AGGREGATE_VERIFIER_TEE_IMAGE_HASH=$(AGGREGATE_VERIFIER_TEE_IMAGE_HASH) \ + AGGREGATE_VERIFIER_ZK_RANGE_HASH=$(AGGREGATE_VERIFIER_ZK_RANGE_HASH) \ + AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH=$(AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH) \ + AGGREGATE_VERIFIER_SLOW_BLOCK_INTERVAL=$(AGGREGATE_VERIFIER_SLOW_BLOCK_INTERVAL) \ + AGGREGATE_VERIFIER_SLOW_INTERMEDIATE_BLOCK_INTERVAL=$(AGGREGATE_VERIFIER_SLOW_INTERMEDIATE_BLOCK_INTERVAL) \ + AGGREGATE_VERIFIER_FAST_BLOCK_INTERVAL=$(AGGREGATE_VERIFIER_FAST_BLOCK_INTERVAL) \ + AGGREGATE_VERIFIER_FAST_INTERMEDIATE_BLOCK_INTERVAL=$(AGGREGATE_VERIFIER_FAST_INTERMEDIATE_BLOCK_INTERVAL) + +UPGRADE_ENV = RECORD_STATE_DIFF=$(RECORD_STATE_DIFF) \ + PROXY_ADMIN_OWNER=$(PROXY_ADMIN_OWNER) \ + L1_PROXY_ADMIN=$(L1_PROXY_ADMIN) \ + OPTIMISM_PORTAL=$(OPTIMISM_PORTAL) \ + SYSTEM_CONFIG=$(SYSTEM_CONFIG) \ + DISPUTE_GAME_FACTORY_PROXY=$(DISPUTE_GAME_FACTORY_PROXY) \ + OLD_OPTIMISM_PORTAL_IMPL=$(OLD_OPTIMISM_PORTAL_IMPL) \ + OLD_SYSTEM_CONFIG_IMPL=$(OLD_SYSTEM_CONFIG_IMPL) \ + OLD_DISPUTE_GAME_FACTORY_IMPL=$(OLD_DISPUTE_GAME_FACTORY_IMPL) \ + OLD_AGGREGATE_VERIFIER=$(OLD_AGGREGATE_VERIFIER) \ + NEW_OPTIMISM_PORTAL_IMPL=$(NEW_OPTIMISM_PORTAL_IMPL) \ + NEW_SYSTEM_CONFIG_IMPL=$(NEW_SYSTEM_CONFIG_IMPL) \ + NEW_DISPUTE_GAME_FACTORY_IMPL=$(NEW_DISPUTE_GAME_FACTORY_IMPL) \ + NEW_AGGREGATE_VERIFIER=$(NEW_AGGREGATE_VERIFIER) \ + PROTOCOL_VERSIONS_PROXY=$(PROTOCOL_VERSIONS_PROXY) \ + PROTOCOL_VERSIONS_IMPL=$(PROTOCOL_VERSIONS_IMPL) \ + PROTOCOL_VERSIONS_INCIDENT_RESPONDER=$(PROTOCOL_VERSIONS_INCIDENT_RESPONDER) \ + PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION=$(PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION) \ + PROTOCOL_VERSIONS_INITIAL_SCHEDULE=$(PROTOCOL_VERSIONS_INITIAL_SCHEDULE) + +## +# Dependencies +## +# Prerequisites merge with the root `deps` rule, so these run after `forge-deps` +# has installed base/contracts at BASE_CONTRACTS_COMMIT. +.PHONY: deps +deps: task-extra-deps apply-patches + +# The shared project installs only forge-std, solady and lib-keccak. Building the +# Cobalt implementations from source additionally needs base/contracts' own pinned +# dependencies, matching the versions in its justfile. +.PHONY: task-extra-deps +task-extra-deps: + cd $(PROJECT_DIR) && $(MISE_EXEC) forge install --no-git \ + github.com/OpenZeppelin/openzeppelin-contracts@ecd2ca2cd7cac116f7a37d0e474bbb3d7d5e1c4d \ + github.com/OpenZeppelin/openzeppelin-contracts-upgradeable@0a2cb9a445c365870ed7a8ab461b12acf3e27d63 \ + github.com/transmissions11/solmate@8f9b23f8838670afda0fd8983f2c41e8037ae6bc + +# Zeronet runs a SystemConfig patched to raise MAX_GAS_LIMIT to 2e9. Cobalt changes +# SystemConfig, so the patch is re-applied on top of the pinned commit rather than +# silently reverting the live chain to the stock 5e8 limit. +.PHONY: apply-patches +apply-patches: + cd $(PROJECT_DIR)/lib/contracts && patch -p1 --forward < $(CURDIR)/patch/max-gas-limit.patch + +## +# Validation +## +.PHONY: validate-deploy-config +validate-deploy-config: + @test -n "$(BASE_CONTRACTS_COMMIT)" || (echo "BASE_CONTRACTS_COMMIT required" && exit 1) + @test -n "$(PROTOCOL_VERSIONS_INITIAL_SCHEDULE)" || (echo "PROTOCOL_VERSIONS_INITIAL_SCHEDULE required" && exit 1) + @test -n "$(PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION)" || (echo "PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION required" && exit 1) + @test -n "$(PROTOCOL_VERSIONS_INCIDENT_RESPONDER)" || (echo "PROTOCOL_VERSIONS_INCIDENT_RESPONDER required" && exit 1) + @grep -q 'max-gas-limit-2000M' $(PROJECT_DIR)/lib/contracts/src/L1/SystemConfig.sol \ + || (echo "SystemConfig patch not applied -- run make TASK_NETWORK=$(TASK_NETWORK) deps" && exit 1) + +.PHONY: validate-upgrade-config +validate-upgrade-config: validate-deploy-config + @test -f "$(ADDRESSES_JSON)" || (echo "run make TASK_NETWORK=$(TASK_NETWORK) deploy first" && exit 1) + @jq -e '.optimismPortalImpl and .systemConfigImpl and .disputeGameFactoryImpl and .protocolVersionsProxy and .protocolVersionsImpl and .aggregateVerifier' "$(ADDRESSES_JSON)" >/dev/null + +## +# Deployment +## +.PHONY: deploy +deploy: deploy-core deploy-proofs + +# base/contracts pins OptimismPortal2, SystemConfig, DisputeGameFactory and Proxy to +# 5000 optimizer runs, and ProtocolVersions and AggregateVerifier to 999999. The two +# deploy steps exist to reproduce those settings exactly. +.PHONY: deploy-core +deploy-core: validate-deploy-config + @test -f "$(ADDRESSES_JSON)" || echo '{}' > "$(ADDRESSES_JSON)" + cd $(PROJECT_DIR) && $(DEPLOY_ENV) FOUNDRY_PROFILE=cobalt-core-deploy \ + $(MISE_EXEC) forge script --rpc-url $(L1_RPC_URL) $(DEPLOY_CORE_SCRIPT) \ + --ledger --hd-paths $(LEDGER_HD_PATH) --broadcast -vvvv --sender $(DEPLOYER) + +.PHONY: deploy-proofs +deploy-proofs: validate-deploy-config + @jq -e '.protocolVersionsProxy' "$(ADDRESSES_JSON)" >/dev/null 2>&1 || (echo "run make TASK_NETWORK=$(TASK_NETWORK) deploy-core first" && exit 1) + cd $(PROJECT_DIR) && $(DEPLOY_ENV) FOUNDRY_PROFILE=cobalt-proofs-deploy \ + $(MISE_EXEC) forge script --rpc-url $(L1_RPC_URL) $(DEPLOY_PROOFS_SCRIPT) \ + --ledger --hd-paths $(LEDGER_HD_PATH) --broadcast -vvvv --sender $(DEPLOYER) + +## +# Source verification +## +VERIFY_COMMON = --root $(PROJECT_DIR)/lib/contracts --compilation-profile default \ + --chain $(L1_CHAIN_ID) --compiler-version v0.8.15+commit.e14f2714 \ + --verifier custom --verifier-url "https://api.etherscan.io/v2/api?chainid=$(L1_CHAIN_ID)" \ + --verifier-api-key $(VERIFIER_API_KEY) --watch + +.PHONY: verify-core +verify-core: validate-upgrade-config +ifndef VERIFIER_API_KEY + $(error VERIFIER_API_KEY is not set) +endif + cd $(PROJECT_DIR) && RUST_LOG=off FOUNDRY_BYTECODE_HASH=none FOUNDRY_OPTIMIZER_RUNS=5000 FOUNDRY_EVM_VERSION=cancun \ + $(MISE_EXEC) forge verify-contract $(NEW_OPTIMISM_PORTAL_IMPL) src/L1/OptimismPortal2.sol:OptimismPortal2 \ + --constructor-args $(shell $(MISE_EXEC) cast abi-encode "constructor(uint256)" $(PROOF_MATURITY_DELAY_SECONDS)) \ + --num-of-optimizations 5000 $(VERIFY_COMMON) + cd $(PROJECT_DIR) && RUST_LOG=off FOUNDRY_BYTECODE_HASH=none FOUNDRY_OPTIMIZER_RUNS=5000 FOUNDRY_EVM_VERSION=cancun \ + $(MISE_EXEC) forge verify-contract $(NEW_SYSTEM_CONFIG_IMPL) src/L1/SystemConfig.sol:SystemConfig \ + --num-of-optimizations 5000 $(VERIFY_COMMON) + cd $(PROJECT_DIR) && RUST_LOG=off FOUNDRY_BYTECODE_HASH=none FOUNDRY_OPTIMIZER_RUNS=5000 FOUNDRY_EVM_VERSION=cancun \ + $(MISE_EXEC) forge verify-contract $(NEW_DISPUTE_GAME_FACTORY_IMPL) src/L1/proofs/DisputeGameFactory.sol:DisputeGameFactory \ + --num-of-optimizations 5000 $(VERIFY_COMMON) + cd $(PROJECT_DIR) && RUST_LOG=off FOUNDRY_BYTECODE_HASH=none FOUNDRY_OPTIMIZER_RUNS=5000 FOUNDRY_EVM_VERSION=cancun \ + $(MISE_EXEC) forge verify-contract $(PROTOCOL_VERSIONS_PROXY) src/universal/Proxy.sol:Proxy \ + --constructor-args $(shell $(MISE_EXEC) cast abi-encode "constructor(address)" $(L1_PROXY_ADMIN)) \ + --num-of-optimizations 5000 $(VERIFY_COMMON) + +.PHONY: verify-proofs +verify-proofs: validate-upgrade-config +ifndef VERIFIER_API_KEY + $(error VERIFIER_API_KEY is not set) +endif + cd $(PROJECT_DIR) && RUST_LOG=off FOUNDRY_BYTECODE_HASH=none FOUNDRY_OPTIMIZER_RUNS=999999 FOUNDRY_EVM_VERSION=cancun \ + $(MISE_EXEC) forge verify-contract $(PROTOCOL_VERSIONS_IMPL) src/L1/ProtocolVersions.sol:ProtocolVersions \ + --num-of-optimizations 999999 $(VERIFY_COMMON) + cd $(PROJECT_DIR) && RUST_LOG=off FOUNDRY_BYTECODE_HASH=none FOUNDRY_OPTIMIZER_RUNS=999999 FOUNDRY_EVM_VERSION=cancun \ + $(MISE_EXEC) forge verify-contract $(NEW_AGGREGATE_VERIFIER) src/L1/proofs/AggregateVerifier.sol:AggregateVerifier \ + --constructor-args $(shell $(MISE_EXEC) cast abi-encode \ + "constructor(uint32,address,address,address,address,bytes32,(bytes32,bytes32),bytes32,uint256,(uint256,uint256,uint256,uint256),(address,uint256,uint64,uint64))" \ + 621 $(ANCHOR_STATE_REGISTRY_PROXY) $(MULTIPROOF_DELAYED_WETH_PROXY) $(TEE_VERIFIER) $(ZK_VERIFIER) \ + $(AGGREGATE_VERIFIER_TEE_IMAGE_HASH) \ + "($(AGGREGATE_VERIFIER_ZK_RANGE_HASH),$(AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH))" \ + $(AGGREGATE_VERIFIER_CONFIG_HASH) $(L2_CHAIN_ID) \ + "($(AGGREGATE_VERIFIER_SLOW_BLOCK_INTERVAL),$(AGGREGATE_VERIFIER_SLOW_INTERMEDIATE_BLOCK_INTERVAL),$(AGGREGATE_VERIFIER_FAST_BLOCK_INTERVAL),$(AGGREGATE_VERIFIER_FAST_INTERMEDIATE_BLOCK_INTERVAL))" \ + "($(PROTOCOL_VERSIONS_PROXY),$(L2_GENESIS_BLOCK_NUMBER),$(L2_GENESIS_TIMESTAMP),$(L2_BLOCK_TIME))") \ + --num-of-optimizations 999999 $(VERIFY_COMMON) + +## +# Validation files +## +.PHONY: gen-validation-cb +gen-validation-cb: validate-upgrade-config deps-signer-tool + $(call GEN_VALIDATION,$(UPGRADE_SCRIPT),$(CB_MULTISIG),$(CB_SENDER),base-signer.json,$(UPGRADE_ENV)) + +.PHONY: gen-validation-sc +gen-validation-sc: validate-upgrade-config deps-signer-tool + $(call GEN_VALIDATION,$(UPGRADE_SCRIPT),$(BASE_SECURITY_COUNCIL),$(SC_SENDER),security-council-signer.json,$(UPGRADE_ENV)) + +## +# Approve and execute +## +.PHONY: approve-cb +approve-cb: validate-upgrade-config + export $(UPGRADE_ENV); $(call MULTISIG_APPROVE,$(CB_MULTISIG),$(SIGNATURES)) + +.PHONY: approve-sc +approve-sc: validate-upgrade-config + export $(UPGRADE_ENV); $(call MULTISIG_APPROVE,$(BASE_SECURITY_COUNCIL),$(SIGNATURES)) + +.PHONY: execute +execute: validate-upgrade-config + export $(UPGRADE_ENV); $(call MULTISIG_EXECUTE,0x) diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env new file mode 100644 index 000000000..cf24732ca --- /dev/null +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env @@ -0,0 +1,42 @@ +# https://github.com/base/contracts/commit/30e4390b94090b44742a8d58ccbcaaf3d7d8fe39 +BASE_CONTRACTS_COMMIT=30e4390b94090b44742a8d58ccbcaaf3d7d8fe39 +RECORD_STATE_DIFF=true + +# Rollback anchors verified against Zeronet before task creation. +OLD_OPTIMISM_PORTAL_IMPL=0xc1ad6d4e8da1403b9eb6a99491899577050f4863 +OLD_SYSTEM_CONFIG_IMPL=0xb54d7ff110995029b89a0045128cae42c931aa83 +OLD_DISPUTE_GAME_FACTORY_IMPL=0x3a0a9e5b91709bba0bcb4bb4b66730dcfef6e926 +OLD_AGGREGATE_VERIFIER=0x7dd0f51C71DA5243174FA829c8cf3385B06833b0 + +# ProtocolVersions initial state. +# +# Zeronet re-genesised at 1782348588, so every fork through Beryl is active from +# genesis. Ids are kept aligned with the Base mainnet registry because +# AggregateVerifier hardcodes upgrade index 13 (Denim) as its fast-cadence gate: +# 0 genesis, 1 canyon, 2 delta, 3 ecotone, 4 fjord, 5 granite, 6 holocene, +# 7 pectraBlobSchedule (unscheduled), 8 isthmus, 9 jovian, 10 azul, 11 beryl, +# 12 cobalt (unscheduled -- scheduled separately once an activation time is set). +PROTOCOL_VERSIONS_INITIAL_SCHEDULE=1782348588,1782348588,1782348588,1782348588,1782348588,1782348588,1782348588,0,1782348588,1782348588,1782348588,1782348588,0 +# Packed semver, major 1 (1 << 96). Must be non-zero and fit in 128 bits. +PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION=79228162514264337593543950336 +PROTOCOL_VERSIONS_INCIDENT_RESPONDER=0x856611ed7e07d83243b15e93f6321f2df6865852 + +# AggregateVerifier redeploy inputs, read from the live game implementation at +# 0x7dd0f51C71DA5243174FA829c8cf3385B06833b0 so the only change is the added +# ProtocolVersions binding and the split slow/fast cadence intervals. +AGGREGATE_VERIFIER_CONFIG_HASH=0xd14ddabfc0ad1dd737d6e5917cf271fd479bd539c9b3d85a602589c679a9983a +AGGREGATE_VERIFIER_TEE_IMAGE_HASH=0x0b70f5a605b7f0dd56facb70f4d0f37042d6a448cc3deefff7475fdd4ab549c1 +AGGREGATE_VERIFIER_ZK_RANGE_HASH=0x5fd09a2f4338ca7063bc37b02f9411645d0ef2784fe644cc71ab48ae64200beb +AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH=0x00a147f0c69da81e3d530cca91310f9605f980dc155726bb33fbde0e493a3836 +AGGREGATE_VERIFIER_SLOW_BLOCK_INTERVAL=600 +AGGREGATE_VERIFIER_SLOW_INTERMEDIATE_BLOCK_INTERVAL=30 +AGGREGATE_VERIFIER_FAST_BLOCK_INTERVAL=6000 +AGGREGATE_VERIFIER_FAST_INTERMEDIATE_BLOCK_INTERVAL=300 + +# L2 chain geometry used to map activation timestamps onto block numbers. +L2_GENESIS_BLOCK_NUMBER=0 +L2_GENESIS_TIMESTAMP=1782348588 +L2_BLOCK_TIME=2 + +# OptimismPortal2 constructor argument, matching the live proxy. +PROOF_MATURITY_DELAY_SECONDS=0 diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/README.md b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/README.md new file mode 100644 index 000000000..723d567c4 --- /dev/null +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/README.md @@ -0,0 +1,53 @@ +# Cobalt Upgrade + +Status: READY TO SIGN + +## Description + +Upgrades Zeronet's L1 contracts for the Cobalt hardfork. One transaction from the ProxyAdmin owner +makes five calls: + +1. Upgrade and initialize a new `ProtocolVersions` registry, importing Zeronet's hardfork activation + schedule. This is the registry that dynamic upgrades read from. +2. Upgrade `OptimismPortal2` to the implementation with `EthLockbox` removed. +3. Upgrade `SystemConfig` to the matching implementation, keeping Zeronet's patched + `MAX_GAS_LIMIT` of 2,000,000,000. +4. Upgrade `DisputeGameFactory` so new dispute games are deployed with `CREATE2`. +5. Register the redeployed `AggregateVerifier` for game type 621, which binds the new registry. + +No ETH moves. Zeronet has no `EthLockbox` (`ethLockbox()` is already the zero address) and its ETH +is already held by the portal, so removing the lockbox paths changes no balances. Existing dispute +games, the game count, the gas limit, and the pause state are all unchanged, and the transaction +asserts each of these before and after. + +Cobalt is registered in the schedule as unscheduled. Choosing its activation timestamp is a separate +future task. + +## Custody + +| Role | Address | +| -- | -- | +| ProxyAdmin owner (2-of-2) | `0x3d59999977e0896ee1f8783bB8251DF16fb483E9` | +| Coinbase multisig | `0x856611eD7E07D83243b15E93f6321f2df6865852` | +| Security Council | `0xC4c0aD998B5DfA4CF4B298970F21b9015a5eE7bA` | + +## Targets + +| Contract | Address | +| -- | -- | +| L1 `ProxyAdmin` | `0xF2d2c097bE80Fb87844b7E259ef67EFb98b26F87` | +| `OptimismPortal2` proxy | `0x7E3b97C95c823f385Ff6770411F6E12F8E09AC9b` | +| `SystemConfig` proxy | `0x0a111C7980152BDe41D71f48e2E1d8184f5F6187` | +| `DisputeGameFactory` proxy | `0xd930E0CebD52d7C77b8f900De242e818506C5474` | + +New implementation addresses are recorded in [`addresses.json`](addresses.json) once deployed. + +## Sign + +From the repository root: + +```bash +make sign-task +``` + +Select this Zeronet task, sign, and send the signature to the facilitator. diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/addresses.json b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/addresses.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/addresses.json @@ -0,0 +1 @@ +{} diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/patch/max-gas-limit.patch b/active/evm/tasks/2026-09-14-cobalt-upgrade/patch/max-gas-limit.patch new file mode 100644 index 000000000..919d42e36 --- /dev/null +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/patch/max-gas-limit.patch @@ -0,0 +1,25 @@ +diff --git a/src/L1/SystemConfig.sol b/src/L1/SystemConfig.sol +index 51c975d..f9961ca 100644 +--- a/src/L1/SystemConfig.sol ++++ b/src/L1/SystemConfig.sol +@@ -97,7 +97,7 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl + /// @notice The maximum gas limit that can be set for L2 blocks. This limit is used to enforce that the blocks + /// on L2 are not too large to process and prove. Over time, this value can be increased as various + /// optimizations and improvements are made to the system at large. +- uint64 internal constant MAX_GAS_LIMIT = 500_000_000; ++ uint64 internal constant MAX_GAS_LIMIT = 2_000_000_000; + + /// @notice Fixed L2 gas overhead. Used as part of the L2 fee calculation. + /// Deprecated since the Ecotone network upgrade +@@ -170,9 +170,9 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl + error SystemConfig_InvalidFeatureState(); + + /// @notice Semantic version. +- /// @custom:semver 3.13.2 ++ /// @custom:semver 3.13.2+max-gas-limit-2000M + function version() public pure virtual returns (string memory) { +- return "3.13.2"; ++ return "3.13.2+max-gas-limit-2000M"; + } + + /// @notice Constructs the SystemConfig contract. diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltCoreImpls.s.sol b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltCoreImpls.s.sol new file mode 100644 index 000000000..783f4dc92 --- /dev/null +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltCoreImpls.s.sol @@ -0,0 +1,84 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import {Script, console} from "forge-std/Script.sol"; + +import {DisputeGameFactory} from "@base-contracts/src/L1/proofs/DisputeGameFactory.sol"; +import {OptimismPortal2} from "@base-contracts/src/L1/OptimismPortal2.sol"; +import {Proxy} from "@base-contracts/src/universal/Proxy.sol"; +import {SystemConfig} from "@base-contracts/src/L1/SystemConfig.sol"; + +/// @notice Deploys the Cobalt implementations that base/contracts compiles at 5000 optimizer runs, +/// plus the proxy that will front the new ProtocolVersions registry. +/// @dev The ProtocolVersions proxy is deployed here, ahead of the implementations in +/// DeployCobaltProofImpls, because AggregateVerifier takes its address as a constructor +/// immutable. The proxy is left pointing at no implementation; the upgrade transaction +/// atomically sets the implementation and initializes it via ProxyAdmin.upgradeAndCall. +contract DeployCobaltCoreImpls is Script { + address internal immutable l1ProxyAdmin; + uint256 internal immutable proofMaturityDelaySeconds; + string internal addressesJson; + + DisputeGameFactory public disputeGameFactoryImpl; + OptimismPortal2 public optimismPortalImpl; + Proxy public protocolVersionsProxy; + SystemConfig public systemConfigImpl; + + constructor() { + l1ProxyAdmin = vm.envAddress("L1_PROXY_ADMIN"); + proofMaturityDelaySeconds = vm.envUint("PROOF_MATURITY_DELAY_SECONDS"); + addressesJson = vm.envString("ADDRESSES_JSON"); + } + + function setUp() public view { + require(l1ProxyAdmin.code.length != 0, "proxy admin not deployed"); + } + + function run() external { + vm.startBroadcast(); + + optimismPortalImpl = new OptimismPortal2(proofMaturityDelaySeconds); + systemConfigImpl = new SystemConfig(); + disputeGameFactoryImpl = new DisputeGameFactory(); + protocolVersionsProxy = new Proxy(l1ProxyAdmin); + + vm.stopBroadcast(); + + _postCheck(); + _writeAddresses(); + } + + function _postCheck() internal view { + require(address(optimismPortalImpl).code.length != 0, "portal implementation not deployed"); + require(address(systemConfigImpl).code.length != 0, "system config implementation not deployed"); + require(address(disputeGameFactoryImpl).code.length != 0, "dispute game factory implementation not deployed"); + require(address(protocolVersionsProxy).code.length != 0, "protocol versions proxy not deployed"); + + require( + optimismPortalImpl.proofMaturityDelaySeconds() == proofMaturityDelaySeconds, "portal proof delay mismatch" + ); + require(keccak256(bytes(optimismPortalImpl.version())) == keccak256(bytes("5.2.0")), "portal version mismatch"); + // Zeronet runs a patched SystemConfig that raises MAX_GAS_LIMIT to 2e9. The patch carries a + // build-suffixed semver so a stock build cannot be deployed here by mistake. + require( + keccak256(bytes(systemConfigImpl.version())) == keccak256(bytes("3.13.2+max-gas-limit-2000M")), + "system config patch not applied" + ); + require( + keccak256(bytes(disputeGameFactoryImpl.version())) == keccak256(bytes("1.4.0")), + "dispute game factory version mismatch" + ); + } + + function _writeAddresses() internal { + console.log("OptimismPortal2 impl: ", address(optimismPortalImpl)); + console.log("SystemConfig impl: ", address(systemConfigImpl)); + console.log("DisputeGameFactory impl: ", address(disputeGameFactoryImpl)); + console.log("ProtocolVersions proxy: ", address(protocolVersionsProxy)); + + vm.writeJson(vm.toString(address(optimismPortalImpl)), addressesJson, ".optimismPortalImpl"); + vm.writeJson(vm.toString(address(systemConfigImpl)), addressesJson, ".systemConfigImpl"); + vm.writeJson(vm.toString(address(disputeGameFactoryImpl)), addressesJson, ".disputeGameFactoryImpl"); + vm.writeJson(vm.toString(address(protocolVersionsProxy)), addressesJson, ".protocolVersionsProxy"); + } +} diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltProofImpls.s.sol b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltProofImpls.s.sol new file mode 100644 index 000000000..ac693ea48 --- /dev/null +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltProofImpls.s.sol @@ -0,0 +1,147 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import {Script, console} from "forge-std/Script.sol"; + +import {IAnchorStateRegistry} from "interfaces/L1/proofs/IAnchorStateRegistry.sol"; +import {IDelayedWETH} from "interfaces/L1/proofs/IDelayedWETH.sol"; +import {IProtocolVersions} from "interfaces/L1/IProtocolVersions.sol"; +import {IVerifier} from "interfaces/L1/proofs/IVerifier.sol"; + +import {AggregateVerifier} from "@base-contracts/src/L1/proofs/AggregateVerifier.sol"; +import {GameType} from "@base-contracts/src/libraries/bridge/Types.sol"; +import {ProtocolVersions} from "@base-contracts/src/L1/ProtocolVersions.sol"; + +/// @notice Deploys the Cobalt implementations that base/contracts compiles at 999999 optimizer runs. +/// @dev AggregateVerifier binds PROTOCOL_VERSIONS as a constructor immutable, so it must be +/// redeployed for the registry to take effect and the proxy from DeployCobaltCoreImpls must +/// already exist. Every other constructor argument is carried over unchanged from the live +/// implementation so this redeploy introduces no behavioural change beyond the binding and the +/// split slow/fast cadence intervals. +contract DeployCobaltProofImpls is Script { + /// @notice Game type of the aggregate proof game. + GameType internal constant AGGREGATE_VERIFIER_GAME_TYPE = GameType.wrap(621); + + address internal immutable anchorStateRegistryProxy; + address internal immutable delayedWeth; + address internal immutable teeVerifier; + address internal immutable zkVerifier; + bytes32 internal immutable configHash; + bytes32 internal immutable teeImageHash; + bytes32 internal immutable zkRangeHash; + bytes32 internal immutable zkAggregateHash; + uint256 internal immutable l2ChainId; + uint256 internal immutable slowBlockInterval; + uint256 internal immutable slowIntermediateBlockInterval; + uint256 internal immutable fastBlockInterval; + uint256 internal immutable fastIntermediateBlockInterval; + uint256 internal immutable l2GenesisBlockNumber; + uint64 internal immutable l2GenesisTimestamp; + uint64 internal immutable l2BlockTime; + address internal immutable protocolVersionsProxy; + string internal addressesJson; + + AggregateVerifier public aggregateVerifier; + ProtocolVersions public protocolVersionsImpl; + + constructor() { + anchorStateRegistryProxy = vm.envAddress("ANCHOR_STATE_REGISTRY_PROXY"); + delayedWeth = vm.envAddress("MULTIPROOF_DELAYED_WETH_PROXY"); + teeVerifier = vm.envAddress("TEE_VERIFIER"); + zkVerifier = vm.envAddress("ZK_VERIFIER"); + configHash = vm.envBytes32("AGGREGATE_VERIFIER_CONFIG_HASH"); + teeImageHash = vm.envBytes32("AGGREGATE_VERIFIER_TEE_IMAGE_HASH"); + zkRangeHash = vm.envBytes32("AGGREGATE_VERIFIER_ZK_RANGE_HASH"); + zkAggregateHash = vm.envBytes32("AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH"); + l2ChainId = vm.envUint("L2_CHAIN_ID"); + slowBlockInterval = vm.envUint("AGGREGATE_VERIFIER_SLOW_BLOCK_INTERVAL"); + slowIntermediateBlockInterval = vm.envUint("AGGREGATE_VERIFIER_SLOW_INTERMEDIATE_BLOCK_INTERVAL"); + fastBlockInterval = vm.envUint("AGGREGATE_VERIFIER_FAST_BLOCK_INTERVAL"); + fastIntermediateBlockInterval = vm.envUint("AGGREGATE_VERIFIER_FAST_INTERMEDIATE_BLOCK_INTERVAL"); + l2GenesisBlockNumber = vm.envUint("L2_GENESIS_BLOCK_NUMBER"); + l2GenesisTimestamp = uint64(vm.envUint("L2_GENESIS_TIMESTAMP")); + l2BlockTime = uint64(vm.envUint("L2_BLOCK_TIME")); + addressesJson = vm.envString("ADDRESSES_JSON"); + protocolVersionsProxy = vm.parseJsonAddress(vm.readFile(addressesJson), ".protocolVersionsProxy"); + } + + function setUp() public view { + require(protocolVersionsProxy.code.length != 0, "protocol versions proxy not deployed"); + require(anchorStateRegistryProxy.code.length != 0, "anchor state registry not deployed"); + require(delayedWeth.code.length != 0, "delayed weth not deployed"); + require(teeVerifier.code.length != 0, "tee verifier not deployed"); + require(zkVerifier.code.length != 0, "zk verifier not deployed"); + } + + function run() external { + vm.startBroadcast(); + + protocolVersionsImpl = new ProtocolVersions(); + aggregateVerifier = new AggregateVerifier({ + gameType_: AGGREGATE_VERIFIER_GAME_TYPE, + anchorStateRegistry_: IAnchorStateRegistry(anchorStateRegistryProxy), + delayedWETH: IDelayedWETH(payable(delayedWeth)), + teeVerifier: IVerifier(teeVerifier), + zkVerifier: IVerifier(zkVerifier), + teeImageHash: teeImageHash, + zkHashes: AggregateVerifier.ZkHashes({rangeHash: zkRangeHash, aggregateHash: zkAggregateHash}), + configHash: configHash, + l2ChainId: l2ChainId, + intervalConfig: AggregateVerifier.IntervalConfig({ + slowBlockInterval: slowBlockInterval, + slowIntermediateBlockInterval: slowIntermediateBlockInterval, + fastBlockInterval: fastBlockInterval, + fastIntermediateBlockInterval: fastIntermediateBlockInterval + }), + scheduleConfig: AggregateVerifier.ScheduleConfig({ + protocolVersions: IProtocolVersions(protocolVersionsProxy), + genesisBlockNumber: l2GenesisBlockNumber, + genesisTimestamp: l2GenesisTimestamp, + blockTime: l2BlockTime + }) + }); + + vm.stopBroadcast(); + + _postCheck(); + _writeAddresses(); + } + + function _postCheck() internal view { + require(address(protocolVersionsImpl).code.length != 0, "protocol versions implementation not deployed"); + require(address(aggregateVerifier).code.length != 0, "aggregate verifier not deployed"); + + require( + keccak256(bytes(protocolVersionsImpl.version())) == keccak256(bytes("1.0.0")), + "protocol versions version mismatch" + ); + require(protocolVersionsImpl.initVersion() == 1, "protocol versions init version mismatch"); + + require( + keccak256(bytes(aggregateVerifier.version())) == keccak256(bytes("0.2.0")), + "aggregate verifier version mismatch" + ); + require( + address(aggregateVerifier.PROTOCOL_VERSIONS()) == protocolVersionsProxy, + "aggregate verifier protocol versions mismatch" + ); + require(address(aggregateVerifier.TEE_VERIFIER()) == teeVerifier, "aggregate verifier tee verifier mismatch"); + require(address(aggregateVerifier.ZK_VERIFIER()) == zkVerifier, "aggregate verifier zk verifier mismatch"); + require(address(aggregateVerifier.DELAYED_WETH()) == delayedWeth, "aggregate verifier delayed weth mismatch"); + require(aggregateVerifier.CONFIG_HASH() == configHash, "aggregate verifier config hash mismatch"); + require(aggregateVerifier.TEE_IMAGE_HASH() == teeImageHash, "aggregate verifier tee image hash mismatch"); + require(aggregateVerifier.ZK_RANGE_HASH() == zkRangeHash, "aggregate verifier zk range hash mismatch"); + require( + aggregateVerifier.ZK_AGGREGATE_HASH() == zkAggregateHash, "aggregate verifier zk aggregate hash mismatch" + ); + require(aggregateVerifier.L2_CHAIN_ID() == l2ChainId, "aggregate verifier l2 chain id mismatch"); + } + + function _writeAddresses() internal { + console.log("ProtocolVersions impl: ", address(protocolVersionsImpl)); + console.log("AggregateVerifier: ", address(aggregateVerifier)); + + vm.writeJson(vm.toString(address(protocolVersionsImpl)), addressesJson, ".protocolVersionsImpl"); + vm.writeJson(vm.toString(address(aggregateVerifier)), addressesJson, ".aggregateVerifier"); + } +} diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/script/ExecuteCobaltUpgrade.s.sol b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/ExecuteCobaltUpgrade.s.sol new file mode 100644 index 000000000..82d4953a5 --- /dev/null +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/ExecuteCobaltUpgrade.s.sol @@ -0,0 +1,327 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import {Vm} from "forge-std/Vm.sol"; + +import {MultisigScript, Enum} from "@base-contracts/scripts/universal/MultisigScript.sol"; +import {Simulation} from "@base-contracts/scripts/universal/Simulation.sol"; + +interface IProxyAdmin { + function owner() external view returns (address); + function upgrade(address payable proxy, address implementation) external; + function upgradeAndCall(address payable proxy, address implementation, bytes memory data) external payable; +} + +interface IProtocolVersions { + function initialize(address incidentResponder, uint64[] calldata initialSchedule, uint256 minimumProtocolVersion) + external; + function getSchedule() external view returns (uint64[] memory); + function incidentResponder() external view returns (address); + function minimumProtocolVersion() external view returns (uint256); + function scheduleId() external view returns (bytes32); + function version() external view returns (string memory); +} + +interface IDisputeGameFactory { + function gameCount() external view returns (uint256); + function gameImpls(uint32 gameType) external view returns (address); + function owner() external view returns (address); + function setImplementation(uint32 gameType, address impl) external; + function version() external view returns (string memory); +} + +interface IAggregateVerifier { + function PROTOCOL_VERSIONS() external view returns (address); + function version() external view returns (string memory); +} + +interface ISystemConfig { + function gasLimit() external view returns (uint64); + function paused() external view returns (bool); + function version() external view returns (string memory); +} + +interface IVersioned { + function version() external view returns (string memory); +} + +/// @notice Executes the Cobalt L1 upgrade on a Base chain. +/// @dev Bundles the three Cobalt contract changes into a single ProxyAdmin-owner transaction: +/// dynamic upgrades (a new ProtocolVersions registry plus the AggregateVerifier that binds it), +/// the EthLockbox removal (OptimismPortal2 and SystemConfig), and CREATE2 dispute game proxies +/// (DisputeGameFactory). +contract ExecuteCobaltUpgrade is MultisigScript { + /// @notice EIP-1967 implementation slot. + bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; + + /// @notice Storage slot the removed `ethLockbox` address occupied on OptimismPortal2. The + /// Cobalt implementation replaces it with a spacer, so the stored value must survive + /// the upgrade untouched. + bytes32 internal constant PORTAL_ETH_LOCKBOX_SLOT = bytes32(uint256(63)); + + /// @notice Game type of the aggregate proof game. + uint32 internal constant AGGREGATE_VERIFIER_GAME_TYPE = 621; + + address internal immutable ownerSafe; + address internal immutable proxyAdmin; + address internal immutable optimismPortal; + address internal immutable systemConfig; + address internal immutable disputeGameFactory; + + address internal immutable oldOptimismPortalImpl; + address internal immutable oldSystemConfigImpl; + address internal immutable oldDisputeGameFactoryImpl; + address internal immutable oldAggregateVerifier; + + address internal immutable newOptimismPortalImpl; + address internal immutable newSystemConfigImpl; + address internal immutable newDisputeGameFactoryImpl; + address internal immutable newAggregateVerifier; + address internal immutable protocolVersionsProxy; + address internal immutable protocolVersionsImpl; + + address internal immutable protocolVersionsIncidentResponder; + uint256 internal immutable protocolVersionsMinimumProtocolVersion; + + /// @dev Solidity has no immutable arrays, so the imported activation schedule is read from the + /// environment into storage during construction. + uint64[] internal protocolVersionsInitialSchedule; + + /// @dev Live state captured at construction and re-asserted after the upgrade. + uint256 internal immutable portalBalanceBefore; + bytes32 internal immutable portalLockboxSlotBefore; + uint64 internal immutable gasLimitBefore; + uint256 internal immutable gameCountBefore; + bool internal immutable pausedBefore; + + constructor() { + ownerSafe = vm.envAddress("PROXY_ADMIN_OWNER"); + proxyAdmin = vm.envAddress("L1_PROXY_ADMIN"); + optimismPortal = vm.envAddress("OPTIMISM_PORTAL"); + systemConfig = vm.envAddress("SYSTEM_CONFIG"); + disputeGameFactory = vm.envAddress("DISPUTE_GAME_FACTORY_PROXY"); + + oldOptimismPortalImpl = vm.envAddress("OLD_OPTIMISM_PORTAL_IMPL"); + oldSystemConfigImpl = vm.envAddress("OLD_SYSTEM_CONFIG_IMPL"); + oldDisputeGameFactoryImpl = vm.envAddress("OLD_DISPUTE_GAME_FACTORY_IMPL"); + oldAggregateVerifier = vm.envAddress("OLD_AGGREGATE_VERIFIER"); + + newOptimismPortalImpl = vm.envAddress("NEW_OPTIMISM_PORTAL_IMPL"); + newSystemConfigImpl = vm.envAddress("NEW_SYSTEM_CONFIG_IMPL"); + newDisputeGameFactoryImpl = vm.envAddress("NEW_DISPUTE_GAME_FACTORY_IMPL"); + newAggregateVerifier = vm.envAddress("NEW_AGGREGATE_VERIFIER"); + protocolVersionsProxy = vm.envAddress("PROTOCOL_VERSIONS_PROXY"); + protocolVersionsImpl = vm.envAddress("PROTOCOL_VERSIONS_IMPL"); + + protocolVersionsIncidentResponder = vm.envAddress("PROTOCOL_VERSIONS_INCIDENT_RESPONDER"); + protocolVersionsMinimumProtocolVersion = vm.envUint("PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION"); + + uint256[] memory schedule = vm.envUint("PROTOCOL_VERSIONS_INITIAL_SCHEDULE", ","); + for (uint256 i = 0; i < schedule.length; i++) { + require(schedule[i] <= type(uint64).max, "schedule timestamp exceeds uint64"); + protocolVersionsInitialSchedule.push(uint64(schedule[i])); + } + + portalBalanceBefore = optimismPortal.balance; + portalLockboxSlotBefore = vm.load(optimismPortal, PORTAL_ETH_LOCKBOX_SLOT); + gasLimitBefore = ISystemConfig(systemConfig).gasLimit(); + gameCountBefore = IDisputeGameFactory(disputeGameFactory).gameCount(); + pausedBefore = ISystemConfig(systemConfig).paused(); + } + + function setUp() public view { + _preCheck(); + } + + function _buildCalls() internal view override returns (Call[] memory) { + Call[] memory calls = new Call[](5); + + // Dynamic upgrades: point the new proxy at the registry implementation and seed the + // activation schedule atomically. `initialize` is `reinitializer(1)` and the proxy has + // never been initialized, so this must be `upgradeAndCall` rather than a bare upgrade. + calls[0] = Call({ + operation: Enum.Operation.Call, + target: proxyAdmin, + data: abi.encodeCall( + IProxyAdmin.upgradeAndCall, + ( + payable(protocolVersionsProxy), + protocolVersionsImpl, + abi.encodeCall( + IProtocolVersions.initialize, + ( + protocolVersionsIncidentResponder, + protocolVersionsInitialSchedule, + protocolVersionsMinimumProtocolVersion + ) + ) + ) + ), + value: 0 + }); + + // EthLockbox removal. Both implementations are already at their current init version and + // the upgrade adds no state, so they are upgrade-only. + calls[1] = Call({ + operation: Enum.Operation.Call, + target: proxyAdmin, + data: abi.encodeCall(IProxyAdmin.upgrade, (payable(optimismPortal), newOptimismPortalImpl)), + value: 0 + }); + calls[2] = Call({ + operation: Enum.Operation.Call, + target: proxyAdmin, + data: abi.encodeCall(IProxyAdmin.upgrade, (payable(systemConfig), newSystemConfigImpl)), + value: 0 + }); + + // CREATE2 dispute game proxies. + calls[3] = Call({ + operation: Enum.Operation.Call, + target: proxyAdmin, + data: abi.encodeCall(IProxyAdmin.upgrade, (payable(disputeGameFactory), newDisputeGameFactoryImpl)), + value: 0 + }); + + // Register the AggregateVerifier that binds the new registry. This is `onlyOwner` on the + // factory itself, not a ProxyAdmin call, and the factory owner is the same Safe. + calls[4] = Call({ + operation: Enum.Operation.Call, + target: disputeGameFactory, + data: abi.encodeCall( + IDisputeGameFactory.setImplementation, (AGGREGATE_VERIFIER_GAME_TYPE, newAggregateVerifier) + ), + value: 0 + }); + + return calls; + } + + function _preCheck() internal view { + require(IProxyAdmin(proxyAdmin).owner() == ownerSafe, "proxy admin owner mismatch"); + require(IDisputeGameFactory(disputeGameFactory).owner() == ownerSafe, "dispute game factory owner mismatch"); + + require(_implementation(optimismPortal) == oldOptimismPortalImpl, "unexpected live portal implementation"); + require(_implementation(systemConfig) == oldSystemConfigImpl, "unexpected live system config implementation"); + require( + _implementation(disputeGameFactory) == oldDisputeGameFactoryImpl, + "unexpected live dispute game factory implementation" + ); + require( + IDisputeGameFactory(disputeGameFactory).gameImpls(AGGREGATE_VERIFIER_GAME_TYPE) == oldAggregateVerifier, + "unexpected live aggregate verifier" + ); + + // The Cobalt portal drops every lockbox code path without migrating custody, so ETH held in + // a live lockbox would be stranded. Zeronet never set one; this refuses to proceed anywhere + // that did. + (bool ok, bytes memory raw) = optimismPortal.staticcall(abi.encodeWithSignature("ethLockbox()")); + require(!ok || abi.decode(raw, (address)) == address(0), "portal still uses an ETHLockbox"); + + // The new registry must be an uninitialized proxy under the same ProxyAdmin. + require(protocolVersionsProxy.code.length != 0, "protocol versions proxy not deployed"); + require(_implementation(protocolVersionsProxy) == address(0), "protocol versions proxy already upgraded"); + require(_admin(protocolVersionsProxy) == proxyAdmin, "protocol versions proxy admin mismatch"); + + require( + keccak256(bytes(IVersioned(protocolVersionsImpl).version())) == keccak256(bytes("1.0.0")), + "protocol versions implementation version mismatch" + ); + require( + keccak256(bytes(IVersioned(newOptimismPortalImpl).version())) == keccak256(bytes("5.2.0")), + "portal implementation version mismatch" + ); + require( + keccak256(bytes(IVersioned(newSystemConfigImpl).version())) + == keccak256(bytes("3.13.2+max-gas-limit-2000M")), + "system config implementation is not the patched build" + ); + require( + keccak256(bytes(IVersioned(newDisputeGameFactoryImpl).version())) == keccak256(bytes("1.4.0")), + "dispute game factory implementation version mismatch" + ); + require( + keccak256(bytes(IAggregateVerifier(newAggregateVerifier).version())) == keccak256(bytes("0.2.0")), + "aggregate verifier version mismatch" + ); + require( + IAggregateVerifier(newAggregateVerifier).PROTOCOL_VERSIONS() == protocolVersionsProxy, + "aggregate verifier is not bound to the new registry" + ); + + require(protocolVersionsMinimumProtocolVersion != 0, "minimum protocol version not set"); + require(protocolVersionsMinimumProtocolVersion <= type(uint128).max, "minimum protocol version too large"); + } + + function _postCheck(Vm.AccountAccess[] memory, Simulation.Payload memory) internal view override { + require(_implementation(optimismPortal) == newOptimismPortalImpl, "portal implementation not updated"); + require(_implementation(systemConfig) == newSystemConfigImpl, "system config implementation not updated"); + require( + _implementation(disputeGameFactory) == newDisputeGameFactoryImpl, + "dispute game factory implementation not updated" + ); + require( + _implementation(protocolVersionsProxy) == protocolVersionsImpl, + "protocol versions implementation not updated" + ); + + // Dynamic upgrades: the registry is live and committed to the imported schedule. + IProtocolVersions registry = IProtocolVersions(protocolVersionsProxy); + require(keccak256(bytes(registry.version())) == keccak256(bytes("1.0.0")), "registry version mismatch"); + require(registry.incidentResponder() == protocolVersionsIncidentResponder, "registry responder mismatch"); + require( + registry.minimumProtocolVersion() == protocolVersionsMinimumProtocolVersion, + "registry minimum protocol version mismatch" + ); + + uint64[] memory schedule = registry.getSchedule(); + require(schedule.length == protocolVersionsInitialSchedule.length, "registry schedule length mismatch"); + for (uint256 i = 0; i < schedule.length; i++) { + require(schedule[i] == protocolVersionsInitialSchedule[i], "registry schedule entry mismatch"); + } + require(registry.scheduleId() == _expectedScheduleId(), "registry schedule commitment mismatch"); + + // CREATE2 dispute games: the factory keeps its full history and serves the new verifier. + require( + IDisputeGameFactory(disputeGameFactory).gameImpls(AGGREGATE_VERIFIER_GAME_TYPE) == newAggregateVerifier, + "aggregate verifier not registered" + ); + require(IDisputeGameFactory(disputeGameFactory).gameCount() == gameCountBefore, "game count changed"); + + // EthLockbox removal must not move ETH, disturb the now-spacer slot, or change pause state. + require(optimismPortal.balance == portalBalanceBefore, "portal balance changed"); + require(vm.load(optimismPortal, PORTAL_ETH_LOCKBOX_SLOT) == portalLockboxSlotBefore, "portal slot 63 changed"); + require(ISystemConfig(systemConfig).paused() == pausedBefore, "pause state changed"); + require(ISystemConfig(systemConfig).gasLimit() == gasLimitBefore, "gas limit changed"); + require( + keccak256(bytes(ISystemConfig(systemConfig).version())) == keccak256(bytes("3.13.2+max-gas-limit-2000M")), + "system config lost the max gas limit patch" + ); + } + + /// @dev Recomputes the registry hash chain so the commitment is derived from the schedule this + /// script submitted rather than a pasted constant. + function _expectedScheduleId() internal view returns (bytes32) { + bytes32 link = bytes32(0); + for (uint256 i = 0; i < protocolVersionsInitialSchedule.length; i++) { + link = keccak256(abi.encode(link, i, protocolVersionsInitialSchedule[i])); + } + return link; + } + + function _implementation(address proxy) internal view returns (address) { + return address(uint160(uint256(vm.load(proxy, IMPLEMENTATION_SLOT)))); + } + + function _admin(address proxy) internal view returns (address) { + // EIP-1967 admin slot. + return + address( + uint160(uint256(vm.load(proxy, 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103))) + ); + } + + function _ownerSafe() internal view override returns (address) { + return ownerSafe; + } +} From 40fa6b7cd47db9129b6ae570cc8f26efebc4cd24 Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Mon, 14 Sep 2026 14:06:47 -0400 Subject: [PATCH 02/14] docs(zeronet): flag the assumed fast-cadence intervals Co-authored-by: Cursor --- .../2026-09-14-cobalt-upgrade/config/zeronet/.env | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env index cf24732ca..4e679ab4b 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env @@ -21,9 +21,16 @@ PROTOCOL_VERSIONS_INITIAL_SCHEDULE=1782348588,1782348588,1782348588,1782348588,1 PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION=79228162514264337593543950336 PROTOCOL_VERSIONS_INCIDENT_RESPONDER=0x856611ed7e07d83243b15e93f6321f2df6865852 -# AggregateVerifier redeploy inputs, read from the live game implementation at -# 0x7dd0f51C71DA5243174FA829c8cf3385B06833b0 so the only change is the added -# ProtocolVersions binding and the split slow/fast cadence intervals. +# AggregateVerifier redeploy inputs. The hashes and the slow pair are read from the +# live game implementation at 0x7dd0f51C71DA5243174FA829c8cf3385B06833b0, so the +# redeploy carries them over unchanged. +# +# CONFIRM BEFORE DEPLOY: the fast pair has no live counterpart -- v0.1.0 predates the +# cadence split -- so these are assumed, not read. They are set to a 10x speedup of +# the slow pair, which is only a guess at Denim's cadence. Both pairs must divide to +# the same intermediate root count (here 20) or the constructor reverts, and the pair +# is frozen for the lifetime of the implementation because it fixes the CWIA extraData +# layout. Changing it later means another redeploy. AGGREGATE_VERIFIER_CONFIG_HASH=0xd14ddabfc0ad1dd737d6e5917cf271fd479bd539c9b3d85a602589c679a9983a AGGREGATE_VERIFIER_TEE_IMAGE_HASH=0x0b70f5a605b7f0dd56facb70f4d0f37042d6a448cc3deefff7475fdd4ab549c1 AGGREGATE_VERIFIER_ZK_RANGE_HASH=0x5fd09a2f4338ca7063bc37b02f9411645d0ef2784fe644cc71ab48ae64200beb From 3578f27f70385b01bc18902b1b404b710d36c33d Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Mon, 14 Sep 2026 15:56:17 -0400 Subject: [PATCH 03/14] chore(zeronet): repin base contracts to 0ae2de1 Moves BASE_CONTRACTS_COMMIT from 30e4390 to 0ae2de1, which reverts the AggregateVerifier cadence split (#436) and removes the BaseTime predeploy (#437). ProtocolVersions, OptimismPortal2, SystemConfig and DisputeGameFactory are untouched between the two pins. The revert collapses the slow/fast interval pairs back to a single blockInterval/intermediateBlockInterval pair, so the constructor takes two plain arguments instead of an IntervalConfig struct and the previously assumed fast-cadence values are gone -- both intervals now come straight from the live implementation. The revert also rolls AggregateVerifier back to 0.1.0, the same version the live implementation reports, so version no longer distinguishes them. The upgrade script now asserts the redeploy produced a different address and relies on the PROTOCOL_VERSIONS binding, which the predecessor does not have, as the real discriminator. Co-authored-by: Cursor --- .../2026-09-14-cobalt-upgrade/FACILITATOR.md | 20 ++++++------ .../tasks/2026-09-14-cobalt-upgrade/Makefile | 10 +++--- .../config/zeronet/.env | 26 ++++++--------- .../script/DeployCobaltProofImpls.s.sol | 32 +++++++++---------- .../script/ExecuteCobaltUpgrade.s.sol | 6 +++- 5 files changed, 45 insertions(+), 49 deletions(-) diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md b/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md index b14865323..ee466c902 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md @@ -33,18 +33,18 @@ assertions in `DeployCobaltCoreImpls` and `ExecuteCobaltUpgrade` to the stock `3 Open `config//.env` and confirm every value, in particular: - `PROTOCOL_VERSIONS_INITIAL_SCHEDULE` — the activation timestamp imported for each upgrade id. - **Ids must stay aligned with the Base mainnet registry**: `AggregateVerifier` hardcodes upgrade - index 13 (Denim) as its block-cadence gate, so inserting or reordering entries silently repoints - that gate. Entries may be `0` for an unscheduled fork. Zeronet was re-genesised with every fork - through Beryl already active, so ids 0–11 carry the genesis timestamp and Cobalt (id 12) is `0`. + Ids should stay aligned with the Base mainnet registry so that a given index means the same fork + on every chain. Entries may be `0` for an unscheduled fork. Zeronet was re-genesised with every + fork through Beryl already active, so ids 0–11 carry the genesis timestamp and Cobalt (id 12) + is `0`. - `PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION` — must be non-zero and fit in 128 bits. - `PROTOCOL_VERSIONS_INCIDENT_RESPONDER` — the address allowed to use the incident path. - `OLD_*` — the currently deployed implementations. `ExecuteCobaltUpgrade` asserts these match the live proxies before building any calls, so a stale value stops the task rather than upgrading from an unexpected base. - The `AGGREGATE_VERIFIER_*` values, which are carried over from the live implementation so the - redeploy changes nothing except the registry binding and the split cadence intervals. The slow - and fast pairs must divide to the same intermediate root count or the constructor reverts. + registry binding is the only change the redeploy makes. `BLOCK_INTERVAL` must be divisible by + `INTERMEDIATE_BLOCK_INTERVAL` or the constructor reverts. Cobalt itself is registered unscheduled. Setting its activation timestamp is a separate, later operation and is deliberately not part of this task. @@ -126,9 +126,11 @@ there is nothing to reinitialize. - **Pause semantics.** After the upgrade `SystemConfig.paused()` stops consulting `superchainConfig.paused()`. On a chain where the lockbox address was paused, that is a silent unpause. `_postCheck` asserts the effective pause state is unchanged across the upgrade. -- **Unchanged version strings.** `OptimismPortal2` stays at `5.2.0` and `DisputeGameFactory` at - `1.4.0` across this change, so `version()` alone cannot tell old from new. Confirm the - implementation addresses, not the semver. +- **Unchanged version strings.** `OptimismPortal2` stays at `5.2.0`, `DisputeGameFactory` at + `1.4.0`, and `AggregateVerifier` at `0.1.0` across this change, so `version()` alone cannot tell + old from new for any of them. Confirm the implementation addresses, not the semver. For the + verifier, the `PROTOCOL_VERSIONS()` getter is the real discriminator: the predecessor predates + the registry and does not have it. - **Existing dispute games.** Switching the factory to `CREATE2` only affects games created after the upgrade; existing game proxies and `gameCount()` are untouched, and `_postCheck` asserts the count is stable. diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/Makefile b/active/evm/tasks/2026-09-14-cobalt-upgrade/Makefile index ac2be8f8e..66cd89ef9 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/Makefile +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/Makefile @@ -50,10 +50,8 @@ DEPLOY_ENV = ADDRESSES_JSON=$(ADDRESSES_JSON) \ AGGREGATE_VERIFIER_TEE_IMAGE_HASH=$(AGGREGATE_VERIFIER_TEE_IMAGE_HASH) \ AGGREGATE_VERIFIER_ZK_RANGE_HASH=$(AGGREGATE_VERIFIER_ZK_RANGE_HASH) \ AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH=$(AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH) \ - AGGREGATE_VERIFIER_SLOW_BLOCK_INTERVAL=$(AGGREGATE_VERIFIER_SLOW_BLOCK_INTERVAL) \ - AGGREGATE_VERIFIER_SLOW_INTERMEDIATE_BLOCK_INTERVAL=$(AGGREGATE_VERIFIER_SLOW_INTERMEDIATE_BLOCK_INTERVAL) \ - AGGREGATE_VERIFIER_FAST_BLOCK_INTERVAL=$(AGGREGATE_VERIFIER_FAST_BLOCK_INTERVAL) \ - AGGREGATE_VERIFIER_FAST_INTERMEDIATE_BLOCK_INTERVAL=$(AGGREGATE_VERIFIER_FAST_INTERMEDIATE_BLOCK_INTERVAL) + AGGREGATE_VERIFIER_BLOCK_INTERVAL=$(AGGREGATE_VERIFIER_BLOCK_INTERVAL) \ + AGGREGATE_VERIFIER_INTERMEDIATE_BLOCK_INTERVAL=$(AGGREGATE_VERIFIER_INTERMEDIATE_BLOCK_INTERVAL) UPGRADE_ENV = RECORD_STATE_DIFF=$(RECORD_STATE_DIFF) \ PROXY_ADMIN_OWNER=$(PROXY_ADMIN_OWNER) \ @@ -179,12 +177,12 @@ endif cd $(PROJECT_DIR) && RUST_LOG=off FOUNDRY_BYTECODE_HASH=none FOUNDRY_OPTIMIZER_RUNS=999999 FOUNDRY_EVM_VERSION=cancun \ $(MISE_EXEC) forge verify-contract $(NEW_AGGREGATE_VERIFIER) src/L1/proofs/AggregateVerifier.sol:AggregateVerifier \ --constructor-args $(shell $(MISE_EXEC) cast abi-encode \ - "constructor(uint32,address,address,address,address,bytes32,(bytes32,bytes32),bytes32,uint256,(uint256,uint256,uint256,uint256),(address,uint256,uint64,uint64))" \ + "constructor(uint32,address,address,address,address,bytes32,(bytes32,bytes32),bytes32,uint256,uint256,uint256,(address,uint256,uint64,uint64))" \ 621 $(ANCHOR_STATE_REGISTRY_PROXY) $(MULTIPROOF_DELAYED_WETH_PROXY) $(TEE_VERIFIER) $(ZK_VERIFIER) \ $(AGGREGATE_VERIFIER_TEE_IMAGE_HASH) \ "($(AGGREGATE_VERIFIER_ZK_RANGE_HASH),$(AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH))" \ $(AGGREGATE_VERIFIER_CONFIG_HASH) $(L2_CHAIN_ID) \ - "($(AGGREGATE_VERIFIER_SLOW_BLOCK_INTERVAL),$(AGGREGATE_VERIFIER_SLOW_INTERMEDIATE_BLOCK_INTERVAL),$(AGGREGATE_VERIFIER_FAST_BLOCK_INTERVAL),$(AGGREGATE_VERIFIER_FAST_INTERMEDIATE_BLOCK_INTERVAL))" \ + $(AGGREGATE_VERIFIER_BLOCK_INTERVAL) $(AGGREGATE_VERIFIER_INTERMEDIATE_BLOCK_INTERVAL) \ "($(PROTOCOL_VERSIONS_PROXY),$(L2_GENESIS_BLOCK_NUMBER),$(L2_GENESIS_TIMESTAMP),$(L2_BLOCK_TIME))") \ --num-of-optimizations 999999 $(VERIFY_COMMON) diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env index 4e679ab4b..4ea539fde 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env @@ -1,5 +1,5 @@ -# https://github.com/base/contracts/commit/30e4390b94090b44742a8d58ccbcaaf3d7d8fe39 -BASE_CONTRACTS_COMMIT=30e4390b94090b44742a8d58ccbcaaf3d7d8fe39 +# https://github.com/base/contracts/commit/0ae2de1133aa63b689f2d80834004b85c212bddc +BASE_CONTRACTS_COMMIT=0ae2de1133aa63b689f2d80834004b85c212bddc RECORD_STATE_DIFF=true # Rollback anchors verified against Zeronet before task creation. @@ -21,24 +21,18 @@ PROTOCOL_VERSIONS_INITIAL_SCHEDULE=1782348588,1782348588,1782348588,1782348588,1 PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION=79228162514264337593543950336 PROTOCOL_VERSIONS_INCIDENT_RESPONDER=0x856611ed7e07d83243b15e93f6321f2df6865852 -# AggregateVerifier redeploy inputs. The hashes and the slow pair are read from the -# live game implementation at 0x7dd0f51C71DA5243174FA829c8cf3385B06833b0, so the -# redeploy carries them over unchanged. -# -# CONFIRM BEFORE DEPLOY: the fast pair has no live counterpart -- v0.1.0 predates the -# cadence split -- so these are assumed, not read. They are set to a 10x speedup of -# the slow pair, which is only a guess at Denim's cadence. Both pairs must divide to -# the same intermediate root count (here 20) or the constructor reverts, and the pair -# is frozen for the lifetime of the implementation because it fixes the CWIA extraData -# layout. Changing it later means another redeploy. +# AggregateVerifier redeploy inputs, all read from the live game implementation at +# 0x7dd0f51C71DA5243174FA829c8cf3385B06833b0 so the redeploy carries them over +# unchanged. The pinned commit reverts the slow/fast cadence split, so there is a +# single interval pair again, matching the live values. BLOCK_INTERVAL must be +# divisible by INTERMEDIATE_BLOCK_INTERVAL, and the resulting count fixes the CWIA +# extraData layout for the lifetime of the implementation. AGGREGATE_VERIFIER_CONFIG_HASH=0xd14ddabfc0ad1dd737d6e5917cf271fd479bd539c9b3d85a602589c679a9983a AGGREGATE_VERIFIER_TEE_IMAGE_HASH=0x0b70f5a605b7f0dd56facb70f4d0f37042d6a448cc3deefff7475fdd4ab549c1 AGGREGATE_VERIFIER_ZK_RANGE_HASH=0x5fd09a2f4338ca7063bc37b02f9411645d0ef2784fe644cc71ab48ae64200beb AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH=0x00a147f0c69da81e3d530cca91310f9605f980dc155726bb33fbde0e493a3836 -AGGREGATE_VERIFIER_SLOW_BLOCK_INTERVAL=600 -AGGREGATE_VERIFIER_SLOW_INTERMEDIATE_BLOCK_INTERVAL=30 -AGGREGATE_VERIFIER_FAST_BLOCK_INTERVAL=6000 -AGGREGATE_VERIFIER_FAST_INTERMEDIATE_BLOCK_INTERVAL=300 +AGGREGATE_VERIFIER_BLOCK_INTERVAL=600 +AGGREGATE_VERIFIER_INTERMEDIATE_BLOCK_INTERVAL=30 # L2 chain geometry used to map activation timestamps onto block numbers. L2_GENESIS_BLOCK_NUMBER=0 diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltProofImpls.s.sol b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltProofImpls.s.sol index ac693ea48..6d717770e 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltProofImpls.s.sol +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltProofImpls.s.sol @@ -16,8 +16,9 @@ import {ProtocolVersions} from "@base-contracts/src/L1/ProtocolVersions.sol"; /// @dev AggregateVerifier binds PROTOCOL_VERSIONS as a constructor immutable, so it must be /// redeployed for the registry to take effect and the proxy from DeployCobaltCoreImpls must /// already exist. Every other constructor argument is carried over unchanged from the live -/// implementation so this redeploy introduces no behavioural change beyond the binding and the -/// split slow/fast cadence intervals. +/// implementation, so the registry binding is the only behavioural change. Note that the +/// pinned commit reverts AggregateVerifier to 0.1.0, the same version the live implementation +/// reports, so version alone cannot distinguish the two. contract DeployCobaltProofImpls is Script { /// @notice Game type of the aggregate proof game. GameType internal constant AGGREGATE_VERIFIER_GAME_TYPE = GameType.wrap(621); @@ -31,10 +32,8 @@ contract DeployCobaltProofImpls is Script { bytes32 internal immutable zkRangeHash; bytes32 internal immutable zkAggregateHash; uint256 internal immutable l2ChainId; - uint256 internal immutable slowBlockInterval; - uint256 internal immutable slowIntermediateBlockInterval; - uint256 internal immutable fastBlockInterval; - uint256 internal immutable fastIntermediateBlockInterval; + uint256 internal immutable blockInterval; + uint256 internal immutable intermediateBlockInterval; uint256 internal immutable l2GenesisBlockNumber; uint64 internal immutable l2GenesisTimestamp; uint64 internal immutable l2BlockTime; @@ -54,10 +53,8 @@ contract DeployCobaltProofImpls is Script { zkRangeHash = vm.envBytes32("AGGREGATE_VERIFIER_ZK_RANGE_HASH"); zkAggregateHash = vm.envBytes32("AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH"); l2ChainId = vm.envUint("L2_CHAIN_ID"); - slowBlockInterval = vm.envUint("AGGREGATE_VERIFIER_SLOW_BLOCK_INTERVAL"); - slowIntermediateBlockInterval = vm.envUint("AGGREGATE_VERIFIER_SLOW_INTERMEDIATE_BLOCK_INTERVAL"); - fastBlockInterval = vm.envUint("AGGREGATE_VERIFIER_FAST_BLOCK_INTERVAL"); - fastIntermediateBlockInterval = vm.envUint("AGGREGATE_VERIFIER_FAST_INTERMEDIATE_BLOCK_INTERVAL"); + blockInterval = vm.envUint("AGGREGATE_VERIFIER_BLOCK_INTERVAL"); + intermediateBlockInterval = vm.envUint("AGGREGATE_VERIFIER_INTERMEDIATE_BLOCK_INTERVAL"); l2GenesisBlockNumber = vm.envUint("L2_GENESIS_BLOCK_NUMBER"); l2GenesisTimestamp = uint64(vm.envUint("L2_GENESIS_TIMESTAMP")); l2BlockTime = uint64(vm.envUint("L2_BLOCK_TIME")); @@ -87,12 +84,8 @@ contract DeployCobaltProofImpls is Script { zkHashes: AggregateVerifier.ZkHashes({rangeHash: zkRangeHash, aggregateHash: zkAggregateHash}), configHash: configHash, l2ChainId: l2ChainId, - intervalConfig: AggregateVerifier.IntervalConfig({ - slowBlockInterval: slowBlockInterval, - slowIntermediateBlockInterval: slowIntermediateBlockInterval, - fastBlockInterval: fastBlockInterval, - fastIntermediateBlockInterval: fastIntermediateBlockInterval - }), + blockInterval: blockInterval, + intermediateBlockInterval: intermediateBlockInterval, scheduleConfig: AggregateVerifier.ScheduleConfig({ protocolVersions: IProtocolVersions(protocolVersionsProxy), genesisBlockNumber: l2GenesisBlockNumber, @@ -118,9 +111,14 @@ contract DeployCobaltProofImpls is Script { require(protocolVersionsImpl.initVersion() == 1, "protocol versions init version mismatch"); require( - keccak256(bytes(aggregateVerifier.version())) == keccak256(bytes("0.2.0")), + keccak256(bytes(aggregateVerifier.version())) == keccak256(bytes("0.1.0")), "aggregate verifier version mismatch" ); + require(aggregateVerifier.BLOCK_INTERVAL() == blockInterval, "aggregate verifier block interval mismatch"); + require( + aggregateVerifier.INTERMEDIATE_BLOCK_INTERVAL() == intermediateBlockInterval, + "aggregate verifier intermediate block interval mismatch" + ); require( address(aggregateVerifier.PROTOCOL_VERSIONS()) == protocolVersionsProxy, "aggregate verifier protocol versions mismatch" diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/script/ExecuteCobaltUpgrade.s.sol b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/ExecuteCobaltUpgrade.s.sol index 82d4953a5..9948128b2 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/script/ExecuteCobaltUpgrade.s.sol +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/ExecuteCobaltUpgrade.s.sol @@ -241,9 +241,13 @@ contract ExecuteCobaltUpgrade is MultisigScript { "dispute game factory implementation version mismatch" ); require( - keccak256(bytes(IAggregateVerifier(newAggregateVerifier).version())) == keccak256(bytes("0.2.0")), + keccak256(bytes(IAggregateVerifier(newAggregateVerifier).version())) == keccak256(bytes("0.1.0")), "aggregate verifier version mismatch" ); + // AggregateVerifier is back at 0.1.0, the same version the live implementation reports, so + // the registry binding is what actually distinguishes the two. The predecessor predates + // ProtocolVersions and has no such getter. + require(newAggregateVerifier != oldAggregateVerifier, "aggregate verifier was not redeployed"); require( IAggregateVerifier(newAggregateVerifier).PROTOCOL_VERSIONS() == protocolVersionsProxy, "aggregate verifier is not bound to the new registry" From bbeb99b91b664e6be6182ca9fdf247375602d5ef Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Mon, 14 Sep 2026 17:01:15 -0400 Subject: [PATCH 04/14] fix(zeronet): address Cobalt task review feedback - Point the pin comment at the v8.3.0 release branch. - Drop RECORD_STATE_DIFF; the pinned signer tool injects it when it spawns forge (src/lib/state-diff.ts). - Schedule Cobalt for 2026-09-16 18:00:00 UTC instead of leaving it unscheduled. - Set the minimum protocol version to v1.4.0, documenting the packing and the cast command to re-derive it. - Blank the TEE and ZK program hashes with a TODO pointing at base/base releases/v1.4.0; the deploy script refuses to run until they are set. Every other AggregateVerifier constructor argument, including the config hash and block intervals, is now read back from the live implementation, and the portal's proof maturity delay is read from the live portal. - Record the ABI-encoded constructor args in addresses.json so the verify targets no longer rebuild them from config. - Remove the DEPLOYER variable and both Makefile validation targets; the scripts already assert these conditions. - Fold the shared remappings into profile.default so the Cobalt profiles only carry the optimizer settings that actually differ. - Trim the facilitator risk list to the items that apply to us. Co-authored-by: Cursor --- active/evm/foundry.toml | 28 +--- .../2026-09-14-cobalt-upgrade/FACILITATOR.md | 44 +++--- .../tasks/2026-09-14-cobalt-upgrade/Makefile | 73 +++------ .../config/zeronet/.env | 48 +++--- .../config/zeronet/README.md | 6 +- .../script/DeployCobaltCoreImpls.s.sol | 13 +- .../script/DeployCobaltProofImpls.s.sol | 138 +++++++++++++----- 7 files changed, 185 insertions(+), 165 deletions(-) diff --git a/active/evm/foundry.toml b/active/evm/foundry.toml index 4b8a9fe8c..24bf074d8 100644 --- a/active/evm/foundry.toml +++ b/active/evm/foundry.toml @@ -11,11 +11,10 @@ evm_version = "prague" via-ir = false remappings = [ '@base-contracts/=lib/contracts/', + '@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/', 'forge-std/=lib/forge-std/src/', - 'interfaces/L1/=lib/contracts/interfaces/L1/', - 'interfaces/legacy/=lib/contracts/interfaces/legacy/', - 'interfaces/universal/=lib/contracts/interfaces/universal/', - 'src/libraries/=lib/contracts/src/libraries/', + 'interfaces/=lib/contracts/interfaces/', + 'src/=lib/contracts/src/', ] [profile.nitro-deploy] @@ -30,34 +29,21 @@ optimizer_runs = 999999 bytecode_hash = "none" evm_version = "cancun" -# Cobalt deploy profiles. base/contracts pins per-contract optimizer runs via -# `compilation_restrictions` in its own foundry.toml; profile remappings replace -# rather than extend the default list, so both profiles carry the full set. +# Cobalt deploy profiles. These exist only because base/contracts pins per-contract +# optimizer runs via `compilation_restrictions` in its own foundry.toml, and matching +# its canonical build is what makes the deployed bytecode verifiable. Everything else, +# including remappings, is inherited from the default profile above. [profile.cobalt-core-deploy] optimizer = true optimizer_runs = 5000 bytecode_hash = "none" evm_version = "cancun" -remappings = [ - '@base-contracts/=lib/contracts/', - '@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/', - 'forge-std/=lib/forge-std/src/', - 'interfaces/=lib/contracts/interfaces/', - 'src/=lib/contracts/src/', -] [profile.cobalt-proofs-deploy] optimizer = true optimizer_runs = 999999 bytecode_hash = "none" evm_version = "cancun" -remappings = [ - '@base-contracts/=lib/contracts/', - '@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/', - 'forge-std/=lib/forge-std/src/', - 'interfaces/=lib/contracts/interfaces/', - 'src/=lib/contracts/src/', -] [lint] lint_on_build = false diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md b/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md index ee466c902..7bb88a8f4 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md @@ -37,17 +37,18 @@ Open `config//.env` and confirm every value, in particular: on every chain. Entries may be `0` for an unscheduled fork. Zeronet was re-genesised with every fork through Beryl already active, so ids 0–11 carry the genesis timestamp and Cobalt (id 12) is `0`. -- `PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION` — must be non-zero and fit in 128 bits. +- `PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION` — must be non-zero and fit in 128 bits. The comment + above it gives the `cast` command to re-derive the packed value from the human-readable version. - `PROTOCOL_VERSIONS_INCIDENT_RESPONDER` — the address allowed to use the incident path. - `OLD_*` — the currently deployed implementations. `ExecuteCobaltUpgrade` asserts these match the live proxies before building any calls, so a stale value stops the task rather than upgrading from an unexpected base. -- The `AGGREGATE_VERIFIER_*` values, which are carried over from the live implementation so the - registry binding is the only change the redeploy makes. `BLOCK_INTERVAL` must be divisible by - `INTERMEDIATE_BLOCK_INTERVAL` or the constructor reverts. - -Cobalt itself is registered unscheduled. Setting its activation timestamp is a separate, later -operation and is deliberately not part of this task. +- `AGGREGATE_VERIFIER_TEE_IMAGE_HASH`, `AGGREGATE_VERIFIER_ZK_RANGE_HASH` and + `AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH` — the proof program hashes, derived from the Base node + release these games prove against. They ship blank and the deploy script refuses to run until + they are filled in. Every other `AggregateVerifier` constructor argument, including the config + hash and the block intervals, is read back from the live implementation at deploy time, so the + redeploy cannot change them. ## 3. Deploy @@ -116,21 +117,14 @@ Five calls, all from the ProxyAdmin owner Safe: Calls 2–4 are bare upgrades: none of those implementations adds state or bumps its init version, so there is nothing to reinitialize. -## Risks worth re-checking before signing - -- **ETH custody.** Cobalt deletes every `EthLockbox` code path from the portal without migrating - balances. A chain with a live lockbox would strand the ETH held there. `_preCheck` refuses to - build the transaction unless `ethLockbox()` is absent or zero. Zeronet reports zero and keeps its - ETH in the portal already, so this upgrade moves no funds — `_postCheck` asserts the portal - balance and its now-spacer slot 63 are both unchanged. -- **Pause semantics.** After the upgrade `SystemConfig.paused()` stops consulting - `superchainConfig.paused()`. On a chain where the lockbox address was paused, that is a - silent unpause. `_postCheck` asserts the effective pause state is unchanged across the upgrade. -- **Unchanged version strings.** `OptimismPortal2` stays at `5.2.0`, `DisputeGameFactory` at - `1.4.0`, and `AggregateVerifier` at `0.1.0` across this change, so `version()` alone cannot tell - old from new for any of them. Confirm the implementation addresses, not the semver. For the - verifier, the `PROTOCOL_VERSIONS()` getter is the real discriminator: the predecessor predates - the registry and does not have it. -- **Existing dispute games.** Switching the factory to `CREATE2` only affects games created after - the upgrade; existing game proxies and `gameCount()` are untouched, and `_postCheck` asserts the - count is stable. +## Worth re-checking before signing + +- **Version strings cannot tell old from new.** `OptimismPortal2` stays at `5.2.0`, + `DisputeGameFactory` at `1.4.0`, and `AggregateVerifier` at `0.1.0` across this change, so + `version()` is not a useful check for any of them. Confirm the implementation addresses instead. + For the verifier, the `PROTOCOL_VERSIONS()` getter is the real discriminator: the predecessor + predates the registry and reverts on that call. +- **The Cobalt activation is scheduled, so the transaction is time-sensitive.** + `ProtocolVersions.initialize` enforces one hour of notice on future timestamps, so it reverts if + the upgrade lands within the hour before the configured Cobalt activation. Execute well before + that window, or push the timestamp out. diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/Makefile b/active/evm/tasks/2026-09-14-cobalt-upgrade/Makefile index 66cd89ef9..fe6d0d7cc 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/Makefile +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/Makefile @@ -17,7 +17,6 @@ SIGNER_TOOL_PATH := $(REPO_ROOT)/signer-tool VALIDATIONS_DIR := $(CURDIR)/config/$(TASK_NETWORK)/validations RPC_URL := $(L1_RPC_URL) ADDRESSES_JSON := $(CURDIR)/config/$(TASK_NETWORK)/addresses.json -DEPLOYER = $(shell $(MISE_EXEC) cast wallet address --ledger --mnemonic-derivation-path $(LEDGER_HD_PATH)) TASK_DIR := tasks/2026-09-14-cobalt-upgrade DEPLOY_CORE_SCRIPT := $(TASK_DIR)/script/DeployCobaltCoreImpls.s.sol:DeployCobaltCoreImpls @@ -34,27 +33,22 @@ NEW_DISPUTE_GAME_FACTORY_IMPL = $(shell jq -er '.disputeGameFactoryImpl' $(ADDRE NEW_AGGREGATE_VERIFIER = $(shell jq -er '.aggregateVerifier' $(ADDRESSES_JSON) 2>/dev/null) PROTOCOL_VERSIONS_PROXY = $(shell jq -er '.protocolVersionsProxy' $(ADDRESSES_JSON) 2>/dev/null) PROTOCOL_VERSIONS_IMPL = $(shell jq -er '.protocolVersionsImpl' $(ADDRESSES_JSON) 2>/dev/null) +OPTIMISM_PORTAL_IMPL_CTOR_ARGS = $(shell jq -er '.optimismPortalImplConstructorArgs' $(ADDRESSES_JSON) 2>/dev/null) +PROTOCOL_VERSIONS_PROXY_CTOR_ARGS = $(shell jq -er '.protocolVersionsProxyConstructorArgs' $(ADDRESSES_JSON) 2>/dev/null) +AGGREGATE_VERIFIER_CTOR_ARGS = $(shell jq -er '.aggregateVerifierConstructorArgs' $(ADDRESSES_JSON) 2>/dev/null) DEPLOY_ENV = ADDRESSES_JSON=$(ADDRESSES_JSON) \ L1_PROXY_ADMIN=$(L1_PROXY_ADMIN) \ - PROOF_MATURITY_DELAY_SECONDS=$(PROOF_MATURITY_DELAY_SECONDS) \ - ANCHOR_STATE_REGISTRY_PROXY=$(ANCHOR_STATE_REGISTRY_PROXY) \ - MULTIPROOF_DELAYED_WETH_PROXY=$(MULTIPROOF_DELAYED_WETH_PROXY) \ - TEE_VERIFIER=$(TEE_VERIFIER) \ - ZK_VERIFIER=$(ZK_VERIFIER) \ - L2_CHAIN_ID=$(L2_CHAIN_ID) \ + OPTIMISM_PORTAL=$(OPTIMISM_PORTAL) \ + DISPUTE_GAME_FACTORY_PROXY=$(DISPUTE_GAME_FACTORY_PROXY) \ L2_GENESIS_BLOCK_NUMBER=$(L2_GENESIS_BLOCK_NUMBER) \ L2_GENESIS_TIMESTAMP=$(L2_GENESIS_TIMESTAMP) \ L2_BLOCK_TIME=$(L2_BLOCK_TIME) \ - AGGREGATE_VERIFIER_CONFIG_HASH=$(AGGREGATE_VERIFIER_CONFIG_HASH) \ AGGREGATE_VERIFIER_TEE_IMAGE_HASH=$(AGGREGATE_VERIFIER_TEE_IMAGE_HASH) \ AGGREGATE_VERIFIER_ZK_RANGE_HASH=$(AGGREGATE_VERIFIER_ZK_RANGE_HASH) \ - AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH=$(AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH) \ - AGGREGATE_VERIFIER_BLOCK_INTERVAL=$(AGGREGATE_VERIFIER_BLOCK_INTERVAL) \ - AGGREGATE_VERIFIER_INTERMEDIATE_BLOCK_INTERVAL=$(AGGREGATE_VERIFIER_INTERMEDIATE_BLOCK_INTERVAL) + AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH=$(AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH) -UPGRADE_ENV = RECORD_STATE_DIFF=$(RECORD_STATE_DIFF) \ - PROXY_ADMIN_OWNER=$(PROXY_ADMIN_OWNER) \ +UPGRADE_ENV = PROXY_ADMIN_OWNER=$(PROXY_ADMIN_OWNER) \ L1_PROXY_ADMIN=$(L1_PROXY_ADMIN) \ OPTIMISM_PORTAL=$(OPTIMISM_PORTAL) \ SYSTEM_CONFIG=$(SYSTEM_CONFIG) \ @@ -98,23 +92,6 @@ task-extra-deps: apply-patches: cd $(PROJECT_DIR)/lib/contracts && patch -p1 --forward < $(CURDIR)/patch/max-gas-limit.patch -## -# Validation -## -.PHONY: validate-deploy-config -validate-deploy-config: - @test -n "$(BASE_CONTRACTS_COMMIT)" || (echo "BASE_CONTRACTS_COMMIT required" && exit 1) - @test -n "$(PROTOCOL_VERSIONS_INITIAL_SCHEDULE)" || (echo "PROTOCOL_VERSIONS_INITIAL_SCHEDULE required" && exit 1) - @test -n "$(PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION)" || (echo "PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION required" && exit 1) - @test -n "$(PROTOCOL_VERSIONS_INCIDENT_RESPONDER)" || (echo "PROTOCOL_VERSIONS_INCIDENT_RESPONDER required" && exit 1) - @grep -q 'max-gas-limit-2000M' $(PROJECT_DIR)/lib/contracts/src/L1/SystemConfig.sol \ - || (echo "SystemConfig patch not applied -- run make TASK_NETWORK=$(TASK_NETWORK) deps" && exit 1) - -.PHONY: validate-upgrade-config -validate-upgrade-config: validate-deploy-config - @test -f "$(ADDRESSES_JSON)" || (echo "run make TASK_NETWORK=$(TASK_NETWORK) deploy first" && exit 1) - @jq -e '.optimismPortalImpl and .systemConfigImpl and .disputeGameFactoryImpl and .protocolVersionsProxy and .protocolVersionsImpl and .aggregateVerifier' "$(ADDRESSES_JSON)" >/dev/null - ## # Deployment ## @@ -125,18 +102,17 @@ deploy: deploy-core deploy-proofs # 5000 optimizer runs, and ProtocolVersions and AggregateVerifier to 999999. The two # deploy steps exist to reproduce those settings exactly. .PHONY: deploy-core -deploy-core: validate-deploy-config +deploy-core: @test -f "$(ADDRESSES_JSON)" || echo '{}' > "$(ADDRESSES_JSON)" cd $(PROJECT_DIR) && $(DEPLOY_ENV) FOUNDRY_PROFILE=cobalt-core-deploy \ $(MISE_EXEC) forge script --rpc-url $(L1_RPC_URL) $(DEPLOY_CORE_SCRIPT) \ - --ledger --hd-paths $(LEDGER_HD_PATH) --broadcast -vvvv --sender $(DEPLOYER) + --ledger --hd-paths $(LEDGER_HD_PATH) --broadcast -vvvv .PHONY: deploy-proofs -deploy-proofs: validate-deploy-config - @jq -e '.protocolVersionsProxy' "$(ADDRESSES_JSON)" >/dev/null 2>&1 || (echo "run make TASK_NETWORK=$(TASK_NETWORK) deploy-core first" && exit 1) +deploy-proofs: cd $(PROJECT_DIR) && $(DEPLOY_ENV) FOUNDRY_PROFILE=cobalt-proofs-deploy \ $(MISE_EXEC) forge script --rpc-url $(L1_RPC_URL) $(DEPLOY_PROOFS_SCRIPT) \ - --ledger --hd-paths $(LEDGER_HD_PATH) --broadcast -vvvv --sender $(DEPLOYER) + --ledger --hd-paths $(LEDGER_HD_PATH) --broadcast -vvvv ## # Source verification @@ -147,13 +123,13 @@ VERIFY_COMMON = --root $(PROJECT_DIR)/lib/contracts --compilation-profile defaul --verifier-api-key $(VERIFIER_API_KEY) --watch .PHONY: verify-core -verify-core: validate-upgrade-config +verify-core: ifndef VERIFIER_API_KEY $(error VERIFIER_API_KEY is not set) endif cd $(PROJECT_DIR) && RUST_LOG=off FOUNDRY_BYTECODE_HASH=none FOUNDRY_OPTIMIZER_RUNS=5000 FOUNDRY_EVM_VERSION=cancun \ $(MISE_EXEC) forge verify-contract $(NEW_OPTIMISM_PORTAL_IMPL) src/L1/OptimismPortal2.sol:OptimismPortal2 \ - --constructor-args $(shell $(MISE_EXEC) cast abi-encode "constructor(uint256)" $(PROOF_MATURITY_DELAY_SECONDS)) \ + --constructor-args $(OPTIMISM_PORTAL_IMPL_CTOR_ARGS) \ --num-of-optimizations 5000 $(VERIFY_COMMON) cd $(PROJECT_DIR) && RUST_LOG=off FOUNDRY_BYTECODE_HASH=none FOUNDRY_OPTIMIZER_RUNS=5000 FOUNDRY_EVM_VERSION=cancun \ $(MISE_EXEC) forge verify-contract $(NEW_SYSTEM_CONFIG_IMPL) src/L1/SystemConfig.sol:SystemConfig \ @@ -163,11 +139,11 @@ endif --num-of-optimizations 5000 $(VERIFY_COMMON) cd $(PROJECT_DIR) && RUST_LOG=off FOUNDRY_BYTECODE_HASH=none FOUNDRY_OPTIMIZER_RUNS=5000 FOUNDRY_EVM_VERSION=cancun \ $(MISE_EXEC) forge verify-contract $(PROTOCOL_VERSIONS_PROXY) src/universal/Proxy.sol:Proxy \ - --constructor-args $(shell $(MISE_EXEC) cast abi-encode "constructor(address)" $(L1_PROXY_ADMIN)) \ + --constructor-args $(PROTOCOL_VERSIONS_PROXY_CTOR_ARGS) \ --num-of-optimizations 5000 $(VERIFY_COMMON) .PHONY: verify-proofs -verify-proofs: validate-upgrade-config +verify-proofs: ifndef VERIFIER_API_KEY $(error VERIFIER_API_KEY is not set) endif @@ -176,38 +152,31 @@ endif --num-of-optimizations 999999 $(VERIFY_COMMON) cd $(PROJECT_DIR) && RUST_LOG=off FOUNDRY_BYTECODE_HASH=none FOUNDRY_OPTIMIZER_RUNS=999999 FOUNDRY_EVM_VERSION=cancun \ $(MISE_EXEC) forge verify-contract $(NEW_AGGREGATE_VERIFIER) src/L1/proofs/AggregateVerifier.sol:AggregateVerifier \ - --constructor-args $(shell $(MISE_EXEC) cast abi-encode \ - "constructor(uint32,address,address,address,address,bytes32,(bytes32,bytes32),bytes32,uint256,uint256,uint256,(address,uint256,uint64,uint64))" \ - 621 $(ANCHOR_STATE_REGISTRY_PROXY) $(MULTIPROOF_DELAYED_WETH_PROXY) $(TEE_VERIFIER) $(ZK_VERIFIER) \ - $(AGGREGATE_VERIFIER_TEE_IMAGE_HASH) \ - "($(AGGREGATE_VERIFIER_ZK_RANGE_HASH),$(AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH))" \ - $(AGGREGATE_VERIFIER_CONFIG_HASH) $(L2_CHAIN_ID) \ - $(AGGREGATE_VERIFIER_BLOCK_INTERVAL) $(AGGREGATE_VERIFIER_INTERMEDIATE_BLOCK_INTERVAL) \ - "($(PROTOCOL_VERSIONS_PROXY),$(L2_GENESIS_BLOCK_NUMBER),$(L2_GENESIS_TIMESTAMP),$(L2_BLOCK_TIME))") \ + --constructor-args $(AGGREGATE_VERIFIER_CTOR_ARGS) \ --num-of-optimizations 999999 $(VERIFY_COMMON) ## # Validation files ## .PHONY: gen-validation-cb -gen-validation-cb: validate-upgrade-config deps-signer-tool +gen-validation-cb: deps-signer-tool $(call GEN_VALIDATION,$(UPGRADE_SCRIPT),$(CB_MULTISIG),$(CB_SENDER),base-signer.json,$(UPGRADE_ENV)) .PHONY: gen-validation-sc -gen-validation-sc: validate-upgrade-config deps-signer-tool +gen-validation-sc: deps-signer-tool $(call GEN_VALIDATION,$(UPGRADE_SCRIPT),$(BASE_SECURITY_COUNCIL),$(SC_SENDER),security-council-signer.json,$(UPGRADE_ENV)) ## # Approve and execute ## .PHONY: approve-cb -approve-cb: validate-upgrade-config +approve-cb: export $(UPGRADE_ENV); $(call MULTISIG_APPROVE,$(CB_MULTISIG),$(SIGNATURES)) .PHONY: approve-sc -approve-sc: validate-upgrade-config +approve-sc: export $(UPGRADE_ENV); $(call MULTISIG_APPROVE,$(BASE_SECURITY_COUNCIL),$(SIGNATURES)) .PHONY: execute -execute: validate-upgrade-config +execute: export $(UPGRADE_ENV); $(call MULTISIG_EXECUTE,0x) diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env index 4ea539fde..59ca8a38f 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env @@ -1,6 +1,5 @@ -# https://github.com/base/contracts/commit/0ae2de1133aa63b689f2d80834004b85c212bddc +# https://github.com/base/contracts/commits/releases/v8.3.0/ BASE_CONTRACTS_COMMIT=0ae2de1133aa63b689f2d80834004b85c212bddc -RECORD_STATE_DIFF=true # Rollback anchors verified against Zeronet before task creation. OLD_OPTIMISM_PORTAL_IMPL=0xc1ad6d4e8da1403b9eb6a99491899577050f4863 @@ -11,33 +10,34 @@ OLD_AGGREGATE_VERIFIER=0x7dd0f51C71DA5243174FA829c8cf3385B06833b0 # ProtocolVersions initial state. # # Zeronet re-genesised at 1782348588, so every fork through Beryl is active from -# genesis. Ids are kept aligned with the Base mainnet registry because -# AggregateVerifier hardcodes upgrade index 13 (Denim) as its fast-cadence gate: +# genesis. Ids are kept aligned with the Base mainnet registry so that an index means +# the same fork on every chain: # 0 genesis, 1 canyon, 2 delta, 3 ecotone, 4 fjord, 5 granite, 6 holocene, # 7 pectraBlobSchedule (unscheduled), 8 isthmus, 9 jovian, 10 azul, 11 beryl, -# 12 cobalt (unscheduled -- scheduled separately once an activation time is set). -PROTOCOL_VERSIONS_INITIAL_SCHEDULE=1782348588,1782348588,1782348588,1782348588,1782348588,1782348588,1782348588,0,1782348588,1782348588,1782348588,1782348588,0 -# Packed semver, major 1 (1 << 96). Must be non-zero and fit in 128 bits. -PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION=79228162514264337593543950336 +# 12 cobalt -> 1789581600, which is 2026-09-16 18:00:00 UTC: +# date -u -r 1789581600 +PROTOCOL_VERSIONS_INITIAL_SCHEDULE=1782348588,1782348588,1782348588,1782348588,1782348588,1782348588,1782348588,0,1782348588,1782348588,1782348588,1782348588,1789581600 + +# Minimum protocol version, set to v1.4.0. The OP protocol version format packs the +# low 16 bytes as major || minor || patch || pre-release, four bytes each, so v1.4.0 +# is 0x00000001_00000004_00000000_00000000. Re-derive with: +# cast to-dec 0x00000001000000040000000000000000 +# Must be non-zero and fit in 128 bits. +PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION=79228162588051313888382156800 PROTOCOL_VERSIONS_INCIDENT_RESPONDER=0x856611ed7e07d83243b15e93f6321f2df6865852 -# AggregateVerifier redeploy inputs, all read from the live game implementation at -# 0x7dd0f51C71DA5243174FA829c8cf3385B06833b0 so the redeploy carries them over -# unchanged. The pinned commit reverts the slow/fast cadence split, so there is a -# single interval pair again, matching the live values. BLOCK_INTERVAL must be -# divisible by INTERMEDIATE_BLOCK_INTERVAL, and the resulting count fixes the CWIA -# extraData layout for the lifetime of the implementation. -AGGREGATE_VERIFIER_CONFIG_HASH=0xd14ddabfc0ad1dd737d6e5917cf271fd479bd539c9b3d85a602589c679a9983a -AGGREGATE_VERIFIER_TEE_IMAGE_HASH=0x0b70f5a605b7f0dd56facb70f4d0f37042d6a448cc3deefff7475fdd4ab549c1 -AGGREGATE_VERIFIER_ZK_RANGE_HASH=0x5fd09a2f4338ca7063bc37b02f9411645d0ef2784fe644cc71ab48ae64200beb -AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH=0x00a147f0c69da81e3d530cca91310f9605f980dc155726bb33fbde0e493a3836 -AGGREGATE_VERIFIER_BLOCK_INTERVAL=600 -AGGREGATE_VERIFIER_INTERMEDIATE_BLOCK_INTERVAL=30 +# AggregateVerifier proof program hashes. Every other constructor argument is read +# from the live implementation at deploy time, so these are the only values that +# change. +# +# TODO: derive from the Base node release these games prove against, +# https://github.com/base/base/tree/releases/v1.4.0 +AGGREGATE_VERIFIER_TEE_IMAGE_HASH= +AGGREGATE_VERIFIER_ZK_RANGE_HASH= +AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH= -# L2 chain geometry used to map activation timestamps onto block numbers. +# L2 chain geometry, used to map activation timestamps onto block numbers. The live +# implementation predates ScheduleConfig, so these cannot be copied from it. L2_GENESIS_BLOCK_NUMBER=0 L2_GENESIS_TIMESTAMP=1782348588 L2_BLOCK_TIME=2 - -# OptimismPortal2 constructor argument, matching the live proxy. -PROOF_MATURITY_DELAY_SECONDS=0 diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/README.md b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/README.md index 723d567c4..32aaf7ad5 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/README.md +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/README.md @@ -8,7 +8,8 @@ Upgrades Zeronet's L1 contracts for the Cobalt hardfork. One transaction from th makes five calls: 1. Upgrade and initialize a new `ProtocolVersions` registry, importing Zeronet's hardfork activation - schedule. This is the registry that dynamic upgrades read from. + schedule and scheduling Cobalt for 2026-09-16 18:00:00 UTC. This is the registry that dynamic + upgrades read from. 2. Upgrade `OptimismPortal2` to the implementation with `EthLockbox` removed. 3. Upgrade `SystemConfig` to the matching implementation, keeping Zeronet's patched `MAX_GAS_LIMIT` of 2,000,000,000. @@ -20,9 +21,6 @@ is already held by the portal, so removing the lockbox paths changes no balances games, the game count, the gas limit, and the pause state are all unchanged, and the transaction asserts each of these before and after. -Cobalt is registered in the schedule as unscheduled. Choosing its activation timestamp is a separate -future task. - ## Custody | Role | Address | diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltCoreImpls.s.sol b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltCoreImpls.s.sol index 783f4dc92..7236b19b4 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltCoreImpls.s.sol +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltCoreImpls.s.sol @@ -16,6 +16,8 @@ import {SystemConfig} from "@base-contracts/src/L1/SystemConfig.sol"; /// atomically sets the implementation and initializes it via ProxyAdmin.upgradeAndCall. contract DeployCobaltCoreImpls is Script { address internal immutable l1ProxyAdmin; + address internal immutable optimismPortal; + /// @dev Copied from the live portal so the redeploy cannot change the delay. uint256 internal immutable proofMaturityDelaySeconds; string internal addressesJson; @@ -26,12 +28,14 @@ contract DeployCobaltCoreImpls is Script { constructor() { l1ProxyAdmin = vm.envAddress("L1_PROXY_ADMIN"); - proofMaturityDelaySeconds = vm.envUint("PROOF_MATURITY_DELAY_SECONDS"); + optimismPortal = vm.envAddress("OPTIMISM_PORTAL"); + proofMaturityDelaySeconds = OptimismPortal2(payable(optimismPortal)).proofMaturityDelaySeconds(); addressesJson = vm.envString("ADDRESSES_JSON"); } function setUp() public view { require(l1ProxyAdmin.code.length != 0, "proxy admin not deployed"); + require(optimismPortal.code.length != 0, "optimism portal not deployed"); } function run() external { @@ -80,5 +84,12 @@ contract DeployCobaltCoreImpls is Script { vm.writeJson(vm.toString(address(systemConfigImpl)), addressesJson, ".systemConfigImpl"); vm.writeJson(vm.toString(address(disputeGameFactoryImpl)), addressesJson, ".disputeGameFactoryImpl"); vm.writeJson(vm.toString(address(protocolVersionsProxy)), addressesJson, ".protocolVersionsProxy"); + + // Recorded so `make verify-core` does not have to rebuild the encoding from + // values the script resolved itself. + vm.writeJson( + vm.toString(abi.encode(proofMaturityDelaySeconds)), addressesJson, ".optimismPortalImplConstructorArgs" + ); + vm.writeJson(vm.toString(abi.encode(l1ProxyAdmin)), addressesJson, ".protocolVersionsProxyConstructorArgs"); } } diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltProofImpls.s.sol b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltProofImpls.s.sol index 6d717770e..a76eb1148 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltProofImpls.s.sol +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltProofImpls.s.sol @@ -5,6 +5,7 @@ import {Script, console} from "forge-std/Script.sol"; import {IAnchorStateRegistry} from "interfaces/L1/proofs/IAnchorStateRegistry.sol"; import {IDelayedWETH} from "interfaces/L1/proofs/IDelayedWETH.sol"; +import {IDisputeGameFactory} from "interfaces/L1/proofs/IDisputeGameFactory.sol"; import {IProtocolVersions} from "interfaces/L1/IProtocolVersions.sol"; import {IVerifier} from "interfaces/L1/proofs/IVerifier.sol"; @@ -15,59 +16,80 @@ import {ProtocolVersions} from "@base-contracts/src/L1/ProtocolVersions.sol"; /// @notice Deploys the Cobalt implementations that base/contracts compiles at 999999 optimizer runs. /// @dev AggregateVerifier binds PROTOCOL_VERSIONS as a constructor immutable, so it must be /// redeployed for the registry to take effect and the proxy from DeployCobaltCoreImpls must -/// already exist. Every other constructor argument is carried over unchanged from the live -/// implementation, so the registry binding is the only behavioural change. Note that the -/// pinned commit reverts AggregateVerifier to 0.1.0, the same version the live implementation -/// reports, so version alone cannot distinguish the two. +/// already exist. Only the proof program hashes and the schedule config are supplied; every +/// other constructor argument is read back from the implementation currently registered in the +/// factory, so the redeploy cannot silently change them. Note that the pinned commit leaves +/// AggregateVerifier at 0.1.0, the same version the live implementation reports, so version +/// alone cannot distinguish the two. contract DeployCobaltProofImpls is Script { /// @notice Game type of the aggregate proof game. GameType internal constant AGGREGATE_VERIFIER_GAME_TYPE = GameType.wrap(621); - address internal immutable anchorStateRegistryProxy; - address internal immutable delayedWeth; - address internal immutable teeVerifier; - address internal immutable zkVerifier; - bytes32 internal immutable configHash; + // Supplied by the task. bytes32 internal immutable teeImageHash; bytes32 internal immutable zkRangeHash; bytes32 internal immutable zkAggregateHash; - uint256 internal immutable l2ChainId; - uint256 internal immutable blockInterval; - uint256 internal immutable intermediateBlockInterval; uint256 internal immutable l2GenesisBlockNumber; uint64 internal immutable l2GenesisTimestamp; uint64 internal immutable l2BlockTime; address internal immutable protocolVersionsProxy; + + // Copied from the live implementation registered for game type 621. + address internal immutable liveAggregateVerifier; + IAnchorStateRegistry internal immutable anchorStateRegistry; + IDelayedWETH internal immutable delayedWeth; + address internal immutable teeVerifier; + address internal immutable zkVerifier; + bytes32 internal immutable configHash; + uint256 internal immutable l2ChainId; + uint256 internal immutable blockInterval; + uint256 internal immutable intermediateBlockInterval; + string internal addressesJson; AggregateVerifier public aggregateVerifier; ProtocolVersions public protocolVersionsImpl; constructor() { - anchorStateRegistryProxy = vm.envAddress("ANCHOR_STATE_REGISTRY_PROXY"); - delayedWeth = vm.envAddress("MULTIPROOF_DELAYED_WETH_PROXY"); - teeVerifier = vm.envAddress("TEE_VERIFIER"); - zkVerifier = vm.envAddress("ZK_VERIFIER"); - configHash = vm.envBytes32("AGGREGATE_VERIFIER_CONFIG_HASH"); - teeImageHash = vm.envBytes32("AGGREGATE_VERIFIER_TEE_IMAGE_HASH"); - zkRangeHash = vm.envBytes32("AGGREGATE_VERIFIER_ZK_RANGE_HASH"); - zkAggregateHash = vm.envBytes32("AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH"); - l2ChainId = vm.envUint("L2_CHAIN_ID"); - blockInterval = vm.envUint("AGGREGATE_VERIFIER_BLOCK_INTERVAL"); - intermediateBlockInterval = vm.envUint("AGGREGATE_VERIFIER_INTERMEDIATE_BLOCK_INTERVAL"); + // envOr rather than envBytes32 so that the blank placeholders the task ships with + // surface as the actionable requires in setUp rather than an env parse failure. + teeImageHash = vm.envOr("AGGREGATE_VERIFIER_TEE_IMAGE_HASH", bytes32(0)); + zkRangeHash = vm.envOr("AGGREGATE_VERIFIER_ZK_RANGE_HASH", bytes32(0)); + zkAggregateHash = vm.envOr("AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH", bytes32(0)); l2GenesisBlockNumber = vm.envUint("L2_GENESIS_BLOCK_NUMBER"); l2GenesisTimestamp = uint64(vm.envUint("L2_GENESIS_TIMESTAMP")); l2BlockTime = uint64(vm.envUint("L2_BLOCK_TIME")); + addressesJson = vm.envString("ADDRESSES_JSON"); protocolVersionsProxy = vm.parseJsonAddress(vm.readFile(addressesJson), ".protocolVersionsProxy"); + + address factory = vm.envAddress("DISPUTE_GAME_FACTORY_PROXY"); + liveAggregateVerifier = address(IDisputeGameFactory(factory).gameImpls(AGGREGATE_VERIFIER_GAME_TYPE)); + + AggregateVerifier live = AggregateVerifier(liveAggregateVerifier); + anchorStateRegistry = live.anchorStateRegistry(); + delayedWeth = live.DELAYED_WETH(); + teeVerifier = address(live.TEE_VERIFIER()); + zkVerifier = address(live.ZK_VERIFIER()); + configHash = live.CONFIG_HASH(); + l2ChainId = live.L2_CHAIN_ID(); + blockInterval = live.BLOCK_INTERVAL(); + intermediateBlockInterval = live.INTERMEDIATE_BLOCK_INTERVAL(); } function setUp() public view { require(protocolVersionsProxy.code.length != 0, "protocol versions proxy not deployed"); - require(anchorStateRegistryProxy.code.length != 0, "anchor state registry not deployed"); - require(delayedWeth.code.length != 0, "delayed weth not deployed"); - require(teeVerifier.code.length != 0, "tee verifier not deployed"); - require(zkVerifier.code.length != 0, "zk verifier not deployed"); + require(liveAggregateVerifier != address(0), "no aggregate verifier registered for game type 621"); + require( + GameType.unwrap(AggregateVerifier(liveAggregateVerifier).gameType()) + == GameType.unwrap(AGGREGATE_VERIFIER_GAME_TYPE), + "live aggregate verifier game type mismatch" + ); + + // Left blank in the task config until the proof programs are released. + require(teeImageHash != bytes32(0), "AGGREGATE_VERIFIER_TEE_IMAGE_HASH not set"); + require(zkRangeHash != bytes32(0), "AGGREGATE_VERIFIER_ZK_RANGE_HASH not set"); + require(zkAggregateHash != bytes32(0), "AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH not set"); } function run() external { @@ -76,8 +98,8 @@ contract DeployCobaltProofImpls is Script { protocolVersionsImpl = new ProtocolVersions(); aggregateVerifier = new AggregateVerifier({ gameType_: AGGREGATE_VERIFIER_GAME_TYPE, - anchorStateRegistry_: IAnchorStateRegistry(anchorStateRegistryProxy), - delayedWETH: IDelayedWETH(payable(delayedWeth)), + anchorStateRegistry_: anchorStateRegistry, + delayedWETH: delayedWeth, teeVerifier: IVerifier(teeVerifier), zkVerifier: IVerifier(zkVerifier), teeImageHash: teeImageHash, @@ -114,25 +136,37 @@ contract DeployCobaltProofImpls is Script { keccak256(bytes(aggregateVerifier.version())) == keccak256(bytes("0.1.0")), "aggregate verifier version mismatch" ); - require(aggregateVerifier.BLOCK_INTERVAL() == blockInterval, "aggregate verifier block interval mismatch"); - require( - aggregateVerifier.INTERMEDIATE_BLOCK_INTERVAL() == intermediateBlockInterval, - "aggregate verifier intermediate block interval mismatch" - ); + require(address(aggregateVerifier) != liveAggregateVerifier, "aggregate verifier was not redeployed"); require( address(aggregateVerifier.PROTOCOL_VERSIONS()) == protocolVersionsProxy, "aggregate verifier protocol versions mismatch" ); - require(address(aggregateVerifier.TEE_VERIFIER()) == teeVerifier, "aggregate verifier tee verifier mismatch"); - require(address(aggregateVerifier.ZK_VERIFIER()) == zkVerifier, "aggregate verifier zk verifier mismatch"); - require(address(aggregateVerifier.DELAYED_WETH()) == delayedWeth, "aggregate verifier delayed weth mismatch"); - require(aggregateVerifier.CONFIG_HASH() == configHash, "aggregate verifier config hash mismatch"); + + // The new proof program hashes. require(aggregateVerifier.TEE_IMAGE_HASH() == teeImageHash, "aggregate verifier tee image hash mismatch"); require(aggregateVerifier.ZK_RANGE_HASH() == zkRangeHash, "aggregate verifier zk range hash mismatch"); require( aggregateVerifier.ZK_AGGREGATE_HASH() == zkAggregateHash, "aggregate verifier zk aggregate hash mismatch" ); + + // Everything carried over from the live implementation. + require( + address(aggregateVerifier.anchorStateRegistry()) == address(anchorStateRegistry), + "aggregate verifier anchor state registry mismatch" + ); + require( + address(aggregateVerifier.DELAYED_WETH()) == address(delayedWeth), + "aggregate verifier delayed weth mismatch" + ); + require(address(aggregateVerifier.TEE_VERIFIER()) == teeVerifier, "aggregate verifier tee verifier mismatch"); + require(address(aggregateVerifier.ZK_VERIFIER()) == zkVerifier, "aggregate verifier zk verifier mismatch"); + require(aggregateVerifier.CONFIG_HASH() == configHash, "aggregate verifier config hash mismatch"); require(aggregateVerifier.L2_CHAIN_ID() == l2ChainId, "aggregate verifier l2 chain id mismatch"); + require(aggregateVerifier.BLOCK_INTERVAL() == blockInterval, "aggregate verifier block interval mismatch"); + require( + aggregateVerifier.INTERMEDIATE_BLOCK_INTERVAL() == intermediateBlockInterval, + "aggregate verifier intermediate block interval mismatch" + ); } function _writeAddresses() internal { @@ -141,5 +175,33 @@ contract DeployCobaltProofImpls is Script { vm.writeJson(vm.toString(address(protocolVersionsImpl)), addressesJson, ".protocolVersionsImpl"); vm.writeJson(vm.toString(address(aggregateVerifier)), addressesJson, ".aggregateVerifier"); + + // Recorded so `make verify-proofs` does not have to rebuild the encoding from + // values the script read off chain. + vm.writeJson( + vm.toString( + abi.encode( + AGGREGATE_VERIFIER_GAME_TYPE, + anchorStateRegistry, + delayedWeth, + teeVerifier, + zkVerifier, + teeImageHash, + AggregateVerifier.ZkHashes({rangeHash: zkRangeHash, aggregateHash: zkAggregateHash}), + configHash, + l2ChainId, + blockInterval, + intermediateBlockInterval, + AggregateVerifier.ScheduleConfig({ + protocolVersions: IProtocolVersions(protocolVersionsProxy), + genesisBlockNumber: l2GenesisBlockNumber, + genesisTimestamp: l2GenesisTimestamp, + blockTime: l2BlockTime + }) + ) + ), + addressesJson, + ".aggregateVerifierConstructorArgs" + ); } } From 323dcc8cc6e3e75c83801b2d4d594d9419aa867c Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Mon, 14 Sep 2026 20:00:09 -0400 Subject: [PATCH 05/14] Address review: Cobalt at 16:00 UTC, min version v1.3.2, drop foundry profiles Move the Cobalt activation to 2026-09-16 16:00:00 UTC and lower the minimum protocol version to v1.3.2. Replace the two Cobalt foundry profiles with FOUNDRY_* overrides on the deploy targets, matching what the verify targets already do. Verified the overrides reproduce the profile builds byte for byte for OptimismPortal2 at 5000 runs and for ProtocolVersions and AggregateVerifier at 999999. Co-authored-by: Cursor --- active/evm/foundry.toml | 16 ---------------- .../evm/tasks/2026-09-14-cobalt-upgrade/Makefile | 12 ++++++++---- .../config/zeronet/.env | 16 ++++++++-------- .../config/zeronet/README.md | 2 +- 4 files changed, 17 insertions(+), 29 deletions(-) diff --git a/active/evm/foundry.toml b/active/evm/foundry.toml index 24bf074d8..b37e0b0eb 100644 --- a/active/evm/foundry.toml +++ b/active/evm/foundry.toml @@ -29,21 +29,5 @@ optimizer_runs = 999999 bytecode_hash = "none" evm_version = "cancun" -# Cobalt deploy profiles. These exist only because base/contracts pins per-contract -# optimizer runs via `compilation_restrictions` in its own foundry.toml, and matching -# its canonical build is what makes the deployed bytecode verifiable. Everything else, -# including remappings, is inherited from the default profile above. -[profile.cobalt-core-deploy] -optimizer = true -optimizer_runs = 5000 -bytecode_hash = "none" -evm_version = "cancun" - -[profile.cobalt-proofs-deploy] -optimizer = true -optimizer_runs = 999999 -bytecode_hash = "none" -evm_version = "cancun" - [lint] lint_on_build = false diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/Makefile b/active/evm/tasks/2026-09-14-cobalt-upgrade/Makefile index fe6d0d7cc..4dcd1ce71 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/Makefile +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/Makefile @@ -99,18 +99,22 @@ apply-patches: deploy: deploy-core deploy-proofs # base/contracts pins OptimismPortal2, SystemConfig, DisputeGameFactory and Proxy to -# 5000 optimizer runs, and ProtocolVersions and AggregateVerifier to 999999. The two -# deploy steps exist to reproduce those settings exactly. +# 5000 optimizer runs, and ProtocolVersions and AggregateVerifier to 999999, and builds +# both at cancun with no bytecode hash. Reproducing those settings is what makes the +# deployed bytecode verifiable, hence the two steps and the compiler overrides, which +# match the ones the verify targets below already use. +COBALT_BUILD = FOUNDRY_OPTIMIZER=true FOUNDRY_BYTECODE_HASH=none FOUNDRY_EVM_VERSION=cancun + .PHONY: deploy-core deploy-core: @test -f "$(ADDRESSES_JSON)" || echo '{}' > "$(ADDRESSES_JSON)" - cd $(PROJECT_DIR) && $(DEPLOY_ENV) FOUNDRY_PROFILE=cobalt-core-deploy \ + cd $(PROJECT_DIR) && $(DEPLOY_ENV) $(COBALT_BUILD) FOUNDRY_OPTIMIZER_RUNS=5000 \ $(MISE_EXEC) forge script --rpc-url $(L1_RPC_URL) $(DEPLOY_CORE_SCRIPT) \ --ledger --hd-paths $(LEDGER_HD_PATH) --broadcast -vvvv .PHONY: deploy-proofs deploy-proofs: - cd $(PROJECT_DIR) && $(DEPLOY_ENV) FOUNDRY_PROFILE=cobalt-proofs-deploy \ + cd $(PROJECT_DIR) && $(DEPLOY_ENV) $(COBALT_BUILD) FOUNDRY_OPTIMIZER_RUNS=999999 \ $(MISE_EXEC) forge script --rpc-url $(L1_RPC_URL) $(DEPLOY_PROOFS_SCRIPT) \ --ledger --hd-paths $(LEDGER_HD_PATH) --broadcast -vvvv diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env index 59ca8a38f..742ca8dfa 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env @@ -14,16 +14,16 @@ OLD_AGGREGATE_VERIFIER=0x7dd0f51C71DA5243174FA829c8cf3385B06833b0 # the same fork on every chain: # 0 genesis, 1 canyon, 2 delta, 3 ecotone, 4 fjord, 5 granite, 6 holocene, # 7 pectraBlobSchedule (unscheduled), 8 isthmus, 9 jovian, 10 azul, 11 beryl, -# 12 cobalt -> 1789581600, which is 2026-09-16 18:00:00 UTC: -# date -u -r 1789581600 -PROTOCOL_VERSIONS_INITIAL_SCHEDULE=1782348588,1782348588,1782348588,1782348588,1782348588,1782348588,1782348588,0,1782348588,1782348588,1782348588,1782348588,1789581600 +# 12 cobalt -> 1789574400, which is 2026-09-16 16:00:00 UTC: +# date -u -r 1789574400 +PROTOCOL_VERSIONS_INITIAL_SCHEDULE=1782348588,1782348588,1782348588,1782348588,1782348588,1782348588,1782348588,0,1782348588,1782348588,1782348588,1782348588,1789574400 -# Minimum protocol version, set to v1.4.0. The OP protocol version format packs the -# low 16 bytes as major || minor || patch || pre-release, four bytes each, so v1.4.0 -# is 0x00000001_00000004_00000000_00000000. Re-derive with: -# cast to-dec 0x00000001000000040000000000000000 +# Minimum protocol version, set to v1.3.2. The OP protocol version format packs the +# low 16 bytes as major || minor || patch || pre-release, four bytes each, so v1.3.2 +# is 0x00000001_00000003_00000002_00000000. Re-derive with: +# cast to-dec 0x00000001000000030000000200000000 # Must be non-zero and fit in 128 bits. -PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION=79228162588051313888382156800 +PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION=79228162569604569823262539776 PROTOCOL_VERSIONS_INCIDENT_RESPONDER=0x856611ed7e07d83243b15e93f6321f2df6865852 # AggregateVerifier proof program hashes. Every other constructor argument is read diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/README.md b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/README.md index 32aaf7ad5..7104cdc9a 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/README.md +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/README.md @@ -8,7 +8,7 @@ Upgrades Zeronet's L1 contracts for the Cobalt hardfork. One transaction from th makes five calls: 1. Upgrade and initialize a new `ProtocolVersions` registry, importing Zeronet's hardfork activation - schedule and scheduling Cobalt for 2026-09-16 18:00:00 UTC. This is the registry that dynamic + schedule and scheduling Cobalt for 2026-09-16 16:00:00 UTC. This is the registry that dynamic upgrades read from. 2. Upgrade `OptimismPortal2` to the implementation with `EthLockbox` removed. 3. Upgrade `SystemConfig` to the matching implementation, keeping Zeronet's patched From be9b8f28e6bfad670b7bb76ae496d54772a95fc8 Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Mon, 14 Sep 2026 21:27:43 -0400 Subject: [PATCH 06/14] Repin contracts to 33cad5ec and fill in the proof program hashes Set the three AggregateVerifier proof hashes and move to the semver bump commit on releases/v8.3.0. The repin changes OptimismPortal2 5.2.0 -> 6.0.0, DisputeGameFactory 1.4.0 -> 1.5.0 and AggregateVerifier 0.1.0 -> 0.2.0, so update the version assertions in all three scripts. Because version() now distinguishes old from new, add postchecks that read it back through the portal and factory proxies and off the registered verifier, and drop the FACILITATOR note that said version strings were useless here. Co-authored-by: Cursor --- .../2026-09-14-cobalt-upgrade/FACILITATOR.md | 10 ++++---- .../config/zeronet/.env | 11 ++++----- .../script/DeployCobaltCoreImpls.s.sol | 4 ++-- .../script/DeployCobaltProofImpls.s.sol | 2 +- .../script/ExecuteCobaltUpgrade.s.sol | 24 ++++++++++++++----- 5 files changed, 30 insertions(+), 21 deletions(-) diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md b/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md index 7bb88a8f4..f6675a177 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md @@ -119,11 +119,11 @@ there is nothing to reinitialize. ## Worth re-checking before signing -- **Version strings cannot tell old from new.** `OptimismPortal2` stays at `5.2.0`, - `DisputeGameFactory` at `1.4.0`, and `AggregateVerifier` at `0.1.0` across this change, so - `version()` is not a useful check for any of them. Confirm the implementation addresses instead. - For the verifier, the `PROTOCOL_VERSIONS()` getter is the real discriminator: the predecessor - predates the registry and reverts on that call. +- **Every changed contract bumps its version.** `OptimismPortal2` goes `5.2.0` -> `6.0.0`, + `DisputeGameFactory` `1.4.0` -> `1.5.0`, and `AggregateVerifier` `0.1.0` -> `0.2.0`, so `version()` + read through each proxy is a sound check that the upgrade landed. `SystemConfig` is the exception: + it has no source change, so it stays at `3.13.2+max-gas-limit-2000M` and only its implementation + address distinguishes the two. - **The Cobalt activation is scheduled, so the transaction is time-sensitive.** `ProtocolVersions.initialize` enforces one hour of notice on future timestamps, so it reverts if the upgrade lands within the hour before the configured Cobalt activation. Execute well before diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env index 742ca8dfa..4b4147aa8 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env @@ -1,5 +1,5 @@ # https://github.com/base/contracts/commits/releases/v8.3.0/ -BASE_CONTRACTS_COMMIT=0ae2de1133aa63b689f2d80834004b85c212bddc +BASE_CONTRACTS_COMMIT=33cad5ec188729868a64f0b810d763b5b3745b32 # Rollback anchors verified against Zeronet before task creation. OLD_OPTIMISM_PORTAL_IMPL=0xc1ad6d4e8da1403b9eb6a99491899577050f4863 @@ -29,12 +29,9 @@ PROTOCOL_VERSIONS_INCIDENT_RESPONDER=0x856611ed7e07d83243b15e93f6321f2df6865852 # AggregateVerifier proof program hashes. Every other constructor argument is read # from the live implementation at deploy time, so these are the only values that # change. -# -# TODO: derive from the Base node release these games prove against, -# https://github.com/base/base/tree/releases/v1.4.0 -AGGREGATE_VERIFIER_TEE_IMAGE_HASH= -AGGREGATE_VERIFIER_ZK_RANGE_HASH= -AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH= +AGGREGATE_VERIFIER_TEE_IMAGE_HASH=0xe8dc2300cf325b2527cbfa5e664a70acc40a9f2fc0617bd35cdfa61652a5fc30 +AGGREGATE_VERIFIER_ZK_RANGE_HASH=0x7713943c2c2412314b135c5606cdb3923a54f7555d91d9f31c2f64e34e16f2f4 +AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH=0x002663a1072dc1e1938e13d3b269fff88e843eb4ef76d6c6953dde4f5152973b # L2 chain geometry, used to map activation timestamps onto block numbers. The live # implementation predates ScheduleConfig, so these cannot be copied from it. diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltCoreImpls.s.sol b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltCoreImpls.s.sol index 7236b19b4..9534b65f7 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltCoreImpls.s.sol +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltCoreImpls.s.sol @@ -61,7 +61,7 @@ contract DeployCobaltCoreImpls is Script { require( optimismPortalImpl.proofMaturityDelaySeconds() == proofMaturityDelaySeconds, "portal proof delay mismatch" ); - require(keccak256(bytes(optimismPortalImpl.version())) == keccak256(bytes("5.2.0")), "portal version mismatch"); + require(keccak256(bytes(optimismPortalImpl.version())) == keccak256(bytes("6.0.0")), "portal version mismatch"); // Zeronet runs a patched SystemConfig that raises MAX_GAS_LIMIT to 2e9. The patch carries a // build-suffixed semver so a stock build cannot be deployed here by mistake. require( @@ -69,7 +69,7 @@ contract DeployCobaltCoreImpls is Script { "system config patch not applied" ); require( - keccak256(bytes(disputeGameFactoryImpl.version())) == keccak256(bytes("1.4.0")), + keccak256(bytes(disputeGameFactoryImpl.version())) == keccak256(bytes("1.5.0")), "dispute game factory version mismatch" ); } diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltProofImpls.s.sol b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltProofImpls.s.sol index a76eb1148..4bcbc0615 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltProofImpls.s.sol +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltProofImpls.s.sol @@ -133,7 +133,7 @@ contract DeployCobaltProofImpls is Script { require(protocolVersionsImpl.initVersion() == 1, "protocol versions init version mismatch"); require( - keccak256(bytes(aggregateVerifier.version())) == keccak256(bytes("0.1.0")), + keccak256(bytes(aggregateVerifier.version())) == keccak256(bytes("0.2.0")), "aggregate verifier version mismatch" ); require(address(aggregateVerifier) != liveAggregateVerifier, "aggregate verifier was not redeployed"); diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/script/ExecuteCobaltUpgrade.s.sol b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/ExecuteCobaltUpgrade.s.sol index 9948128b2..177f28c21 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/script/ExecuteCobaltUpgrade.s.sol +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/ExecuteCobaltUpgrade.s.sol @@ -228,7 +228,7 @@ contract ExecuteCobaltUpgrade is MultisigScript { "protocol versions implementation version mismatch" ); require( - keccak256(bytes(IVersioned(newOptimismPortalImpl).version())) == keccak256(bytes("5.2.0")), + keccak256(bytes(IVersioned(newOptimismPortalImpl).version())) == keccak256(bytes("6.0.0")), "portal implementation version mismatch" ); require( @@ -237,16 +237,13 @@ contract ExecuteCobaltUpgrade is MultisigScript { "system config implementation is not the patched build" ); require( - keccak256(bytes(IVersioned(newDisputeGameFactoryImpl).version())) == keccak256(bytes("1.4.0")), + keccak256(bytes(IVersioned(newDisputeGameFactoryImpl).version())) == keccak256(bytes("1.5.0")), "dispute game factory implementation version mismatch" ); require( - keccak256(bytes(IAggregateVerifier(newAggregateVerifier).version())) == keccak256(bytes("0.1.0")), + keccak256(bytes(IAggregateVerifier(newAggregateVerifier).version())) == keccak256(bytes("0.2.0")), "aggregate verifier version mismatch" ); - // AggregateVerifier is back at 0.1.0, the same version the live implementation reports, so - // the registry binding is what actually distinguishes the two. The predecessor predates - // ProtocolVersions and has no such getter. require(newAggregateVerifier != oldAggregateVerifier, "aggregate verifier was not redeployed"); require( IAggregateVerifier(newAggregateVerifier).PROTOCOL_VERSIONS() == protocolVersionsProxy, @@ -269,6 +266,17 @@ contract ExecuteCobaltUpgrade is MultisigScript { "protocol versions implementation not updated" ); + // Each changed contract bumps its semver, so reading version() back through the proxy + // confirms it is serving the new code rather than just pointing at it. + require( + keccak256(bytes(IVersioned(optimismPortal).version())) == keccak256(bytes("6.0.0")), + "portal not serving the new implementation" + ); + require( + keccak256(bytes(IDisputeGameFactory(disputeGameFactory).version())) == keccak256(bytes("1.5.0")), + "dispute game factory not serving the new implementation" + ); + // Dynamic upgrades: the registry is live and committed to the imported schedule. IProtocolVersions registry = IProtocolVersions(protocolVersionsProxy); require(keccak256(bytes(registry.version())) == keccak256(bytes("1.0.0")), "registry version mismatch"); @@ -290,6 +298,10 @@ contract ExecuteCobaltUpgrade is MultisigScript { IDisputeGameFactory(disputeGameFactory).gameImpls(AGGREGATE_VERIFIER_GAME_TYPE) == newAggregateVerifier, "aggregate verifier not registered" ); + require( + keccak256(bytes(IAggregateVerifier(newAggregateVerifier).version())) == keccak256(bytes("0.2.0")), + "registered aggregate verifier is not the new build" + ); require(IDisputeGameFactory(disputeGameFactory).gameCount() == gameCountBefore, "game count changed"); // EthLockbox removal must not move ETH, disturb the now-spacer slot, or change pause state. From 3685850f9b9d36da88768a25ca78ce8fb38a0cfb Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Mon, 14 Sep 2026 22:05:14 -0400 Subject: [PATCH 07/14] Repin to 385f21a4 to pick up the SystemConfig semver bump base/contracts#441 landed the SystemConfig bump on releases/v8.3.0, so SystemConfig now goes 3.13.2 -> 3.14.0 and the patched build is 3.14.0+max-gas-limit-2000M. Regenerate max-gas-limit.patch against the new baseline rather than editing the hunks by hand, and update the patched-version assertions in DeployCobaltCoreImpls and in the ExecuteCobaltUpgrade pre- and postchecks. SystemConfig is no longer the contract where only the implementation address distinguishes old from new, so drop that caveat from FACILITATOR.md; all four upgraded contracts now bump their version. Co-authored-by: Cursor --- .../tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md | 11 +++++------ .../2026-09-14-cobalt-upgrade/config/zeronet/.env | 2 +- .../patch/max-gas-limit.patch | 10 +++++----- .../script/DeployCobaltCoreImpls.s.sol | 2 +- .../script/ExecuteCobaltUpgrade.s.sol | 4 ++-- 5 files changed, 14 insertions(+), 15 deletions(-) diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md b/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md index f6675a177..7635413b0 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md @@ -23,10 +23,10 @@ dependencies that building those sources requires, and applies `patch/max-gas-li The patch matters. Zeronet runs a `SystemConfig` that raises `MAX_GAS_LIMIT` to 2,000,000,000, and Cobalt modifies `SystemConfig`. Deploying a stock build would quietly drop the chain back to -500,000,000. The patch re-applies the raise and tags the semver `3.13.2+max-gas-limit-2000M`, and +500,000,000. The patch re-applies the raise and tags the semver `3.14.0+max-gas-limit-2000M`, and the deploy script refuses to proceed if that version string is missing. On a network that does not run the patched build, drop `apply-patches` from the `deps` prerequisites and relax the version -assertions in `DeployCobaltCoreImpls` and `ExecuteCobaltUpgrade` to the stock `3.13.2`. +assertions in `DeployCobaltCoreImpls` and `ExecuteCobaltUpgrade` to the stock `3.14.0`. ## 2. Review the network config @@ -120,10 +120,9 @@ there is nothing to reinitialize. ## Worth re-checking before signing - **Every changed contract bumps its version.** `OptimismPortal2` goes `5.2.0` -> `6.0.0`, - `DisputeGameFactory` `1.4.0` -> `1.5.0`, and `AggregateVerifier` `0.1.0` -> `0.2.0`, so `version()` - read through each proxy is a sound check that the upgrade landed. `SystemConfig` is the exception: - it has no source change, so it stays at `3.13.2+max-gas-limit-2000M` and only its implementation - address distinguishes the two. + `DisputeGameFactory` `1.4.0` -> `1.5.0`, `AggregateVerifier` `0.1.0` -> `0.2.0`, and `SystemConfig` + `3.13.2+max-gas-limit-2000M` -> `3.14.0+max-gas-limit-2000M`, so `version()` read through each + proxy is a sound check that the upgrade landed. - **The Cobalt activation is scheduled, so the transaction is time-sensitive.** `ProtocolVersions.initialize` enforces one hour of notice on future timestamps, so it reverts if the upgrade lands within the hour before the configured Cobalt activation. Execute well before diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env index 4b4147aa8..23fb419c4 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env @@ -1,5 +1,5 @@ # https://github.com/base/contracts/commits/releases/v8.3.0/ -BASE_CONTRACTS_COMMIT=33cad5ec188729868a64f0b810d763b5b3745b32 +BASE_CONTRACTS_COMMIT=385f21a41f277d287db92fffe88dca41299162ea # Rollback anchors verified against Zeronet before task creation. OLD_OPTIMISM_PORTAL_IMPL=0xc1ad6d4e8da1403b9eb6a99491899577050f4863 diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/patch/max-gas-limit.patch b/active/evm/tasks/2026-09-14-cobalt-upgrade/patch/max-gas-limit.patch index 919d42e36..93cf650aa 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/patch/max-gas-limit.patch +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/patch/max-gas-limit.patch @@ -1,5 +1,5 @@ diff --git a/src/L1/SystemConfig.sol b/src/L1/SystemConfig.sol -index 51c975d..f9961ca 100644 +index 4f2d0bf..2e36de3 100644 --- a/src/L1/SystemConfig.sol +++ b/src/L1/SystemConfig.sol @@ -97,7 +97,7 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl @@ -15,11 +15,11 @@ index 51c975d..f9961ca 100644 error SystemConfig_InvalidFeatureState(); /// @notice Semantic version. -- /// @custom:semver 3.13.2 -+ /// @custom:semver 3.13.2+max-gas-limit-2000M +- /// @custom:semver 3.14.0 ++ /// @custom:semver 3.14.0+max-gas-limit-2000M function version() public pure virtual returns (string memory) { -- return "3.13.2"; -+ return "3.13.2+max-gas-limit-2000M"; +- return "3.14.0"; ++ return "3.14.0+max-gas-limit-2000M"; } /// @notice Constructs the SystemConfig contract. diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltCoreImpls.s.sol b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltCoreImpls.s.sol index 9534b65f7..224b74f85 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltCoreImpls.s.sol +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/DeployCobaltCoreImpls.s.sol @@ -65,7 +65,7 @@ contract DeployCobaltCoreImpls is Script { // Zeronet runs a patched SystemConfig that raises MAX_GAS_LIMIT to 2e9. The patch carries a // build-suffixed semver so a stock build cannot be deployed here by mistake. require( - keccak256(bytes(systemConfigImpl.version())) == keccak256(bytes("3.13.2+max-gas-limit-2000M")), + keccak256(bytes(systemConfigImpl.version())) == keccak256(bytes("3.14.0+max-gas-limit-2000M")), "system config patch not applied" ); require( diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/script/ExecuteCobaltUpgrade.s.sol b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/ExecuteCobaltUpgrade.s.sol index 177f28c21..8743385a8 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/script/ExecuteCobaltUpgrade.s.sol +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/script/ExecuteCobaltUpgrade.s.sol @@ -233,7 +233,7 @@ contract ExecuteCobaltUpgrade is MultisigScript { ); require( keccak256(bytes(IVersioned(newSystemConfigImpl).version())) - == keccak256(bytes("3.13.2+max-gas-limit-2000M")), + == keccak256(bytes("3.14.0+max-gas-limit-2000M")), "system config implementation is not the patched build" ); require( @@ -310,7 +310,7 @@ contract ExecuteCobaltUpgrade is MultisigScript { require(ISystemConfig(systemConfig).paused() == pausedBefore, "pause state changed"); require(ISystemConfig(systemConfig).gasLimit() == gasLimitBefore, "gas limit changed"); require( - keccak256(bytes(ISystemConfig(systemConfig).version())) == keccak256(bytes("3.13.2+max-gas-limit-2000M")), + keccak256(bytes(ISystemConfig(systemConfig).version())) == keccak256(bytes("3.14.0+max-gas-limit-2000M")), "system config lost the max gas limit patch" ); } From a4e107f70bcc8c80827ef26ef9bae74ef788faa4 Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Tue, 15 Sep 2026 07:46:14 -0400 Subject: [PATCH 08/14] deploy contracts --- .../config/zeronet/addresses.json | 12 +- .../560048/run-1789472725854.json | 212 ++++++++++++++++++ .../560048/run-1789472750703.json | 108 +++++++++ 3 files changed, 331 insertions(+), 1 deletion(-) create mode 100644 active/evm/tasks/2026-09-14-cobalt-upgrade/records/DeployCobaltCoreImpls.s.sol/560048/run-1789472725854.json create mode 100644 active/evm/tasks/2026-09-14-cobalt-upgrade/records/DeployCobaltProofImpls.s.sol/560048/run-1789472750703.json diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/addresses.json b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/addresses.json index 0967ef424..66ec3a682 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/addresses.json +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/addresses.json @@ -1 +1,11 @@ -{} +{ + "optimismPortalImpl": "0xb4aC39aadC3130fEf3F348ECe8D033540dF12089", + "systemConfigImpl": "0x210303565CBf0b8c0d2837523816f815F02ad5eB", + "disputeGameFactoryImpl": "0xBeE0c6DD082D7A483Da4bD6e56C7e5292BDa7Ce8", + "protocolVersionsProxy": "0x30e172aaC675c9fe5A64792F92C9fD4d3E7cA9Da", + "optimismPortalImplConstructorArgs": "0x0000000000000000000000000000000000000000000000000000000000000000", + "protocolVersionsProxyConstructorArgs": "0x000000000000000000000000f2d2c097be80fb87844b7e259ef67efb98b26f87", + "protocolVersionsImpl": "0x30ADFDAB722D36B26f12f562d7cAdF4Cd8831c58", + "aggregateVerifier": "0x2504B1c3B78B2711e24eadF7eA077b0cA1b91859", + "aggregateVerifierConstructorArgs": "0x000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000bfb20170b82c474b136bc5a062aca47a3cb8cf680000000000000000000000005af90fde02b46e202f6232b3ede25b3f602ac67300000000000000000000000042fa446d95a5b61a7be02949042954a60315fb0f0000000000000000000000005b997cd8fafa026882aec7d0558c9cc47221f84ee8dc2300cf325b2527cbfa5e664a70acc40a9f2fc0617bd35cdfa61652a5fc307713943c2c2412314b135c5606cdb3923a54f7555d91d9f31c2f64e34e16f2f4002663a1072dc1e1938e13d3b269fff88e843eb4ef76d6c6953dde4f5152973bd14ddabfc0ad1dd737d6e5917cf271fd479bd539c9b3d85a602589c679a9983a00000000000000000000000000000000000000000000000000000000000ba5e00000000000000000000000000000000000000000000000000000000000000258000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000030e172aac675c9fe5a64792f92c9fd4d3e7ca9da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006a3c7b2c0000000000000000000000000000000000000000000000000000000000000002" +} \ No newline at end of file diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/records/DeployCobaltCoreImpls.s.sol/560048/run-1789472725854.json b/active/evm/tasks/2026-09-14-cobalt-upgrade/records/DeployCobaltCoreImpls.s.sol/560048/run-1789472725854.json new file mode 100644 index 000000000..0361b6307 --- /dev/null +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/records/DeployCobaltCoreImpls.s.sol/560048/run-1789472725854.json @@ -0,0 +1,212 @@ +{ + "transactions": [ + { + "hash": "0xfdd99b31e9c74b3a795cdb33f78775ecdeeba4708f5fba20b1124f9504a56de2", + "transactionType": "CREATE", + "contractName": "OptimismPortal2", + "contractAddress": "0xb4ac39aadc3130fef3f348ece8d033540df12089", + "function": null, + "arguments": [ + "0" + ], + "transaction": { + "from": "0x8c1a617bdb47342f9c17ac8750e0b070c372c721", + "gas": "0x53f5ba", + "value": "0x0", + "input": "0x60c06040523480156200001157600080fd5b5060405162004d0f38038062004d0f833981016040819052620000349162000111565b600360805260a0819052620000486200004f565b506200012b565b600054610100900460ff1615620000bc5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156200010f576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012457600080fd5b5051919050565b60805160a051614bb06200015f600039600081816105d10152611a0f0152600081816102580152610ee50152614bb06000f3fe6080604052600436106101c65760003560e01c80635c975abb116100f7578063a35d99df11610095578063cff0ab9611610064578063cff0ab96146105f5578063dad544e014610696578063e9e05c42146106ab578063f2b4e617146106be57600080fd5b8063a35d99df146104f5578063a3860f4814610515578063bb2c727e14610535578063bf653a5c146105c257600080fd5b80638c3152e9116100d15780638c3152e914610470578063952b2797146104905780639bf62d82146104a5578063a14238e7146104c557600080fd5b80635c975abb1461043b57806371c1566e146104505780638b4c40b0146101eb57600080fd5b806345884d32116101645780634fd0434c1161013e5780634fd0434c14610366578063513747ab1461039457806354fd4d50146103cf5780635c0cba331461041b57600080fd5b806345884d32146102f6578063485cc955146103265780634870496f1461034657600080fd5b80633c9f397c116101a05780633c9f397c146102825780633e47158c146102ac57806343ca1c50146102c1578063452a9320146102e157600080fd5b806333d7e2bd146101f257806335e80ab31461022f57806338d38c971461024457600080fd5b366101ed576101eb3334620186a06000604051806020016040528060008152506106d3565b005b600080fd5b3480156101fe57600080fd5b50603754610212906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561023b57600080fd5b506102126108b3565b34801561025057600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610226565b34801561028e57600080fd5b5061029761093f565b60405163ffffffff9091168152602001610226565b3480156102b857600080fd5b506102126109c6565b3480156102cd57600080fd5b506101eb6102dc366004614123565b610baa565b3480156102ed57600080fd5b50610212610df2565b34801561030257600080fd5b50610316610311366004614175565b610e55565b6040519015158152602001610226565b34801561033257600080fd5b506101eb610341366004614192565b610ee3565b34801561035257600080fd5b506101eb6103613660046141c0565b6110b9565b34801561037257600080fd5b5061037b611784565b60405167ffffffffffffffff9091168152602001610226565b3480156103a057600080fd5b506103c16103af36600461429c565b6000908152603c602052604090205490565b604051908152602001610226565b3480156103db57600080fd5b50604080518082018252600581527f362e302e3000000000000000000000000000000000000000000000000000000060208201529051610226919061430d565b34801561042757600080fd5b50603e54610212906001600160a01b031681565b34801561044757600080fd5b5061031661180b565b34801561045c57600080fd5b506101eb61046b366004614320565b611892565b34801561047c57600080fd5b506101eb61048b366004614345565b611b3e565b34801561049c57600080fd5b506103c1611b4b565b3480156104b157600080fd5b50603254610212906001600160a01b031681565b3480156104d157600080fd5b506103166104e036600461429c565b60336020526000908152604090205460ff1681565b34801561050157600080fd5b5061037b610510366004614398565b611bd2565b34801561052157600080fd5b506102126105303660046143b5565b611beb565b34801561054157600080fd5b5061059a610550366004614320565b60396020908152600092835260408084209091529082529020546001600160a01b0381169074010000000000000000000000000000000000000000900467ffffffffffffffff1682565b604080516001600160a01b03909316835267ffffffffffffffff909116602083015201610226565b3480156105ce57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103c1565b34801561060157600080fd5b5060015461065d906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610226565b3480156106a257600080fd5b50610212611c23565b6101eb6106b93660046143e5565b6106d3565b3480156106ca57600080fd5b50610212611c6a565b8260005a90506106e1611ccd565b1561071e57341561071e576040517fbd58e0a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83801561073357506001600160a01b03871615155b1561076a576040517fc5defbad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107748351611bd2565b67ffffffffffffffff168567ffffffffffffffff1610156107c1576040517f70c8bdbd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0835111156107ff576040517f5aa3bac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33610808611d4f565b610825575033731111000000000000000000000000000000001111015b60003488888888604051602001610840959493929190614464565b60405160208183030381529060405290506000896001600160a01b0316836001600160a01b03167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3284604051610896919061430d565b60405180910390a450506108aa8282611d8c565b50505050505050565b603754604080517f35e80ab300000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916335e80ab39160048083019260209291908290030181865afa158015610916573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093a91906144c9565b905090565b603e54604080517f3c9f397c00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691633c9f397c9160048083019260209291908290030181865afa1580156109a2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093a91906144f8565b6000806109f17fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b90506001600160a01b03811615610a0757919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000815250516002610a4a9190614544565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790610aa5906060015b604051602081830303815290604052805190602001205490565b14610adc576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051306020820152600191810191909152600090610afe90606001610a8b565b90506001600160a01b03811615610b7857806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7191906144c9565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bb2612063565b610bba611ccd565b15610bfb57606082015115610bfb576040517fbd58e0a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6032546001600160a01b031661dead14610c41576040517fdfeaaeb800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5782604001516001600160a01b0316301490565b15610c8e576040517fc5defbad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c99836120a2565b9050610ca58183611892565b600081815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590850151603280546001600160a01b039092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558401516080850151606086015160a0870151610d3a939291906120ef565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90610d9f90841515815260200190565b60405180910390a280158015610db55750326001145b15610dec576040517fab58103600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b603754604080517f452a932000000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163452a93209160048083019260209291908290030181865afa158015610916573d6000803e3d6000fd5b603e546040517f45884d320000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009216906345884d3290602401602060405180830381865afa158015610eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edd9190614563565b92915050565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610f23575060005460ff8083169116105b610f9a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610fd361214d565b603780546001600160a01b038086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603e805485841692169190911790556032541661104e57603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b6110566121b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b6110c1612063565b6110d785604001516001600160a01b0316301490565b1561110e576040517fc5defbad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611116611ccd565b1561115757606085015115611157576040517fbd58e0a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611161611c6a565b6001600160a01b031663bb8aa1fc866040518263ffffffff1660e01b815260040161118e91815260200190565b606060405180830381865afa1580156111ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cf9190614580565b603e546040517f496b9c160000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301529295509116925063496b9c169150602401602060405180830381865afa158015611236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125a9190614563565b611290576040517ff395240e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603e546040517f04e50fed0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152909116906304e50fed90602401602060405180830381865afa1580156112f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113179190614563565b61134d576040517fe29927ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001816001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561138d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b191906145fc565b60028111156113c2576113c26145cd565b036113f9576040517fe29927ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61146b816001600160a01b031663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561143a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145e919061461d565b67ffffffffffffffff1690565b67ffffffffffffffff1642116114ad576040517fb4caa4e500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114c46114bf3686900386018661463a565b6122ad565b61152c826001600160a01b031663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611505573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152991906146a0565b90565b14611563576040517f426149af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061156e876120a2565b9050600081600060405160200161158f929190918252602082015260400190565b60408051601f1981840301815282825280516020918201209083018190529250611606910160408051601f19818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152906115fc87896146b9565b89604001356122ec565b1515600003611641576040517f2e57ef3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820182526001600160a01b03808616825267ffffffffffffffff42811660208085019182526000888152603982528681203380835290835287822096518754945190951674010000000000000000000000000000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009094169486169490941792909217909455868152603c845284812080546001810182559082528482200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169092179091558b840151928c01519351928216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f6291a4604051339083907f798f9f13695f8f045aa5f80ed8efebb695f3c7fe65da381969f2f28bf3c60b9790600090a35050505050505050565b603e54604080517f4086d18300000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691634086d1839160048083019260209291908290030181865afa1580156117e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093a919061461d565b603754604080517f5c975abb00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635c975abb9160048083019260209291908290030181865afa15801561186e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093a9190614563565b60008281526039602090815260408083206001600160a01b0385811685529083528184208251808401845290549182168082527401000000000000000000000000000000000000000090920467ffffffffffffffff1681850152868552603390935292205490919060ff1615611934576040517f730a107400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816020015167ffffffffffffffff1660000361197c576040517fcca6afda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119bd816001600160a01b031663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561143a573d6000803e3d6000fd5b67ffffffffffffffff16826020015167ffffffffffffffff1611611a0d576040517fb4caa4e500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000826020015167ffffffffffffffff1642611a48919061473d565b11611a7f576040517fd9bc01be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603e546040517f6c4f44670000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015290911690636c4f446790602401602060405180830381865afa158015611ae2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b069190614563565b610dec576040517f332a57f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611b488133610baa565b50565b603e54604080517f952b279700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163952b27979160048083019260209291908290030181865afa158015611bae573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093a91906146a0565b6000611bdf826028614754565b610edd90615208614784565b603c6020528160005260406000208181548110611c0757600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000611c2d6109c6565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610916573d6000803e3d6000fd5b603e54604080517ff2b4e61700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163f2b4e6179160048083019260209291908290030181865afa158015610916573d6000803e3d6000fd5b6037546040517f47af267b0000000000000000000000000000000000000000000000000000000081527f435553544f4d5f4741535f544f4b454e0000000000000000000000000000000060048201526000916001600160a01b0316906347af267b90602401602060405180830381865afa15801561186e573d6000803e3d6000fd5b6000323303611d5e5750600190565b333b601703611d8657604051602081016040526020600082333c5160e81c62ef010014905090565b50600090565b600154600090611dc2907801000000000000000000000000000000000000000000000000900467ffffffffffffffff164361473d565b90506000611dce612310565b90506000816020015160ff16826000015163ffffffff16611def91906147df565b90508215611f2657600154600090611e26908390700100000000000000000000000000000000900467ffffffffffffffff16614829565b90506000836040015160ff1683611e3d919061489d565b600154611e5d9084906fffffffffffffffffffffffffffffffff1661489d565b611e6791906147df565b600154909150600090611eb890611e919084906fffffffffffffffffffffffffffffffff16614959565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166123c9565b90506001861115611ee757611ee4611e9182876040015160ff1660018a611edf919061473d565b6123e8565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090611f59908490700100000000000000000000000000000000900467ffffffffffffffff16614784565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611fe6576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612012906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816614544565b9050600061202448633b9aca0061243d565b61202e90836149cd565b905060005a61203d908861473d565b90508082111561205957612059612054828461473d565b612454565b5050505050505050565b61206b61180b565b15611b3c576040517fb9c3c2ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516020808301516040808501516060860151608087015160a088015193516000976120d29790969591016149e1565b604051602081830303815290604052805190602001209050919050565b60008060006120ff866000612482565b905080612135576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b336121566109c6565b6001600160a01b03161415801561217d575033612171611c23565b6001600160a01b031614155b15611b3c576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff166122315760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f91565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600003611b3c5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b600081600001518260200151836040015184606001516040516020016120d2949392919093845260208401929092526040830152606082015260800190565b6000806122f8866124a0565b9050612306818686866124d2565b9695505050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152603754604080517fcc731b0200000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163cc731b029160048083019260c09291908290030181865afa1580156123a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edd9190614a41565b60006123de6123d88585612502565b83612512565b90505b9392505050565b6000670de0b6b3a764000061242961240085836147df565b61241290670de0b6b3a7640000614829565b61242485670de0b6b3a764000061489d565b612521565b612433908661489d565b6123de91906147df565b60008183101561244d57816123e1565b5090919050565b6000805a90505b825a612467908361473d565b101561247d5761247682614afd565b915061245b565b505050565b600080603f83619c4001026040850201603f5a021015949350505050565b606081805190602001206040516020016124bc91815260200190565b6040516020818303038152906040529050919050565b60006124f9846124e3878686612552565b8051602091820120825192909101919091201490565b95945050505050565b60008183121561244d57816123e1565b600081831261244d57816123e1565b60006123e1670de0b6b3a76400008361253986612e64565b612543919061489d565b61254d91906147df565b61308e565b606060008451116125a55760405162461bcd60e51b815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610f91565b60006125b0846132b3565b905060006125bd8661339f565b90506000846040516020016125d491815260200190565b60405160208183030381529060405290506000805b8451811015612df557600085828151811061260657612606614b17565b6020026020010151905084518311156126875760405162461bcd60e51b815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610f91565b8260000361272657805180516020918201206040516126d5926126af92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b6127215760405162461bcd60e51b815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610f91565b612849565b8051516020116127c25780518051602091820120604051612750926126af92910190815260200190565b6127215760405162461bcd60e51b815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610f91565b8051845160208087019190912082519190920120146128495760405162461bcd60e51b815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610f91565b61285560106001614b46565b816020015151036129fd57845183036129955761288f816020015160108151811061288257612882614b17565b6020026020010151613402565b965060008751116129085760405162461bcd60e51b815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610f91565b60018651612916919061473d565b821461298a5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610f91565b5050505050506123e1565b60008584815181106129a9576129a9614b17565b602001015160f81c60f81b60f81c9050600082602001518260ff16815181106129d4576129d4614b17565b602002602001015190506129e7816134b6565b95506129f4600186614b46565b94505050612de2565b600281602001515103612d74576000612a15826134db565b9050600081600081518110612a2c57612a2c614b17565b016020015160f81c90506000612a43600283614b5e565b612a4e906002614b80565b90506000612a5f848360ff166134ff565b90506000612a6d8a896134ff565b90506000612a7b8383613535565b905080835114612af35760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610f91565b60ff851660021480612b08575060ff85166003145b15612ca95780825114612b835760405162461bcd60e51b815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610f91565b612b9d876020015160018151811061288257612882614b17565b9c5060008d5111612c165760405162461bcd60e51b815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610f91565b60018c51612c24919061473d565b8814612c985760405162461bcd60e51b815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610f91565b5050505050505050505050506123e1565b60ff85161580612cbc575060ff85166001145b15612cfb57612ce88760200151600181518110612cdb57612cdb614b17565b60200260200101516134b6565b9950612cf4818a614b46565b9850612d69565b60405162461bcd60e51b815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610f91565b505050505050612de2565b60405162461bcd60e51b815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610f91565b5080612ded81614afd565b9150506125e9565b5060405162461bcd60e51b815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610f91565b6000808213612eb55760405162461bcd60e51b815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610f91565b60006060612ec2846135e9565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136130bf57506000919050565b680755bf798b4a1bf1e582126131175760405162461bcd60e51b815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610f91565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff8111156132d1576132d1613f8f565b60405190808252806020026020018201604052801561331657816020015b60408051808201909152606080825260208201528152602001906001900390816132ef5790505b50915060005b8181101561339857604051806040016040528085838151811061334157613341614b17565b6020026020010151815260200161337086848151811061336357613363614b17565b60200260200101516136a5565b81525083828151811061338557613385614b17565b602090810291909101015260010161331c565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b838110156133f7578060011b82018184015160001a8060041c8253600f8116600183015350506001016133c9565b509295945050505050565b60606000806000613412856136b8565b91945092509050600081600181111561342d5761342d6145cd565b14613464576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61346e8284614b46565b8551146134a7576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124f985602001518484613b56565b606060208260000151106134d2576134cd82613402565b610edd565b610edd82613bea565b6060610edd6134fa836020015160008151811061288257612882614b17565b61339f565b60608251821061351e5750604080516020810190915260008152610edd565b6123e18383848651613530919061473d565b613c00565b600080825184511061354857825161354b565b83515b90505b80821080156135d2575082828151811061356a5761356a614b17565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168483815181106135a9576135a9614b17565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156135e25781600101915061354e565b5092915050565b600080821161363a5760405162461bcd60e51b815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610f91565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060610edd6136b383613d6c565b613dd9565b600080600083600001516000036136fb576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111613720576000600160009450945094505050613b4f565b60b7811161383657600061373560808361473d565b905080876000015111613774576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821480156137ec57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15613823576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250613b4f915050565b60bf811161399457600061384b60b78361473d565b90508087600001511161388a576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036138ec576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111613934576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61393e8184614b46565b895111613977576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613982836001614b46565b9750955060009450613b4f9350505050565b60f781116139f95760006139a960c08361473d565b9050808760000151116139e8576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250613b4f915050565b6000613a0660f78361473d565b905080876000015111613a45576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613aa7576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111613aef576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613af98184614b46565b895111613b32576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b3d836001614b46565b9750955060019450613b4f9350505050565b9193909250565b60608167ffffffffffffffff811115613b7157613b71613f8f565b6040519080825280601f01601f191660200182016040528015613b9b576020820181803683370190505b50905081156123e1576000613bb08486614b46565b90506020820160005b84811015613bd1578281015182820152602001613bb9565b84811115613be0576000858301525b5050509392505050565b6060610edd826020015160008460000151613b56565b60608182601f011015613c555760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610f91565b828284011015613ca75760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610f91565b81830184511015613cfa5760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610f91565b606082158015613d195760405191506000825260208201604052613d63565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613d52578051835260209283019201613d3a565b5050858452601f01601f1916604052505b50949350505050565b60408051808201909152600080825260208201528151600003613dbb576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b60606000806000613de9856136b8565b919450925090506001816001811115613e0457613e046145cd565b14613e3b576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8451613e478385614b46565b14613e7e576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613e955790505093506000835b8651811015613f8357600080613f086040518060400160405280858c60000151613eec919061473d565b8152602001858c60200151613f019190614b46565b90526136b8565b509150915060405180604001604052808383613f249190614b46565b8152602001848b60200151613f399190614b46565b815250888581518110613f4e57613f4e614b17565b6020908102919091010152613f64600185614b46565b9350613f708183614b46565b613f7a9084614b46565b92505050613ec2565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613fe757613fe7613f8f565b604052919050565b6001600160a01b0381168114611b4857600080fd5b600082601f83011261401557600080fd5b813567ffffffffffffffff81111561402f5761402f613f8f565b6140426020601f19601f84011601613fbe565b81815284602083860101111561405757600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561408657600080fd5b60405160c0810167ffffffffffffffff82821081831117156140aa576140aa613f8f565b8160405282935084358352602085013591506140c582613fef565b816020840152604085013591506140db82613fef565b816040840152606085013560608401526080850135608084015260a085013591508082111561410957600080fd5b5061411685828601614004565b60a0830152505092915050565b6000806040838503121561413657600080fd5b823567ffffffffffffffff81111561414d57600080fd5b61415985828601614074565b925050602083013561416a81613fef565b809150509250929050565b60006020828403121561418757600080fd5b81356123e181613fef565b600080604083850312156141a557600080fd5b82356141b081613fef565b9150602083013561416a81613fef565b600080600080600085870360e08112156141d957600080fd5b863567ffffffffffffffff808211156141f157600080fd5b6141fd8a838b01614074565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561423657600080fd5b60408901955060c089013592508083111561425057600080fd5b828901925089601f84011261426457600080fd5b823591508082111561427557600080fd5b508860208260051b840101111561428b57600080fd5b959894975092955050506020019190565b6000602082840312156142ae57600080fd5b5035919050565b60005b838110156142d05781810151838201526020016142b8565b83811115610dec5750506000910152565b600081518084526142f98160208601602086016142b5565b601f01601f19169290920160200192915050565b6020815260006123e160208301846142e1565b6000806040838503121561433357600080fd5b82359150602083013561416a81613fef565b60006020828403121561435757600080fd5b813567ffffffffffffffff81111561436e57600080fd5b61437a84828501614074565b949350505050565b67ffffffffffffffff81168114611b4857600080fd5b6000602082840312156143aa57600080fd5b81356123e181614382565b600080604083850312156143c857600080fd5b50508035926020909101359150565b8015158114611b4857600080fd5b600080600080600060a086880312156143fd57600080fd5b853561440881613fef565b945060208601359350604086013561441f81614382565b9250606086013561442f816143d7565b9150608086013567ffffffffffffffff81111561444b57600080fd5b61445788828901614004565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516144b88160498501602087016142b5565b919091016049019695505050505050565b6000602082840312156144db57600080fd5b81516123e181613fef565b63ffffffff81168114611b4857600080fd5b60006020828403121561450a57600080fd5b81516123e1816144e6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600081600019048311821515161561455e5761455e614515565b500290565b60006020828403121561457557600080fd5b81516123e1816143d7565b60008060006060848603121561459557600080fd5b83516145a0816144e6565b60208501519093506145b181614382565b60408501519092506145c281613fef565b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561460e57600080fd5b8151600381106123e157600080fd5b60006020828403121561462f57600080fd5b81516123e181614382565b60006080828403121561464c57600080fd5b6040516080810181811067ffffffffffffffff8211171561466f5761466f613f8f565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b6000602082840312156146b257600080fd5b5051919050565b600067ffffffffffffffff808411156146d4576146d4613f8f565b8360051b60206146e5818301613fbe565b8681529185019181810190368411156146fd57600080fd5b865b84811015614731578035868111156147175760008081fd5b61472336828b01614004565b8452509183019183016146ff565b50979650505050505050565b60008282101561474f5761474f614515565b500390565b600067ffffffffffffffff8083168185168183048111821515161561477b5761477b614515565b02949350505050565b600067ffffffffffffffff8083168185168083038211156147a7576147a7614515565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826147ee576147ee6147b0565b60001983147f80000000000000000000000000000000000000000000000000000000000000008314161561482457614824614515565b500590565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561486357614863614515565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01831381161561489757614897614515565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156148de576148de614515565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561491957614919614515565b6000871292508782058712848416161561493557614935614515565b8785058712818416161561494b5761494b614515565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0384138115161561499357614993614515565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156149c7576149c7614515565b50500190565b6000826149dc576149dc6147b0565b500490565b86815260006001600160a01b03808816602084015280871660408401525084606083015283608083015260c060a0830152614a1f60c08301846142e1565b98975050505050505050565b805160ff81168114614a3c57600080fd5b919050565b600060c08284031215614a5357600080fd5b60405160c0810181811067ffffffffffffffff82111715614a7657614a76613f8f565b6040528251614a84816144e6565b8152614a9260208401614a2b565b6020820152614aa360408401614a2b565b60408201526060830151614ab6816144e6565b60608201526080830151614ac9816144e6565b608082015260a08301516fffffffffffffffffffffffffffffffff81168114614af157600080fd5b60a08201529392505050565b60006000198203614b1057614b10614515565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115614b5957614b59614515565b500190565b600060ff831680614b7157614b716147b0565b8060ff84160691505092915050565b600060ff821660ff841680821015614b9a57614b9a614515565b9003939250505056fea164736f6c634300080f000a0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0xb2", + "chainId": "0x88bb0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe38abd2d3a322fca54cfd48c79b950861d77218ce460cde4cc912bf820f15ea5", + "transactionType": "CREATE", + "contractName": "SystemConfig", + "contractAddress": "0x210303565cbf0b8c0d2837523816f815f02ad5eb", + "function": null, + "arguments": null, + "transaction": { + "from": "0x8c1a617bdb47342f9c17ac8750e0b070c372c721", + "gas": "0x314e20", + "value": "0x0", + "input": "0x60a06040523480156200001157600080fd5b5060046080526200005f6200004860017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a062000135565b60001b6000196200006f60201b620017c71760201c565b6200006962000073565b6200015b565b9055565b600054610100900460ff1615620000e05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000133576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000828210156200015657634e487b7160e01b600052601160045260246000fd5b500390565b608051612b486200017e600039600081816105480152610af70152612b486000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80637e54b8ad116101f4578063d220a9e01161011a578063f2c4bc9e116100ad578063f8c68de01161007c578063f8c68de01461099e578063fd32aa0f146109a6578063fe3d5710146109ae578063ffa1ad74146109e757600080fd5b8063f2c4bc9e1461095b578063f2fde38b1461096e578063f45e65d814610981578063f68016b71461098a57600080fd5b8063e0e2016d116100e9578063e0e2016d14610922578063e81b2c6d1461092a578063ec70751714610933578063f2b4e6171461095357600080fd5b8063d220a9e0146108f9578063d6ae3cd514610909578063dac6e63a14610912578063dad544e01461091a57600080fd5b8063b40a817c11610192578063c4e8ddfa11610161578063c4e8ddfa14610792578063c9b26f611461079a578063c9ff2d16146107ad578063cc731b02146107c557600080fd5b8063b40a817c14610748578063bc49ce5f1461075b578063bfb14fb714610763578063c0fd4b411461077f57600080fd5b80639b7d7f0a116101ce5780639b7d7f0a146106a3578063a39fac12146106ab578063a62611a214610714578063a71198691461074057600080fd5b80637e54b8ad146106775780638da5cb5b1461067f578063935f029e1461069057600080fd5b806321d7fde5116102d95780634add321d116102775780635c975abb116102465780635c975abb1461064c5780635d73369c14610654578063715018a61461065c5780637616f0e81461066457600080fd5b80634add321d146105ad5780634d5d9a2a146105b55780634f16540b146105e657806354fd4d501461060d57600080fd5b80633e47158c116102b35780633e47158c14610572578063452a93201461057a57806347af267b1461058257806348cd4cb1146105a557600080fd5b806321d7fde51461051b57806335e80ab31461052e57806338d38c971461054157600080fd5b806316d3bc7f116103515780631fd19ee1116103205780631fd19ee11461049957806320f06fdc146104a157806321326849146104b4578063215b7a1c1461051357600080fd5b806316d3bc7f1461044757806318d139181461046b57806319f5cea81461047e5780631edd50981461048657600080fd5b80630a49cb031161038d5780630a49cb03146104045780630ae14b1b1461040c5780630c18c1621461042b578063155b6c6f1461043457600080fd5b806306c92657146103b4578063078f29cf146103cf5780630a2ca2a9146103ef575b600080fd5b6103bc6109ef565b6040519081526020015b60405180910390f35b6103d7610a1d565b6040516001600160a01b0390911681526020016103c6565b6104026103fd366004612551565b610a56565b005b6103d7610a73565b63773594005b60405167ffffffffffffffff90911681526020016103c6565b6103bc60655481565b6104026104423660046125a1565b610aa3565b606a54610412906c01000000000000000000000000900467ffffffffffffffff1681565b610402610479366004612551565b610ab9565b6103bc610aca565b61040261049436600461270b565b610af5565b6103d7610e6a565b6104026104af36600461287b565b610e94565b7f435553544f4d5f4741535f544f4b454e00000000000000000000000000000000600052606d6020527f3ec9a18bd22a834e2a13465cc2aa2a9aebb161ffdebf39cdb0028dbb1b5394b45460ff165b60405190151581526020016103c6565b6103d7610ea5565b61040261052936600461289f565b610ed5565b606c546103d7906001600160a01b031681565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016103c6565b6103d7610ee7565b6103d76110cb565b6105036105903660046128c9565b606d6020526000908152604090205460ff1681565b6103bc611152565b610412611182565b606a546105d19068010000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016103c6565b6103bc7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b604080518082018252601a81527f332e31342e302b6d61782d6761732d6c696d69742d323030304d000000000000602082015290516103c6919061292f565b6105036111a8565b6103bc6112ce565b6104026112f9565b610402610672366004612942565b61130d565b6103bc61131e565b6033546001600160a01b03166103d7565b61040261069e36600461295d565b611349565b6103d761135b565b6106b361138b565b6040516103c69190600060c0820190506001600160a01b038084511683528060208501511660208401528060408501511660408401528060608501511660608401528060808501511660808401528060a08501511660a08401525092915050565b606c546104129074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b6103d761144e565b610402610756366004612942565b61147e565b6103bc61148f565b6068546105d19068010000000000000000900463ffffffff1681565b61040261078d36600461289f565b6114ba565b6103d76114cc565b6104026107a83660046128c9565b6114fc565b606a546105d190640100000000900463ffffffff1681565b6108896040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516103c69190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b606a546105d19063ffffffff1681565b6103bc606b5481565b6103d761150d565b6103d761153d565b6103bc611584565b6103bc60675481565b6068546105d1906c01000000000000000000000000900463ffffffff1681565b6103d76115af565b61040261096936600461298d565b611624565b61040261097c366004612551565b6116e4565b6103bc60665481565b6068546104129067ffffffffffffffff1681565b6103bc611771565b6103bc61179c565b606a546109d49074010000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020016103c6565b6103bc600081565b610a1a60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6129ec565b81565b6000610a51610a4d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776129ec565b5490565b905090565b610a5e6117cb565b610a706001600160a01b038216611825565b50565b6000610a51610a4d60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6129ec565b610aab6117cb565b610ab58282611886565b5050565b610ac16117cb565b610a7081611978565b610a1a60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86129ec565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610b35575060005460ff8083169116105b610bac5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610be56119d1565b610bed611a38565b610bf68c6116e4565b610bff89611825565b610c098b8b611abd565b610c1288611ba4565b610c3b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08889055565b610c6e610c6960017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986129ec565b869055565b610ca2610c9c60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376129ec565b85519055565b610cd9610cd060017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86129ec565b60208601519055565b610d10610d0760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776129ec565b60408601519055565b610d47610d3e60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6129ec565b60608601519055565b610d7e610d7560017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6129ec565b60808601519055565b610db5610dac60017f51547f31a231e1007dca33017faa3da20d959b95087c588a7768bfb922fd59006129ec565b60a08601519055565b610dbd611cc6565b610dc686611d2e565b606b839055606c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050505050565b6000610a517f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b610e9c6117cb565b610a7081612120565b6000610a51610a4d60017f51547f31a231e1007dca33017faa3da20d959b95087c588a7768bfb922fd59006129ec565b610edd6117cb565b610ab58282611abd565b600080610f127fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b90506001600160a01b03811615610f2857919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000815250516002610f6b9190612a03565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790610fc6906060015b604051602081830303815290604052805190602001205490565b14610ffd576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805130602082015260019181019190915260009061101f90606001610fac565b90506001600160a01b0381161561109957806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561106e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110929190612a40565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606c54604080517f452a932000000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163452a93209160048083019260209291908290030181865afa15801561112e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a519190612a40565b6000610a51610a4d60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06129ec565b606954600090610a519063ffffffff6a0100000000000000000000820481169116612a5d565b606c546040517f2e48152c000000000000000000000000000000000000000000000000000000008152600060048201819052916001600160a01b031690632e48152c90602401602060405180830381865afa15801561120b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122f9190612a89565b80610a515750606c546001600160a01b0316632e48152c61124e610a73565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156112aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a519190612a89565b610a1a60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376129ec565b6113016117cb565b61130b600061218d565b565b6113156117cb565b610a70816121f7565b610a1a60017f51547f31a231e1007dca33017faa3da20d959b95087c588a7768bfb922fd59006129ec565b6113516117cb565b610ab5828261226a565b6000610a51610a4d60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6129ec565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526040518060c001604052806113d061144e565b6001600160a01b031681526020016113e66114cc565b6001600160a01b031681526020016113fc610a1d565b6001600160a01b03168152602001611412610a73565b6001600160a01b0316815260200161142861135b565b6001600160a01b0316815260200161143e610ea5565b6001600160a01b03169052919050565b6000610a51610a4d60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376129ec565b6114866117cb565b610a7081611ba4565b610a1a60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986129ec565b6114c26117cb565b610ab58282612326565b6000610a51610a4d60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86129ec565b6115046117cb565b610a7081611825565b6000610a51610a4d60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986129ec565b6000611547610ee7565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561112e573d6000803e3d6000fd5b610a1a60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06129ec565b6000806115ba610a73565b9050806001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161e9190612a40565b91505090565b61162c6119d1565b6000828152606d602052604090205460ff1615158115150361167a576040517ff5828b0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152606d602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168415159081179091559051909184917fb876f6594132c89891d2fd198e925e999be741ec809abb58bfe9b966876cc06c9190a35050565b6116ec6117cb565b6001600160a01b0381166117685760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610ba3565b610a708161218d565b610a1a60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776129ec565b610a1a60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6129ec565b9055565b6033546001600160a01b0316331461130b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ba3565b60678190556040805160208082018490528251808303909101815290820190915260005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161187a919061292f565b60405180910390a35050565b606a80547fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff166801000000000000000063ffffffff8516027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff16176c0100000000000000000000000067ffffffffffffffff841690810291909117909155604080516bffffffff000000000000000085831b1690921760208301526000910160408051601f19818403018152919052905060055b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161196b919061292f565b60405180910390a3505050565b6119a17f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b604080516001600160a01b03831660208201526000910160408051601f1981840301815291905290506003611849565b336119da610ee7565b6001600160a01b031614158015611a015750336119f561153d565b6001600160a01b031614155b1561130b576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16611ab55760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ba3565b61130b6124a6565b606880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000063ffffffff8581169182027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16929092176c0100000000000000000000000092851692909202919091179091557f0100000000000000000000000000000000000000000000000000000000000000602083811b67ffffffff000000001690921717606681905560655460408051938401919091528201526000906060015b60408051601f198184030181529190529050600161193a565b611bac611182565b67ffffffffffffffff168167ffffffffffffffff161015611c0f5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610ba3565b637735940067ffffffffffffffff82161115611c6d5760405162461bcd60e51b815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f20686967686044820152606401610ba3565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611849565b611cf4610a4d60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06129ec565b60000361130b5761130b611d2960017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06129ec565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611dc45760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610ba3565b6001816040015160ff1611611e415760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610ba3565b6068546080820151825167ffffffffffffffff90921691611e629190612aa6565b63ffffffff161115611eb65760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610ba3565b6000816020015160ff1611611f335760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610ba3565b8051602082015163ffffffff82169160ff90911690611f53908290612ac5565b611f5d9190612b0f565b63ffffffff1614611fd65760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610ba3565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b606a80547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8416908102919091179091556040805160208082019390935281518082039093018352810190526007611849565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606c80547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040805160208082019390935281518082039093018352810190526006611849565b7fff000000000000000000000000000000000000000000000000000000000000008116156123005760405162461bcd60e51b815260206004820152602160248201527f53797374656d436f6e6669673a207363616c61722065786365656473206d617860448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610ba3565b606582905560668190556040805160208101849052908101829052600090606001611b8b565b60018263ffffffff1610156123a35760405162461bcd60e51b815260206004820152602660248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65203e3d203100000000000000000000000000000000000000000000000000006064820152608401610ba3565b60018163ffffffff1610156124205760405162461bcd60e51b815260206004820152602560248201527f53797374656d436f6e6669673a20656c6173746963697479206d75737420626560448201527f203e3d20310000000000000000000000000000000000000000000000000000006064820152608401610ba3565b606a805463ffffffff83811664010000000081027fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909316918616919091179190911790915560405160009161248d91602086811b67ffffffff0000000016909217910190815260200190565b60408051601f198184030181529190529050600461193a565b600054610100900460ff166125235760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ba3565b61130b3361218d565b6001600160a01b0381168114610a7057600080fd5b803561254c8161252c565b919050565b60006020828403121561256357600080fd5b813561256e8161252c565b9392505050565b803563ffffffff8116811461254c57600080fd5b803567ffffffffffffffff8116811461254c57600080fd5b600080604083850312156125b457600080fd5b6125bd83612575565b91506125cb60208401612589565b90509250929050565b60405160c0810167ffffffffffffffff8111828210171561261e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803560ff8116811461254c57600080fd5b600060c0828403121561264757600080fd5b60405160c0810181811067ffffffffffffffff82111715612691577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290508082356126a28161252c565b815260208301356126b28161252c565b602082015260408301356126c58161252c565b604082015260608301356126d88161252c565b606082015260808301356126eb8161252c565b608082015260a08301356126fe8161252c565b60a0919091015292915050565b60008060008060008060008060008060008b8d036102a081121561272e57600080fd5b8c356127398161252c565b9b5061274760208e01612575565b9a5061275560408e01612575565b995060608d0135985061276a60808e01612589565b975060a08d013561277a8161252c565b965060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40820112156127ac57600080fd5b506127b56125d4565b6127c160c08e01612575565b81526127cf60e08e01612624565b60208201526127e16101008e01612624565b60408201526127f36101208e01612575565b60608201526128056101408e01612575565b60808201526101608d01356fffffffffffffffffffffffffffffffff8116811461282e57600080fd5b60a082015294506128426101808d01612541565b93506128528d6101a08e01612635565b92506102608c013591506128696102808d01612541565b90509295989b509295989b9093969950565b60006020828403121561288d57600080fd5b813561ffff8116811461256e57600080fd5b600080604083850312156128b257600080fd5b6128bb83612575565b91506125cb60208401612575565b6000602082840312156128db57600080fd5b5035919050565b6000815180845260005b81811015612908576020818501810151868301820152016128ec565b8181111561291a576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061256e60208301846128e2565b60006020828403121561295457600080fd5b61256e82612589565b6000806040838503121561297057600080fd5b50508035926020909101359150565b8015158114610a7057600080fd5b600080604083850312156129a057600080fd5b8235915060208301356129b28161297f565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156129fe576129fe6129bd565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612a3b57612a3b6129bd565b500290565b600060208284031215612a5257600080fd5b815161256e8161252c565b600067ffffffffffffffff808316818516808303821115612a8057612a806129bd565b01949350505050565b600060208284031215612a9b57600080fd5b815161256e8161297f565b600063ffffffff808316818516808303821115612a8057612a806129bd565b600063ffffffff80841680612b03577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615612b3257612b326129bd565b0294935050505056fea164736f6c634300080f000a", + "nonce": "0xb3", + "chainId": "0x88bb0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xa1fca6a9e84770700bd5057e298017184563dd0bd2456493bd96556460f83ccf", + "transactionType": "CREATE", + "contractName": "DisputeGameFactory", + "contractAddress": "0xbee0c6dd082d7a483da4bd6e56c7e5292bda7ce8", + "function": null, + "arguments": null, + "transaction": { + "from": "0x8c1a617bdb47342f9c17ac8750e0b070c372c721", + "gas": "0x226a11", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b50600160805261001e610023565b6100e3565b600054610100900460ff161561008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b608051611e14610105600039600081816102580152610cd00152611e146000f3fe60806040526004361061016a5760003560e01c80636593dc6e116100cb57806396cd97201161007f578063c4d66de811610059578063c4d66de81461047b578063dad544e01461049b578063f2fde38b146104b057600080fd5b806396cd9720146103e7578063b107095714610407578063bb8aa1fc1461042757600080fd5b806374cc86ac116100b057806374cc86ac1461039657806382ecf2f6146103b65780638da5cb5b146103c957600080fd5b80636593dc6e14610354578063715018a61461038157600080fd5b806338d38c97116101225780634d1975b4116101075780634d1975b41461029757806354fd4d50146102b65780635f0150cb1461030c57600080fd5b806338d38c97146102445780633e47158c1461028257600080fd5b80631b685b9e116101535780631b685b9e146101c15780631e334240146101f7578063254bd6831461021757600080fd5b80631011f3771461016f57806314f6b1a31461019f575b600080fd5b61018261017d36600461165f565b6104d0565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101ab57600080fd5b506101bf6101ba3660046116fe565b610558565b005b3480156101cd57600080fd5b506101826101dc366004611735565b6065602052600090815260409020546001600160a01b031681565b34801561020357600080fd5b506101bf610212366004611750565b6105d5565b34801561022357600080fd5b5061023761023236600461177a565b610621565b6040516101969190611809565b34801561025057600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610196565b34801561028e57600080fd5b50610182610802565b3480156102a357600080fd5b506068545b604051908152602001610196565b3480156102c257600080fd5b506102ff6040518060400160405280600581526020017f312e352e3000000000000000000000000000000000000000000000000000000081525081565b60405161019691906118c6565b34801561031857600080fd5b5061032c6103273660046118d9565b6109e6565b604080516001600160a01b03909316835267ffffffffffffffff909116602083015201610196565b34801561036057600080fd5b506102a861036f366004611735565b60666020526000908152604090205481565b34801561038d57600080fd5b506101bf610a2c565b3480156103a257600080fd5b506102ff6103b1366004611735565b610a40565b6101826103c43660046118d9565b610ada565b3480156103d557600080fd5b506033546001600160a01b0316610182565b3480156103f357600080fd5b506102a86104023660046118d9565b610b53565b34801561041357600080fd5b506101bf610422366004611933565b610b8c565b34801561043357600080fd5b5061044761044236600461197e565b610c72565b6040805163ffffffff909416845267ffffffffffffffff90921660208401526001600160a01b031690820152606001610196565b34801561048757600080fd5b506101bf610496366004611997565b610cce565b3480156104a757600080fd5b50610182610e4b565b3480156104bc57600080fd5b506101bf6104cb366004611997565b610ebb565b60006104de87878787610f65565b9050806001600160a01b0316634224b1e73485856040518463ffffffff1660e01b815260040161050f9291906119df565b6000604051808303818588803b15801561052857600080fd5b505af115801561053c573d6000803e3d6000fd5b505050505061054e878787878561119a565b9695505050505050565b610560611240565b63ffffffff821660008181526065602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038616908117909155905190917fff513d80e2c7fa487608f70a618dfbc0cf415699dc69588c747e8c71566c88de91a35050565b6105dd611240565b63ffffffff8216600081815260666020526040808220849055518392917f74d6665c4b26d5596a5aa13d3014e0c06af4d322075a797f87b03cd4c5bc91ca91a35050565b60685460609083101580610633575081155b6107fb575060408051600583901b8101602001909152825b8381116107f957600060688281548110610667576106676119f3565b600091825260209091200154905060e081901c60a082901c67ffffffffffffffff166001600160a01b03831663ffffffff891683036107e857600186510186526000816001600160a01b031663609d33346040518163ffffffff1660e01b8152600401600060405180830381865afa1580156106e7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261070f9190810190611a51565b90506000826001600160a01b031663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107759190611afe565b90506040518060a001604052808881526020018781526020018567ffffffffffffffff168152602001828152602001838152508860018a516107b79190611b46565b815181106107c7576107c76119f3565b6020026020010181905250888851106107e5575050505050506107f9565b50505b5050600019909201915061064b9050565b505b9392505050565b60008061082d7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b90506001600160a01b0381161561084357919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000008152505160026108869190611b5d565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000091909117906108e1906060015b604051602081830303815290604052805190602001205490565b14610918576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805130602082015260019181019190915260009061093a906060016108c7565b90506001600160a01b038116156109b457806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ad9190611b7c565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006109f787878787610b53565b6000908152606760205260409020546001600160a01b0381169860a09190911c67ffffffffffffffff16975095505050505050565b610a34611240565b610a3e60006112b4565b565b60696020526000908152604090208054610a5990611b99565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8590611b99565b8015610ad25780601f10610aa757610100808354040283529160200191610ad2565b820191906000526020600020905b815481529060010190602001808311610ab557829003601f168201915b505050505081565b6000610ae885858585610f65565b9050806001600160a01b0316638129fc1c346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b2557600080fd5b505af1158015610b39573d6000803e3d6000fd5b5050505050610b4b858585858561119a565b949350505050565b600084848484604051602001610b6c9493929190611bec565b604051602081830303815290604052805190602001209050949350505050565b610b94611240565b63ffffffff8416600090815260656020908152604080832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03881617905560699091529020610bef828483611c61565b5060405163ffffffff8516906001600160a01b038516907fff513d80e2c7fa487608f70a618dfbc0cf415699dc69588c747e8c71566c88de90600090a38363ffffffff167fa47fcdf075d680d3817bfca7973b373e1a5f6cfc3b444748299cc2b83d8348f98383604051610c649291906119df565b60405180910390a250505050565b600080600080600080610cbe60688881548110610c9157610c916119f3565b906000526020600020015460e081901c9160a082901c67ffffffffffffffff16916001600160a01b031690565b9199909850909650945050505050565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610d0e575060005460ff8083169116105b610d9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610dd861131e565b610de0611385565b610de9826112b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6000610e55610802565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb69190611b7c565b905090565b610ec3611240565b6001600160a01b038116610f59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610d96565b610f62816112b4565b50565b63ffffffff84166000908152606560205260408120546001600160a01b031680610fc3576040517f031c6de400000000000000000000000000000000000000000000000000000000815263ffffffff87166004820152602401610d96565b63ffffffff86166000908152606660205260409020543414611011576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061101f87878787610b53565b6000818152606760205260409020549091501561106b576040517f014f6fe500000000000000000000000000000000000000000000000000000000815260048101829052602401610d96565b6000611078600143611b46565b63ffffffff89166000908152606960205260408120805492409350909161109e90611b99565b80601f01602080910402602001604051908101604052809291908181526020018280546110ca90611b99565b80156111175780601f106110ec57610100808354040283529160200191611117565b820191906000526020600020905b8154815290600101906020018083116110fa57829003601f168201915b50505050509050805160000361116b576111643389848a8a604051602001611143959493929190611d22565b60408051601f198184030181529190526001600160a01b0386169085611424565b945061118e565b61118b3389848c8b8b876040516020016111439796959493929190611d6f565b94505b50505050949350505050565b60006111a886868686610b53565b60008181526067602052604080822060e08a901b4260a01b17861790819055606880546001810182559084527fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c2209775301819055905192935091879163ffffffff8a16916001600160a01b038716917f5b565efe82411da98814f356d0e7bcb8f0219b8d970307c5afb4a6903a8b2e3591a450505050505050565b6033546001600160a01b03163314610a3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d96565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b33611327610802565b6001600160a01b03161415801561134e575033611342610e4b565b6001600160a01b031614155b15610a3e576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1661141c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610d96565b610a3e611433565b6000610b4b60008585856114d3565b600054610100900460ff166114ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610d96565b610a3e336112b4565b600060608303516040840351602085035185518060208801018051600283016c5af43d3d93803e606057fd5bf38a528a600d8b035278593da1005b363d3d373d3d3d3d610000806062363936013d738160481b1760218b03527f9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff603a8b035272fd6100003d81600a3d39f336602c57343d527f6062820160781b1761ff9e82106059018b03528060f01b835288606c8201604c8c038ef5975050866115a05763301164256000526004601cfd5b90528652601f198601527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08501527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0909301929092525092915050565b803563ffffffff8116811461161157600080fd5b919050565b60008083601f84011261162857600080fd5b50813567ffffffffffffffff81111561164057600080fd5b60208301915083602082850101111561165857600080fd5b9250929050565b6000806000806000806080878903121561167857600080fd5b611681876115fd565b955060208701359450604087013567ffffffffffffffff808211156116a557600080fd5b6116b18a838b01611616565b909650945060608901359150808211156116ca57600080fd5b506116d789828a01611616565b979a9699509497509295939492505050565b6001600160a01b0381168114610f6257600080fd5b6000806040838503121561171157600080fd5b61171a836115fd565b9150602083013561172a816116e9565b809150509250929050565b60006020828403121561174757600080fd5b6107fb826115fd565b6000806040838503121561176357600080fd5b61176c836115fd565b946020939093013593505050565b60008060006060848603121561178f57600080fd5b611798846115fd565b95602085013595506040909401359392505050565b60005b838110156117c85781810151838201526020016117b0565b838111156117d7576000848401525b50505050565b600081518084526117f58160208601602086016117ad565b601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156118b8578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc001855281518051845287810151888501528681015167ffffffffffffffff16878501526060808201519085015260809081015160a0918501829052906118a4818601836117dd565b968901969450505090860190600101611830565b509098975050505050505050565b6020815260006107fb60208301846117dd565b600080600080606085870312156118ef57600080fd5b6118f8856115fd565b935060208501359250604085013567ffffffffffffffff81111561191b57600080fd5b61192787828801611616565b95989497509550505050565b6000806000806060858703121561194957600080fd5b611952856115fd565b93506020850135611962816116e9565b9250604085013567ffffffffffffffff81111561191b57600080fd5b60006020828403121561199057600080fd5b5035919050565b6000602082840312156119a957600080fd5b81356107fb816116e9565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b602081526000610b4b6020830184866119b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215611a6357600080fd5b815167ffffffffffffffff80821115611a7b57600080fd5b818401915084601f830112611a8f57600080fd5b815181811115611aa157611aa1611a22565b604051601f8201601f19908116603f01168101908382118183101715611ac957611ac9611a22565b81604052828152876020848701011115611ae257600080fd5b611af38360208301602088016117ad565b979650505050505050565b600060208284031215611b1057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611b5857611b58611b17565b500390565b6000816000190483118215151615611b7757611b77611b17565b500290565b600060208284031215611b8e57600080fd5b81516107fb816116e9565b600181811c90821680611bad57607f821691505b602082108103611be6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b63ffffffff8516815283602082015260606040820152600061054e6060830184866119b4565b601f821115611c5c57600081815260208120601f850160051c81016020861015611c395750805b601f850160051c820191505b81811015611c5857828155600101611c45565b5050505b505050565b67ffffffffffffffff831115611c7957611c79611a22565b611c8d83611c878354611b99565b83611c12565b6000601f841160018114611cc15760008515611ca95750838201355b600019600387901b1c1916600186901b178355611d1b565b600083815260209020601f19861690835b82811015611cf25786850135825560209485019460019092019101611cd2565b5086821015611d0f5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008660601b1681528460148201528360348201528183605483013760009101605401908152949350505050565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1681528660148201528560348201527fffffffff000000000000000000000000000000000000000000000000000000008560e01b16605482015282846058830137600083820160588101600081528451611df28183602089016117ad565b919091016058019a995050505050505050505056fea164736f6c634300080f000a", + "nonce": "0xb4", + "chainId": "0x88bb0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xf32775a863c6228e847e0e6c3d070b5b4cc9067391b0ee9f825c7edae8d0ff8a", + "transactionType": "CREATE", + "contractName": "Proxy", + "contractAddress": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "function": null, + "arguments": [ + "0xF2D2C097be80Fb87844b7E259Ef67efB98b26F87" + ], + "transaction": { + "from": "0x8c1a617bdb47342f9c17ac8750e0b070c372c721", + "gas": "0xa6968", + "value": "0x0", + "input": "0x608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103000000000000000000000000f2d2c097be80fb87844b7e259ef67efb98b26f87", + "nonce": "0xb5", + "chainId": "0x88bb0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x9f91ac", + "logs": [ + { + "address": "0xb4ac39aadc3130fef3f348ece8d033540df12089", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0x5efe54ee4caa20117d27b95517f609d523efbd65094105559fdf8d4d751795fc", + "blockNumber": "0x375ddd", + "blockTimestamp": "0x6aa92fd4", + "transactionHash": "0xfdd99b31e9c74b3a795cdb33f78775ecdeeba4708f5fba20b1124f9504a56de2", + "transactionIndex": "0x1b", + "logIndex": "0xdd", + "removed": false + } + ], + "logsBloom": "0x00000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000100000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xfdd99b31e9c74b3a795cdb33f78775ecdeeba4708f5fba20b1124f9504a56de2", + "transactionIndex": "0x1b", + "blockHash": "0x5efe54ee4caa20117d27b95517f609d523efbd65094105559fdf8d4d751795fc", + "blockNumber": "0x375ddd", + "gasUsed": "0x4095a3", + "effectiveGasPrice": "0x412902f0", + "from": "0x8c1a617bdb47342f9c17ac8750e0b070c372c721", + "to": null, + "contractAddress": "0xb4ac39aadc3130fef3f348ece8d033540df12089" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xc57f00", + "logs": [ + { + "address": "0x210303565cbf0b8c0d2837523816f815f02ad5eb", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0x5efe54ee4caa20117d27b95517f609d523efbd65094105559fdf8d4d751795fc", + "blockNumber": "0x375ddd", + "blockTimestamp": "0x6aa92fd4", + "transactionHash": "0xe38abd2d3a322fca54cfd48c79b950861d77218ce460cde4cc912bf820f15ea5", + "transactionIndex": "0x1c", + "logIndex": "0xde", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000800000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000", + "type": "0x2", + "transactionHash": "0xe38abd2d3a322fca54cfd48c79b950861d77218ce460cde4cc912bf820f15ea5", + "transactionIndex": "0x1c", + "blockHash": "0x5efe54ee4caa20117d27b95517f609d523efbd65094105559fdf8d4d751795fc", + "blockNumber": "0x375ddd", + "gasUsed": "0x25ed54", + "effectiveGasPrice": "0x412902f0", + "from": "0x8c1a617bdb47342f9c17ac8750e0b070c372c721", + "to": null, + "contractAddress": "0x210303565cbf0b8c0d2837523816f815f02ad5eb" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xdff7fa", + "logs": [ + { + "address": "0xbee0c6dd082d7a483da4bd6e56c7e5292bda7ce8", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0x5efe54ee4caa20117d27b95517f609d523efbd65094105559fdf8d4d751795fc", + "blockNumber": "0x375ddd", + "blockTimestamp": "0x6aa92fd4", + "transactionHash": "0xa1fca6a9e84770700bd5057e298017184563dd0bd2456493bd96556460f83ccf", + "transactionIndex": "0x1d", + "logIndex": "0xdf", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000", + "type": "0x2", + "transactionHash": "0xa1fca6a9e84770700bd5057e298017184563dd0bd2456493bd96556460f83ccf", + "transactionIndex": "0x1d", + "blockHash": "0x5efe54ee4caa20117d27b95517f609d523efbd65094105559fdf8d4d751795fc", + "blockNumber": "0x375ddd", + "gasUsed": "0x1a78fa", + "effectiveGasPrice": "0x412902f0", + "from": "0x8c1a617bdb47342f9c17ac8750e0b070c372c721", + "to": null, + "contractAddress": "0xbee0c6dd082d7a483da4bd6e56c7e5292bda7ce8" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xe7fa4a", + "logs": [ + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f2d2c097be80fb87844b7e259ef67efb98b26f87", + "blockHash": "0x5efe54ee4caa20117d27b95517f609d523efbd65094105559fdf8d4d751795fc", + "blockNumber": "0x375ddd", + "blockTimestamp": "0x6aa92fd4", + "transactionHash": "0xf32775a863c6228e847e0e6c3d070b5b4cc9067391b0ee9f825c7edae8d0ff8a", + "transactionIndex": "0x1e", + "logIndex": "0xe0", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000002000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000400000000000000000000000000000100000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xf32775a863c6228e847e0e6c3d070b5b4cc9067391b0ee9f825c7edae8d0ff8a", + "transactionIndex": "0x1e", + "blockHash": "0x5efe54ee4caa20117d27b95517f609d523efbd65094105559fdf8d4d751795fc", + "blockNumber": "0x375ddd", + "gasUsed": "0x80250", + "effectiveGasPrice": "0x412902f0", + "from": "0x8c1a617bdb47342f9c17ac8750e0b070c372c721", + "to": null, + "contractAddress": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1789472725854, + "chain": 560048, + "commit": "3685850" +} \ No newline at end of file diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/records/DeployCobaltProofImpls.s.sol/560048/run-1789472750703.json b/active/evm/tasks/2026-09-14-cobalt-upgrade/records/DeployCobaltProofImpls.s.sol/560048/run-1789472750703.json new file mode 100644 index 000000000..36ed1bd35 --- /dev/null +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/records/DeployCobaltProofImpls.s.sol/560048/run-1789472750703.json @@ -0,0 +1,108 @@ +{ + "transactions": [ + { + "hash": "0x0bd7e6005a11f556741d5626de3034ee7ef73b87b074f988777fc46f56769b4b", + "transactionType": "CREATE", + "contractName": "ProtocolVersions", + "contractAddress": "0x30adfdab722d36b26f12f562d7cadf4cd8831c58", + "function": null, + "arguments": null, + "transaction": { + "from": "0x8c1a617bdb47342f9c17ac8750e0b070c372c721", + "gas": "0x201046", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b50600160805261001e610023565b6100e3565b600054610100900460ff161561008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b608051611bf6610105600039600081816101ba01526109ce0152611bf66000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c8063723d0096116100b2578063a2e62b5a11610081578063bcebe34b11610066578063bcebe34b1461013b578063dad544e0146102da578063f1149db8146102e257600080fd5b8063a2e62b5a146102a7578063a9679058146102ba57600080fd5b8063723d00961461025957806384dfa8931461026e57806387f6a390146102815780639259fa6b1461029457600080fd5b806337a329b0116101095780633e47158c116100ee5780633e47158c146101e457806354fd4d50146102115780635c4d37d21461025057600080fd5b806337a329b0146101a057806338d38c97146101b357600080fd5b80630c014f101461013b5780631589cfab1461016257806326fadbe21461018357806328c802cd14610198575b600080fd5b610144610e1081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b610175610170366004611851565b6102f5565b604051908152602001610159565b61018b6104d4565b604051610159919061187b565b610175610560565b6101756101ae3660046118c9565b6105cd565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610159565b6101ec610607565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610159565b604080518082018252600581527f312e302e300000000000000000000000000000000000000000000000000000006020820152905161015991906118e2565b61017560035481565b61026c6102673660046118c9565b610812565b005b61026c61027c366004611955565b610879565b61026c61028f3660046119a3565b6109cc565b61026c6102a2366004611955565b610df1565b6101756102b5366004611a31565b610fb4565b6004546101ec9073ffffffffffffffffffffffffffffffffffffffff1681565b6101ec6110bb565b61026c6102f0366004611a4c565b611138565b60006102ff6111ce565b60025460000361033b576040517f02600eca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015467ffffffffffffffff841615801590610375575061035e610e1042611a98565b67ffffffffffffffff168467ffffffffffffffff16105b156103bd576040517f32bb9c6f00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff851660048201526024015b60405180910390fd5b6103c78185611226565b6001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf66004820401805460039092166008026101000a67ffffffffffffffff02199091169055600280549091018155600090815260405182917fc8d4579ff78c4e70e6ae3acbb4858a04ea798b4e8efff9ff7a8c8775d7b2c85891a28367ffffffffffffffff1660000361046a5761046581611320565b610474565b6104748185611433565b82156104cd576fffffffffffffffffffffffffffffffff8311156104c4576040517f43fab7ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104cd836114d7565b9392505050565b6060600180548060200260200160405190810160405280929190818152602001828054801561055657602002820191906000526020600020906000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116105115790505b5050505050905090565b60025460009080820361059f576040517f02600eca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026105ac600183611ac4565b815481106105bc576105bc611adb565b906000526020600020015491505090565b60006105d88261150a565b60026105e5836001611b0a565b815481106105f5576105f5611adb565b90600052602060002001549050919050565b6000806106327fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff81161561065557919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000008152505160026106989190611b22565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000091909117906106f3906060015b604051602081830303815290604052805190602001205490565b1461072a576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805130602082015260019181019190915260009061074c906060016106d9565b905073ffffffffffffffffffffffffffffffffffffffff8116156107e0578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d99190611b5f565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61081a6111ce565b80158061083657506fffffffffffffffffffffffffffffffff81115b1561086d576040517f43fab7ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610876816114d7565b50565b6108816111ce565b61088a8261150a565b60006001838154811061089f5761089f611adb565b6000918252602090912060048204015460039091166008026101000a900467ffffffffffffffff9081169150821681036108d857505050565b67ffffffffffffffff8116156108f2576108f28382611548565b67ffffffffffffffff8216158015906109295750610912610e1042611a98565b67ffffffffffffffff168267ffffffffffffffff16105b1561096c576040517f32bb9c6f00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff831660048201526024016103b4565b67ffffffffffffffff8216158061098b575067ffffffffffffffff8116155b156109995761099983611613565b67ffffffffffffffff8216156109bd576109b38383611226565b6109bd83836116bb565b6109c78383611433565b505050565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610a0c575060005460ff8083169116105b610a98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016103b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610ad16117b3565b811580610aed57506fffffffffffffffffffffffffffffffff82115b15610b24576040517f43fab7ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace018190555b83811015610d0a576000858583818110610b7557610b75611adb565b9050602002016020810190610b8a9190611a31565b90504267ffffffffffffffff168167ffffffffffffffff16118015610bcd5750610bb6610e1042611a98565b67ffffffffffffffff168167ffffffffffffffff16105b15610c10576040517f32bb9c6f00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016103b4565b610c1a8282611226565b6001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf66004820401805460039092166008026101000a67ffffffffffffffff8181021990931692851602919091179055600280549091018155600090815260405183917fc8d4579ff78c4e70e6ae3acbb4858a04ea798b4e8efff9ff7a8c8775d7b2c85891a267ffffffffffffffff811615610cf75760405167ffffffffffffffff8216815282907f48496c9e95bc0f6dd82bee879408724c3b1a356b8a6d9c3fbffe270b247207919060200160405180910390a25b5080610d0281611b7c565b915050610b59565b50610d156000611320565b610d1e826114d7565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87169081179091556040516000907fb1c6dde58c72ae176c3481e130f3af63d9d7f9edc52f9c07ab80840f85f442ea908290a3600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b60045473ffffffffffffffffffffffffffffffffffffffff163314610e42576040517f13e7d9b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e4b8261150a565b600060018381548110610e6057610e60611adb565b60009182526020822060048204015460039091166008026101000a900467ffffffffffffffff169150819003610ec5576040517f52f383b6000000000000000000000000000000000000000000000000000000008152600481018490526024016103b4565b610ecf8382611548565b8067ffffffffffffffff168267ffffffffffffffff1611610f30576040517f64fc743100000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8083166004830152831660248201526044016103b4565b6000610f3e610e1042611a98565b90508067ffffffffffffffff168367ffffffffffffffff161015610f9a576040517f32bb9c6f00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016103b4565b610fa484846116bb565b610fae8484611433565b50505050565b6002546000908103610ff2576040517f02600eca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001545b80156110a6576000600161100a8184611ac4565b8154811061101a5761101a611adb565b6000918252602090912060048204015460039091166008026101000a900467ffffffffffffffff169050801580159061106757508367ffffffffffffffff168167ffffffffffffffff1611155b15611093576002828154811061107f5761107f611adb565b906000526020600020015492505050919050565b508061109e81611bb4565b915050610ff6565b5060026000815481106105f5576105f5611adb565b60006110c5610607565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561110f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111339190611b5f565b905090565b6111406111ce565b60045460405173ffffffffffffffffffffffffffffffffffffffff8084169216907fb1c6dde58c72ae176c3481e130f3af63d9d7f9edc52f9c07ab80840f85f442ea90600090a3600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b336111d76110bb565b73ffffffffffffffffffffffffffffffffffffffff1614611224576040517f7f12c64b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b8067ffffffffffffffff1660000361123c575050565b815b80156109c757600060016112528184611ac4565b8154811061126257611262611adb565b6000918252602090912060048204015460039091166008026101000a900467ffffffffffffffff169050801561130d578067ffffffffffffffff168367ffffffffffffffff161015610fae57836112ba600184611ac4565b6040517fcb986e280000000000000000000000000000000000000000000000000000000081526004810192909252602482015267ffffffffffffffff8083166044830152841660648201526084016103b4565b508061131881611bb4565b91505061123e565b60015460028054600091908490811061133b5761133b611adb565b6000918252602090912001549050825b828110156114025781816001838154811061136857611368611adb565b600091825260209182902060048204015460408051938401959095529382019290925260039091166008026101000a90910467ffffffffffffffff1660608201526080016040516020818303038152906040528051906020012091508160028260016113d49190611b0a565b815481106113e4576113e4611adb565b600091825260209091200155806113fa81611b7c565b91505061134b565b5060405181907f3ce196af7f202b9a61978967a766a54245d6588745bc8f76226360f5a87085ea90600090a2505050565b806001838154811061144757611447611adb565b90600052602060002090600491828204019190066008026101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550817f48496c9e95bc0f6dd82bee879408724c3b1a356b8a6d9c3fbffe270b24720791826040516114c2919067ffffffffffffffff91909116815260200190565b60405180910390a26114d382611320565b5050565b600381905560405181907fafb29e5c7f4fc4818c2ffe01313f20873fbb8d3ecb8c231226be562b9a11e57f90600090a250565b6001548110610876576040517fded31283000000000000000000000000000000000000000000000000000000008152600481018290526024016103b4565b8067ffffffffffffffff164267ffffffffffffffff16106115a8576040517f9f927e2c0000000000000000000000000000000000000000000000000000000081526004810183905267ffffffffffffffff821660248201526044016103b4565b67ffffffffffffffff81166115bf610e1042611a98565b67ffffffffffffffff16106114d3576040517fb18153c80000000000000000000000000000000000000000000000000000000081526004810183905267ffffffffffffffff821660248201526044016103b4565b6000611620826001611b0a565b90505b6001548110156114d3576001818154811061164057611640611adb565b6000918252602090912060048204015460039091166008026101000a900467ffffffffffffffff16156116a9576040517f212e820300000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016103b4565b806116b381611b7c565b915050611623565b8067ffffffffffffffff166000036116d1575050565b60006116de836001611b0a565b90505b6001548110156109c75760006001828154811061170057611700611adb565b6000918252602090912060048204015460039091166008026101000a900467ffffffffffffffff16905080156117a0578067ffffffffffffffff168367ffffffffffffffff161115610fae576040517f76b91f41000000000000000000000000000000000000000000000000000000008152600481018590526024810183905267ffffffffffffffff8085166044830152821660648201526084016103b4565b50806117ab81611b7c565b9150506116e1565b336117bc610607565b73ffffffffffffffffffffffffffffffffffffffff16141580156117fd5750336117e46110bb565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611224576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b803567ffffffffffffffff8116811461184c57600080fd5b919050565b6000806040838503121561186457600080fd5b61186d83611834565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b818110156118bd57835167ffffffffffffffff1683529284019291840191600101611897565b50909695505050505050565b6000602082840312156118db57600080fd5b5035919050565b600060208083528351808285015260005b8181101561190f578581018301518582016040015282016118f3565b81811115611921576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000806040838503121561196857600080fd5b8235915061197860208401611834565b90509250929050565b73ffffffffffffffffffffffffffffffffffffffff8116811461087657600080fd5b600080600080606085870312156119b957600080fd5b84356119c481611981565b9350602085013567ffffffffffffffff808211156119e157600080fd5b818701915087601f8301126119f557600080fd5b813581811115611a0457600080fd5b8860208260051b8501011115611a1957600080fd5b95986020929092019750949560400135945092505050565b600060208284031215611a4357600080fd5b6104cd82611834565b600060208284031215611a5e57600080fd5b81356104cd81611981565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516808303821115611abb57611abb611a69565b01949350505050565b600082821015611ad657611ad6611a69565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115611b1d57611b1d611a69565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611b5a57611b5a611a69565b500290565b600060208284031215611b7157600080fd5b81516104cd81611981565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611bad57611bad611a69565b5060010190565b600081611bc357611bc3611a69565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea164736f6c634300080f000a", + "nonce": "0xb6", + "chainId": "0x88bb0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x28e7e9d1df559939ea55a4c814edb7c7a959ff938d931f6c08025d685ca03c6f", + "transactionType": "CREATE", + "contractName": "AggregateVerifier", + "contractAddress": "0x2504b1c3b78b2711e24eadf7ea077b0ca1b91859", + "function": null, + "arguments": [ + "621", + "0xbFB20170B82C474b136bc5a062aca47A3Cb8cF68", + "0x5af90fdE02b46e202F6232b3eDE25b3F602AC673", + "0x42FA446d95A5B61A7bE02949042954a60315Fb0f", + "0x5B997cD8fAFA026882AEc7D0558c9cc47221F84e", + "0xe8dc2300cf325b2527cbfa5e664a70acc40a9f2fc0617bd35cdfa61652a5fc30", + "(0x7713943c2c2412314b135c5606cdb3923a54f7555d91d9f31c2f64e34e16f2f4, 0x002663a1072dc1e1938e13d3b269fff88e843eb4ef76d6c6953dde4f5152973b)", + "0xd14ddabfc0ad1dd737d6e5917cf271fd479bd539c9b3d85a602589c679a9983a", + "763360", + "600", + "30", + "(0x30e172aaC675c9fe5A64792F92C9fD4d3E7cA9Da, 0, 1782348588, 2)" + ], + "transaction": { + "from": "0x8c1a617bdb47342f9c17ac8750e0b070c372c721", + "gas": "0x529563", + "value": "0x0", + "input": "0x6102c06040523480156200001257600080fd5b506040516200514238038062005142833981016040819052620000359162000333565b82158062000041575081155b806200005757506200005482846200041e565b15155b15620000845760405163462b853960e11b8152600481018490526024810183905260440160405180910390fd5b80606001516001600160401b0316600003620000b357604051637ccf8b6960e01b815260040160405180910390fd5b63ffffffff8c16610280526001600160a01b038b1660808190526040805163f2b4e61760e01b8152905163f2b4e617916004808201926020929091908290030181865afa15801562000109573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012f919062000435565b6001600160a01b0390811660a0528a811660c05289811660e05288811661012052610100889052865161014052602087810151610160526101808790526101a08690528201516101c05260408201516001600160401b039081166101e052606083015116610200526102208490526102408390528151166102a052620001b4620001e5565b620001c190602062000472565b620001ce90608e62000494565b6102605250620004c69a5050505050505050505050565b60006102405161022051620001fb9190620004af565b905090565b6001600160a01b03811681146200021657600080fd5b50565b8051620002268162000200565b919050565b6000604082840312156200023e57600080fd5b604080519081016001600160401b03811182821017156200026f57634e487b7160e01b600052604160045260246000fd5b604052825181526020928301519281019290925250919050565b80516001600160401b03811681146200022657600080fd5b600060808284031215620002b457600080fd5b604051608081016001600160401b0381118282101715620002e557634e487b7160e01b600052604160045260246000fd5b80604052508091508251620002fa8162000200565b815260208381015190820152620003146040840162000289565b6040820152620003276060840162000289565b60608201525092915050565b6000806000806000806000806000806000806102008d8f0312156200035757600080fd5b8c5163ffffffff811681146200036c57600080fd5b9b506200037c60208e0162000219565b9a506200038c60408e0162000219565b99506200039c60608e0162000219565b9850620003ac60808e0162000219565b975060a08d01519650620003c48e60c08f016200022b565b95506101008d015194506101208d015193506101408d015192506101608d01519150620003f68e6101808f01620002a1565b90509295989b509295989b509295989b565b634e487b7160e01b600052601260045260246000fd5b60008262000430576200043062000408565b500690565b6000602082840312156200044857600080fd5b8151620004558162000200565b9392505050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200048f576200048f6200045c565b500290565b60008219821115620004aa57620004aa6200045c565b500190565b600082620004c157620004c162000408565b500490565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516102a051614a74620006ce60003960008181610b280152611d52015260008181610b9601528181611e340152612f2e015260006116060152600081816108800152818161255601528181613ca20152613cdd01526000818161065a015281816119a701528181611a0801526125770152600081816103a101528181611bbe0152611c720152600081816109d801528181611be20152611c9e015260008181610d1601528181611b0b01528181611b600152611b9301526000610970015260008181610cc201528181613e4d015261402b015260008181610a0c015261412b0152600081816109a4015261404c015260008181610abc0152818161285f0152818161335f01526140fa01526000818161045701528181613e6e0152613f72015260008181610507015281816128fd015281816132700152613f43015260008181610c3601528181610f2b0152818161106001526121440152600061093c0152600081816107de015281816117380152818161190501528181611e5c015281816122a8015281816123f9015281816124e001528181612fa701528181613078015281816131300152818161344901528181613502015281816135b901526136720152614a746000f3fe60806040526004361061038a5760003560e01c80636dc86e81116101dc578063addecc0611610102578063c26783e9116100a0578063d28cb06f1161006f578063d28cb06f14610cb0578063e41f96ad14610ce4578063f629dbb514610d04578063fa24f74314610d3857600080fd5b8063c26783e914610c24578063cf09e0d014610c58578063cfcf984b14610c79578063d1ee5e4b14610c9957600080fd5b8063b97cb80f116100dc578063b97cb80f14610b5f578063bbdc02db14610b7f578063bcef3b5514610bc0578063bdb337d114610c0057600080fd5b8063addecc0614610ade578063aef2f96e14610b16578063b74df35a14610b4a57600080fd5b80638417d3c21161017a5780639730163d116101495780639730163d14610a2e5780639840fd8414610a4457806399735e3214610a6a5780639ded395214610aaa57600080fd5b80638417d3c21461095e57806387d34f1614610992578063895dbafe146109c6578063908cb80e146109fa57600080fd5b8063786b844b116101b6578063786b844b146108cc5780637a6bc9e1146108e157806380f323a71461091457806382ff53a11461092a57600080fd5b80636dc86e811461086e57806370872aa5146108a257806374f8bf32146108b757600080fd5b806328c802cd116102c157806349edf35a1161025f5780635c0cba331161022e5780635c0cba33146107cf578063609d3334146108025780636361506d1461081757806364d121361461085757600080fd5b806349edf35a146107235780634e95eb581461074357806354fd4d501461075957806357da950e1461079f57600080fd5b806337b1b2291161029b57806337b1b2291461067c5780633fada3fd146106bc5780634224b1e7146106ee578063423161821461070157600080fd5b806328c802cd1461061c578063324a13c91461063257806335c4377b1461064857600080fd5b80631f8375741161032e578063250e69bd11610308578063250e69bd1461059157806325fc2ace146105d15780632810e1d6146105e65780632845e5bb146105fb57600080fd5b80631f837574146104f5578063200d2ed21461052957806323edb2e01461056457600080fd5b806310fbee281161036a57806310fbee28146104875780631333db2e1461049c57806319effeb4146104b35780631ee5d7c8146104e057600080fd5b80622134cc1461038f578062821de3146103e15780630183fd4414610445575b600080fd5b34801561039b57600080fd5b506103c37f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103ed57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036074013560601c5b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103d8565b34801561045157600080fd5b506104797f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016103d8565b34801561049357600080fd5b50610479600181565b3480156104a857600080fd5b506104b1610d61565b005b3480156104bf57600080fd5b506000546103c39068010000000000000000900467ffffffffffffffff1681565b3480156104ec57600080fd5b506104206111bf565b34801561050157600080fd5b506104207f000000000000000000000000000000000000000000000000000000000000000081565b34801561053557600080fd5b5060005461055790700100000000000000000000000000000000900460ff1681565b6040516103d891906143ee565b34801561057057600080fd5b506003546104209073ffffffffffffffffffffffffffffffffffffffff1681565b34801561059d57600080fd5b506000546105c1907201000000000000000000000000000000000000900460ff1681565b60405190151581526020016103d8565b3480156105dd57600080fd5b50600154610479565b3480156105f257600080fd5b50610557611203565b34801561060757600080fd5b506007546103c39067ffffffffffffffff1681565b34801561062857600080fd5b5061047960085481565b34801561063e57600080fd5b5061047960055481565b34801561065457600080fd5b506104797f000000000000000000000000000000000000000000000000000000000000000081565b34801561068857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610420565b3480156106c857600080fd5b506003546105c19074010000000000000000000000000000000000000000900460ff1681565b6104b16106fc366004614451565b61157b565b34801561070d57600080fd5b506107166121c6565b6040516103d89190614509565b34801561072f57600080fd5b5061047961073e366004614523565b6121e5565b34801561074f57600080fd5b5061047961010081565b34801561076557600080fd5b5060408051808201909152600581527f302e322e300000000000000000000000000000000000000000000000000000006020820152610716565b3480156107ab57600080fd5b506001546002546107ba919082565b604080519283526020830191909152016103d8565b3480156107db57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610420565b34801561080e57600080fd5b50610716612275565b34801561082357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360340135610479565b34801561086357600080fd5b506103c36201518081565b34801561087a57600080fd5b506104797f000000000000000000000000000000000000000000000000000000000000000081565b3480156108ae57600080fd5b50600254610479565b3480156108c357600080fd5b5061042061229a565b3480156108d857600080fd5b506104b16122a6565b3480156108ed57600080fd5b506003546105c1907501000000000000000000000000000000000000000000900460ff1681565b34801561092057600080fd5b5061047960045481565b34801561093657600080fd5b506104207f000000000000000000000000000000000000000000000000000000000000000081565b34801561096a57600080fd5b506104797f000000000000000000000000000000000000000000000000000000000000000081565b34801561099e57600080fd5b506104797f000000000000000000000000000000000000000000000000000000000000000081565b3480156109d257600080fd5b506103c37f000000000000000000000000000000000000000000000000000000000000000081565b348015610a0657600080fd5b506104797f000000000000000000000000000000000000000000000000000000000000000081565b348015610a3a57600080fd5b50610479611fff81565b348015610a5057600080fd5b5061042071f90827f1c53a10cb7a02335b17532000293581565b348015610a7657600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360540135610479565b348015610ab657600080fd5b506104207f000000000000000000000000000000000000000000000000000000000000000081565b348015610aea57600080fd5b50600754610b049068010000000000000000900460ff1681565b60405160ff90911681526020016103d8565b348015610b2257600080fd5b506104207f000000000000000000000000000000000000000000000000000000000000000081565b348015610b5657600080fd5b5061047961254f565b348015610b6b57600080fd5b506104b1610b7a36600461453c565b61259b565b348015610b8b57600080fd5b5060405163ffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016103d8565b348015610bcc57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135610479565b348015610c0c57600080fd5b506007544267ffffffffffffffff90911611156105c1565b348015610c3057600080fd5b506104207f000000000000000000000000000000000000000000000000000000000000000081565b348015610c6457600080fd5b506000546103c39067ffffffffffffffff1681565b348015610c8557600080fd5b506104b1610c94366004614451565b612986565b348015610ca557600080fd5b506103c36206978081565b348015610cbc57600080fd5b506104797f000000000000000000000000000000000000000000000000000000000000000081565b348015610cf057600080fd5b506104b1610cff36600461453c565b612b47565b348015610d1057600080fd5b506104797f000000000000000000000000000000000000000000000000000000000000000081565b348015610d4457600080fd5b50610d4d612f27565b6040516103d89392919061458d565b905090565b600268929eee149b4bd212685403610d815763ab143c066000526004601cfd5b600268929eee149b4bd21268556003547501000000000000000000000000000000000000000000900460ff1615610de4576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075467ffffffffffffffff90811614610e595760005468010000000000000000900467ffffffffffffffff1667ffffffffffffffff16600003610e54576040517fc105260a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eb6565b60005467ffffffffffffffff16610e7390621275006145ea565b67ffffffffffffffff16421015610eb6576040517f04643c3900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035474010000000000000000000000000000000000000000900460ff16610fce57600354600480546040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384169281019290925260248201527f000000000000000000000000000000000000000000000000000000000000000090911690637eee288d90604401600060405180830381600087803b158015610f7157600080fd5b505af1158015610f85573d6000803e3d6000fd5b5050600380547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055506111b09050565b6003805475010000000000000000000000000000000000000000007fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff821617909155600480546040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384169281019290925260248201527f00000000000000000000000000000000000000000000000000000000000000009091169063f3fef3a390604401600060405180830381600087803b1580156110a657600080fd5b505af11580156110ba573d6000803e3d6000fd5b50506003546004546040516000945073ffffffffffffffffffffffffffffffffffffffff9092169250908381818185875af1925050503d806000811461111c576040519150601f19603f3d011682016040523d82523d6000602084013e611121565b606091505b505090508061115c576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460045460405190815273ffffffffffffffffffffffffffffffffffffffff909116907f87e12c2565042763daa6bf5842ed2b6447f17f7e28f9a4905fe3959581396ead9060200160405180910390a2505b600168929eee149b4bd2126855565b6000600681805b60018111156111d7576111d76143bf565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff16919050565b600080600054700100000000000000000000000000000000900460ff166002811115611231576112316143bf565b14611268576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611272612f8e565b90506000816002811115611288576112886143bf565b036112bf576040517f92c506ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018160028111156112d3576112d36143bf565b0361131857600080547fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167001000000000000000000000000000000001790556114cc565b611320613223565b15611344575050600054700100000000000000000000000000000000900460ff1690565b6007544267ffffffffffffffff909116111561138c576040517f04643c3900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075460016801000000000000000090910460ff1610156113d9576040517f344de4bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005541561149057600080547fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167001000000000000000000000000000000001781556001905260066020527f3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a3154600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790556114cc565b600080547fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167002000000000000000000000000000000001790555b600080547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16680100000000000000004267ffffffffffffffff160217908190556040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da60916115549170010000000000000000000000000000000090910460ff16906143ee565b60405180910390a15050600054700100000000000000000000000000000000900460ff1690565b60005471010000000000000000000000000000000000900460ff16156115cd576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602060016115dd8483614616565b6115e7919061462e565b6115f19190614674565b6115fc906020614688565b905060008161162c7f00000000000000000000000000000000000000000000000000000000000000006040614616565b6116369190614616565b905080361461164d57639824bdab6000526004601cfd5b611684367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b61169b600161169161254f565b61073e919061462e565b14611721576116ad600161169161254f565b6116e1367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b6040517ff33fa6cf000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036074013560601c1461190357367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036074013560601c6117c881613401565b6117fe576040517f346119f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051806040016040528061187b8373ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611857573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168191906146c5565b81526020018273ffffffffffffffffffffffffffffffffffffffff166399735e326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ef91906146c5565b90528051600155602001516002555061199e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663664ed8306040518163ffffffff1660e01b81526004016040805180830381865afa15801561196d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199191906146de565b8051600155602001516002555b6002546119cc907f000000000000000000000000000000000000000000000000000000000000000090614616565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013514611a9657600254611a2d907f000000000000000000000000000000000000000000000000000000000000000090614616565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356040517f087b2d7600000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401611718565b600080547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff1671010000000000000000000000000000000000178155611b0760547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b90507f0000000000000000000000000000000000000000000000000000000000000000811015611b8c576040517fa70efcf7000000000000000000000000000000000000000000000000000000008152600481018290527f00000000000000000000000000000000000000000000000000000000000000006024820152604401611718565b6000611bb87f00000000000000000000000000000000000000000000000000000000000000008361462e565b905060007f0000000000000000000000000000000000000000000000000000000000000000611c0f7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff614754565b611c19919061477d565b67ffffffffffffffff16905080821115611c62576040517fa1d6b34700000000000000000000000000000000000000000000000000000000815260048101849052602401611718565b6000611c9867ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001684614688565b611cc2907f00000000000000000000000000000000000000000000000000000000000000006145ea565b9050428167ffffffffffffffff161115611d1a576040517f3680a67800000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152426024820152604401611718565b6040517fa2e62b5a00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2e62b5a90602401602060405180830381865afa158015611dae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd291906146c5565b600855600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff16179055604080517f3c9f397c00000000000000000000000000000000000000000000000000000000815290517f000000000000000000000000000000000000000000000000000000000000000063ffffffff16917f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1691633c9f397c916004808201926020929091908290030181865afa158015611ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee191906147a4565b600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1663ffffffff92909216929092147201000000000000000000000000000000000000021781556007805467ffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090911617905588888281611f7057611f706147ca565b919091013560f81c90506001811115611f8b57611f8b6143bf565b90506000611f9d602160018b8d6147f9565b611fa691614823565b90506000611fb8604160218c8e6147f9565b611fc191614823565b9050611fcd8282613770565b612084611fdd8b6041818f6147f9565b85367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c60015487905b600254612049367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013561207f6121c6565b6139c8565b6120bb83367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c613a9a565b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033560601c179055346004818155604080517fd0e30db000000000000000000000000000000000000000000000000000000000815290517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169363d0e30db093909280820192600092909182900301818588803b1580156121a057600080fd5b505af11580156121b4573d6000803e3d6000fd5b50505050505050505050505050505050565b6060610d5c60886121d561254f565b6121e0906020614688565b613ba4565b60006121ef61254f565b8210612227576040517fa6c661fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61226f612235836020614688565b612240906088614616565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003013590565b92915050565b6060610d5c605461228461254f565b61228f906020614688565b6121e0906034614616565b600060068160016111c6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612311573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612335919061485f565b1561236c576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005468010000000000000000900467ffffffffffffffff1667ffffffffffffffff166000036123c8576040517fc105260a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0314d2b30000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690630314d2b390602401602060405180830381865afa158015612455573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612479919061485f565b9050806124b2576040517f4851bd9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f17cf21a90000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906317cf21a990602401600060405180830381600087803b15801561253957600080fd5b505af192505050801561254a575060015b505b50565b6000610d5c7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614674565b60008054700100000000000000000000000000000000900460ff1660028111156125c7576125c76143bf565b146125fe576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084846000818110612613576126136147ca565b919091013560f81c9050600181111561262e5761262e6143bf565b90506000600681836001811115612647576126476143bf565b6001811115612658576126586143bf565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff16036126b857806040517f25822d380000000000000000000000000000000000000000000000000000000081526004016117189190614881565b600554156127705760016005546126cf919061462e565b8314612707576040517fa6c661fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612710836121e5565b821461272057816116e1846121e5565b6001816001811115612734576127346143bf565b1461276b576040517f69ed70ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61277a565b61277a8383613bf6565b600080600061278886613c77565b9194509250905061280061279f886001818c6147f9565b86336127d5367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b88888c898e6040516020016127ec91815260200190565b6040516020818303038152906040526139c8565b61280984613d10565b604080518781526020810187905233917f5a8d9d181e6a59fe5477a50721401b6332a810b9183e15ac62d386379a05a717910160405180910390a26001846001811115612858576128586143bf565b036128e2577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ece20f366040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156128c557600080fd5b505af11580156128d9573d6000803e3d6000fd5b5050505061297c565b60008460018111156128f6576128f66143bf565b0361297c577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ece20f366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561296357600080fd5b505af1158015612977573d6000803e3d6000fd5b505050505b5050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156129b2576129b26143bf565b146129e9576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007544267ffffffffffffffff90911611612a30576040517fdf469ccb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082826000818110612a4557612a456147ca565b919091013560f81c90506001811115612a6057612a606143bf565b90506000600681836001811115612a7957612a796143bf565b6001811115612a8a57612a8a6143bf565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff1614612aea57806040517f7141297a0000000000000000000000000000000000000000000000000000000081526004016117189190614881565b612b38612afa83600181876147f9565b8333612b30367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b600154612012565b612b428133613a9a565b505050565b60008054700100000000000000000000000000000000900460ff166002811115612b7357612b736143bf565b14612baa576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612bb330613401565b612be9576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001612bf3612f8e565b6002811115612c0457612c046143bf565b03612c3b576040517f346119f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85473ffffffffffffffffffffffffffffffffffffffff16612cb55760006040517f25822d380000000000000000000000000000000000000000000000000000000081526004016117189190614881565b600160005260066020527f3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a315473ffffffffffffffffffffffffffffffffffffffff1615612d315760016040517f7141297a0000000000000000000000000000000000000000000000000000000081526004016117189190614881565b600084846000818110612d4657612d466147ca565b919091013560f81c90506001811115612d6157612d616143bf565b90506001816001811115612d7757612d776143bf565b14612dae576040517f69ed70ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612db88383613bf6565b6000806000612dc686613c77565b91945092509050612ddd61279f886001818c6147f9565b3360066000866001811115612df457612df46143bf565b6001811115612e0557612e056143bf565b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760088282829054906101000a900460ff16612e709190614895565b92506101000a81548160ff021916908360ff1602179055506206978067ffffffffffffffff1642612ea19190614616565b600780547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055612ee5866001614616565b60055560405186815233907f7a180232c19fd38c83e493856a42688c477bae7e82039103b2c1ea6a6162e5299060200160405180910390a25050505050505050565b60008060607f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135612f83612275565b925092509250909192565b600073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036074013560601c1461321d576000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036074013560601c6040517f34a346ea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906334a346ea90602401602060405180830381865afa1580156130c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e5919061485f565b8061319b57506040517f5958a19300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690635958a19390602401602060405180830381865afa158015613177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319b919061485f565b156131a857600191505090565b8073ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061321791906148ba565b91505090565b50600290565b600080805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85473ffffffffffffffffffffffffffffffffffffffff16158015906132fd57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9df65eb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132fd919061485f565b156133125761330c6000613d10565b50600190565b600160005260066020527f3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a315473ffffffffffffffffffffffffffffffffffffffff16158015906133ec57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9df65eb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ec919061485f565b156133fb5761330c6001613d10565b50600090565b6040517fee658e4500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063ee658e4590602401602060405180830381865afa158015613492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b6919061485f565b801561356d57506040517f04e50fed00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f000000000000000000000000000000000000000000000000000000000000000016906304e50fed90602401602060405180830381865afa158015613549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061356d919061485f565b801561362657506040517f34a346ea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f000000000000000000000000000000000000000000000000000000000000000016906334a346ea90602401602060405180830381865afa158015613600573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613624919061485f565b155b80156136df57506040517f5958a19300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f00000000000000000000000000000000000000000000000000000000000000001690635958a19390602401602060405180830381865afa1580156136b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136dd919061485f565b155b801561226f575060018273ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015613733573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375791906148ba565b6002811115613768576137686143bf565b141592915050565b4381106137b2576040517f25bfb0a400000000000000000000000000000000000000000000000000000000815260048101829052436024820152604401611718565b6000806137bf834361462e565b905061010081116137d3578240915061393f565b611fff81116139045760008071f90827f1c53a10cb7a02335b17532000293573ffffffffffffffffffffffffffffffffffffffff168560405160200161381b91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052613853916148db565b600060405180830381855afa9150503d806000811461388e576040519150601f19603f3d011682016040523d82523d6000602084013e613893565b606091505b50915091508115806138a757508051602014155b156138e7576040517f0f0b8f8100000000000000000000000000000000000000000000000000000000815260048101869052436024820152604401611718565b808060200190518101906138fb91906146c5565b9350505061393f565b6040517f0f0b8f8100000000000000000000000000000000000000000000000000000000815260048101849052436024820152604401611718565b8161397f576040517f0f0b8f8100000000000000000000000000000000000000000000000000000000815260048101849052436024820152604401611718565b8382146139c2576040517f80b1ae510000000000000000000000000000000000000000000000000000000081526004810185905260248101839052604401611718565b50505050565b6001891015613a03576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000886001811115613a1757613a176143bf565b03613a3257613a2d8a8a89898989898989613e42565b613a8e565b6001886001811115613a4657613a466143bf565b03613a5c57613a2d8a8a89898989898989614020565b6040517f69ed70ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050505050565b8060066000846001811115613ab157613ab16143bf565b6001811115613ac257613ac26143bf565b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760088282829054906101000a900460ff16613b2d9190614895565b92506101000a81548160ff021916908360ff160217905550613b4d6141cc565b816001811115613b5f57613b5f6143bf565b60405173ffffffffffffffffffffffffffffffffffffffff8316907f62f393acfb3d3425116fe9be7a6509a4b652bda54fdac2df2b7273135ecd58e790600090a35050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b613bfe61254f565b8210613c36576040517fa6c661fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80613c40836121e5565b0361254a576040517fbbcafae600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008080808415613c9557613c9061073e60018761462e565b613c99565b6001545b90506000613cc77f000000000000000000000000000000000000000000000000000000000000000087614688565b600254613cd49190614616565b90506000613d027f0000000000000000000000000000000000000000000000000000000000000000836145ea565b929791965091945092505050565b60066000826001811115613d2657613d266143bf565b6001811115613d3757613d376143bf565b8152602081019190915260400160002080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556001816001811115613d8157613d816143bf565b03613d8c5760006005555b60075468010000000000000000900460ff16600003613dd7576040517f344de4bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff6801000000000000000080840482169290920116027fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff90911617905561254c6142b4565b6000878787878787877f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000600854604051602001613ea99a999897969594939291906148f7565b6040516020818303038152906040528051906020012090506000888b8b604051602001613ed8939291906149a5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fab750e75000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ab750e7590613f9c9084907f00000000000000000000000000000000000000000000000000000000000000009087906004016149e4565b602060405180830381865afa158015613fb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fdd919061485f565b614013576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050505050565b6000878787878787877f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006008546040516020016140879a999897969594939291906148f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905280516020909101207fab750e75000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ab750e7590614155908d908d907f0000000000000000000000000000000000000000000000000000000000000000908790600401614a09565b602060405180830381865afa158015614172573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614196919061485f565b613a8e576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141d661436c565b90507fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000167ffffffffffffffff82160161423e5750600780547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff179055565b600061424a82426145ea565b6007549091506142779067ffffffffffffffff808416911667ffffffffffffffff16808218908211021890565b600780547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff929092169190911790555050565b60006142be61436c565b90507fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000167ffffffffffffffff8216016143265750600780547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff179055565b61433081426145ea565b600780547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff9290921691909117905550565b60075460009060026801000000000000000090910460ff161061439157506201518090565b60075468010000000000000000900460ff166001036143b257506206978090565b5067ffffffffffffffff90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310614402576144026143bf565b91905290565b60008083601f84011261441a57600080fd5b50813567ffffffffffffffff81111561443257600080fd5b60208301915083602082850101111561444a57600080fd5b9250929050565b6000806020838503121561446457600080fd5b823567ffffffffffffffff81111561447b57600080fd5b61448785828601614408565b90969095509350505050565b60005b838110156144ae578181015183820152602001614496565b838111156139c25750506000910152565b600081518084526144d7816020860160208601614493565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061451c60208301846144bf565b9392505050565b60006020828403121561453557600080fd5b5035919050565b6000806000806060858703121561455257600080fd5b843567ffffffffffffffff81111561456957600080fd5b61457587828801614408565b90989097506020870135966040013595509350505050565b63ffffffff841681528260208201526060604082015260006145b260608301846144bf565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851680830382111561460d5761460d6145bb565b01949350505050565b60008219821115614629576146296145bb565b500190565b600082821015614640576146406145bb565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261468357614683614645565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146c0576146c06145bb565b500290565b6000602082840312156146d757600080fd5b5051919050565b6000604082840312156146f057600080fd5b6040516040810181811067ffffffffffffffff8211171561473a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052825181526020928301519281019290925250919050565b600067ffffffffffffffff83811690831681811015614775576147756145bb565b039392505050565b600067ffffffffffffffff8084168061479857614798614645565b92169190910492915050565b6000602082840312156147b657600080fd5b815163ffffffff8116811461451c57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000808585111561480957600080fd5b8386111561481657600080fd5b5050820193919092039150565b8035602083101561226f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b60006020828403121561487157600080fd5b8151801515811461451c57600080fd5b6020810160028310614402576144026143bf565b600060ff821660ff84168060ff038211156148b2576148b26145bb565b019392505050565b6000602082840312156148cc57600080fd5b81516003811061451c57600080fd5b600082516148ed818460208701614493565b9190910192915050565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008b60601b16815289601482015288603482015260007fffffffffffffffff000000000000000000000000000000000000000000000000808a60c01b16605484015288605c840152808860c01b16607c84015250855161497e816084850160208a01614493565b608492019182019490945260a481019290925260c482015260e40198975050505050505050565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008460601b168152818360148301376000910160140190815292915050565b6060815260006149f760608301866144bf565b60208301949094525060400152919050565b6060815283606082015283856080830137600060808583010152600060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f87011683010190508360208301528260408301529594505050505056fea164736f6c634300080f000a000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000bfb20170b82c474b136bc5a062aca47a3cb8cf680000000000000000000000005af90fde02b46e202f6232b3ede25b3f602ac67300000000000000000000000042fa446d95a5b61a7be02949042954a60315fb0f0000000000000000000000005b997cd8fafa026882aec7d0558c9cc47221f84ee8dc2300cf325b2527cbfa5e664a70acc40a9f2fc0617bd35cdfa61652a5fc307713943c2c2412314b135c5606cdb3923a54f7555d91d9f31c2f64e34e16f2f4002663a1072dc1e1938e13d3b269fff88e843eb4ef76d6c6953dde4f5152973bd14ddabfc0ad1dd737d6e5917cf271fd479bd539c9b3d85a602589c679a9983a00000000000000000000000000000000000000000000000000000000000ba5e00000000000000000000000000000000000000000000000000000000000000258000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000030e172aac675c9fe5a64792f92c9fd4d3e7ca9da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006a3c7b2c0000000000000000000000000000000000000000000000000000000000000002", + "nonce": "0xb7", + "chainId": "0x88bb0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x18aa0f", + "logs": [ + { + "address": "0x30adfdab722d36b26f12f562d7cadf4cd8831c58", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0x13b641702df1d4e8f177d5fe5aee3991bb7daab31d0dc1920e425da3a3ed9995", + "blockNumber": "0x375dde", + "blockTimestamp": "0x6aa92fe0", + "transactionHash": "0x0bd7e6005a11f556741d5626de3034ee7ef73b87b074f988777fc46f56769b4b", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000100004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x0bd7e6005a11f556741d5626de3034ee7ef73b87b074f988777fc46f56769b4b", + "transactionIndex": "0x0", + "blockHash": "0x13b641702df1d4e8f177d5fe5aee3991bb7daab31d0dc1920e425da3a3ed9995", + "blockNumber": "0x375dde", + "gasUsed": "0x18aa0f", + "effectiveGasPrice": "0x3d5f243f", + "from": "0x8c1a617bdb47342f9c17ac8750e0b070c372c721", + "to": null, + "contractAddress": "0x30adfdab722d36b26f12f562d7cadf4cd8831c58" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x5d8de6", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x28e7e9d1df559939ea55a4c814edb7c7a959ff938d931f6c08025d685ca03c6f", + "transactionIndex": "0x14", + "blockHash": "0xbab7877ee3d4d4d026c849dbf5af3979777acbfe876120fe40bbabc3f4a52a4c", + "blockNumber": "0x375ddf", + "gasUsed": "0x3f869b", + "effectiveGasPrice": "0x448a04dc", + "from": "0x8c1a617bdb47342f9c17ac8750e0b070c372c721", + "to": null, + "contractAddress": "0x2504b1c3b78b2711e24eadf7ea077b0ca1b91859" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1789472750703, + "chain": 560048, + "commit": "3685850" +} \ No newline at end of file From 2272a751de72f593e085f3dcbee068b1c46d4cff Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Tue, 15 Sep 2026 08:03:50 -0400 Subject: [PATCH 09/14] Link base/contracts dependencies for source verification forge verify-contract runs with lib/contracts as the project root, which is the only root the target paths resolve from. base/contracts imports its own dependencies through literal lib//... paths that resolve against that root as well, but the build keeps them a level up in active/evm/lib, so the submitted standard JSON omitted them and Etherscan failed to compile. Link the four dependencies in for the duration of each verify target and remove them afterwards. Leaving them in place is not an option: the build then matches those imports in two locations and fails as ambiguous. --- .../tasks/2026-09-14-cobalt-upgrade/Makefile | 67 ++++++++++++------- 1 file changed, 43 insertions(+), 24 deletions(-) diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/Makefile b/active/evm/tasks/2026-09-14-cobalt-upgrade/Makefile index 4dcd1ce71..a1c524e32 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/Makefile +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/Makefile @@ -100,9 +100,10 @@ deploy: deploy-core deploy-proofs # base/contracts pins OptimismPortal2, SystemConfig, DisputeGameFactory and Proxy to # 5000 optimizer runs, and ProtocolVersions and AggregateVerifier to 999999, and builds -# both at cancun with no bytecode hash. Reproducing those settings is what makes the -# deployed bytecode verifiable, hence the two steps and the compiler overrides, which -# match the ones the verify targets below already use. +# with no bytecode hash. Reproducing those settings is what makes the deployed bytecode +# verifiable, hence the two steps and the compiler overrides, which are kept identical +# to the ones the verify targets below use. The evm version request is inert at solc +# 0.8.15, which caps out at london, but it is set on both sides so they cannot diverge. COBALT_BUILD = FOUNDRY_OPTIMIZER=true FOUNDRY_BYTECODE_HASH=none FOUNDRY_EVM_VERSION=cancun .PHONY: deploy-core @@ -121,6 +122,20 @@ deploy-proofs: ## # Source verification ## +# Verification runs with lib/contracts as the project root, because that is the only +# root from which the target paths resolve. base/contracts then imports its own +# dependencies through literal `lib//...` paths, which resolve against that root +# too, but the build keeps them a level up in active/evm/lib. Link them in for the +# duration of the command and remove them afterwards: left in place, every such import +# matches in two locations and the build fails as ambiguous. +VERIFY_DEPS = openzeppelin-contracts openzeppelin-contracts-upgradeable solady solmate +CONTRACTS_LIB = $(PROJECT_DIR)/lib/contracts/lib +LINK_VERIFY_DEPS = mkdir -p $(CONTRACTS_LIB); \ + trap 'rm -f $(foreach d,$(VERIFY_DEPS),$(CONTRACTS_LIB)/$(d)); rmdir $(CONTRACTS_LIB) 2>/dev/null || true' EXIT; \ + for d in $(VERIFY_DEPS); do ln -sfn ../../$$d $(CONTRACTS_LIB)/$$d; done + +VERIFY_ENV = RUST_LOG=off FOUNDRY_BYTECODE_HASH=none FOUNDRY_EVM_VERSION=cancun + VERIFY_COMMON = --root $(PROJECT_DIR)/lib/contracts --compilation-profile default \ --chain $(L1_CHAIN_ID) --compiler-version v0.8.15+commit.e14f2714 \ --verifier custom --verifier-url "https://api.etherscan.io/v2/api?chainid=$(L1_CHAIN_ID)" \ @@ -131,33 +146,37 @@ verify-core: ifndef VERIFIER_API_KEY $(error VERIFIER_API_KEY is not set) endif - cd $(PROJECT_DIR) && RUST_LOG=off FOUNDRY_BYTECODE_HASH=none FOUNDRY_OPTIMIZER_RUNS=5000 FOUNDRY_EVM_VERSION=cancun \ - $(MISE_EXEC) forge verify-contract $(NEW_OPTIMISM_PORTAL_IMPL) src/L1/OptimismPortal2.sol:OptimismPortal2 \ - --constructor-args $(OPTIMISM_PORTAL_IMPL_CTOR_ARGS) \ - --num-of-optimizations 5000 $(VERIFY_COMMON) - cd $(PROJECT_DIR) && RUST_LOG=off FOUNDRY_BYTECODE_HASH=none FOUNDRY_OPTIMIZER_RUNS=5000 FOUNDRY_EVM_VERSION=cancun \ - $(MISE_EXEC) forge verify-contract $(NEW_SYSTEM_CONFIG_IMPL) src/L1/SystemConfig.sol:SystemConfig \ - --num-of-optimizations 5000 $(VERIFY_COMMON) - cd $(PROJECT_DIR) && RUST_LOG=off FOUNDRY_BYTECODE_HASH=none FOUNDRY_OPTIMIZER_RUNS=5000 FOUNDRY_EVM_VERSION=cancun \ - $(MISE_EXEC) forge verify-contract $(NEW_DISPUTE_GAME_FACTORY_IMPL) src/L1/proofs/DisputeGameFactory.sol:DisputeGameFactory \ - --num-of-optimizations 5000 $(VERIFY_COMMON) - cd $(PROJECT_DIR) && RUST_LOG=off FOUNDRY_BYTECODE_HASH=none FOUNDRY_OPTIMIZER_RUNS=5000 FOUNDRY_EVM_VERSION=cancun \ - $(MISE_EXEC) forge verify-contract $(PROTOCOL_VERSIONS_PROXY) src/universal/Proxy.sol:Proxy \ - --constructor-args $(PROTOCOL_VERSIONS_PROXY_CTOR_ARGS) \ - --num-of-optimizations 5000 $(VERIFY_COMMON) + @set -e; $(LINK_VERIFY_DEPS); \ + cd $(PROJECT_DIR); \ + $(VERIFY_ENV) FOUNDRY_OPTIMIZER_RUNS=5000 \ + $(MISE_EXEC) forge verify-contract $(NEW_OPTIMISM_PORTAL_IMPL) src/L1/OptimismPortal2.sol:OptimismPortal2 \ + --constructor-args $(OPTIMISM_PORTAL_IMPL_CTOR_ARGS) \ + --num-of-optimizations 5000 $(VERIFY_COMMON); \ + $(VERIFY_ENV) FOUNDRY_OPTIMIZER_RUNS=5000 \ + $(MISE_EXEC) forge verify-contract $(NEW_SYSTEM_CONFIG_IMPL) src/L1/SystemConfig.sol:SystemConfig \ + --num-of-optimizations 5000 $(VERIFY_COMMON); \ + $(VERIFY_ENV) FOUNDRY_OPTIMIZER_RUNS=5000 \ + $(MISE_EXEC) forge verify-contract $(NEW_DISPUTE_GAME_FACTORY_IMPL) src/L1/proofs/DisputeGameFactory.sol:DisputeGameFactory \ + --num-of-optimizations 5000 $(VERIFY_COMMON); \ + $(VERIFY_ENV) FOUNDRY_OPTIMIZER_RUNS=5000 \ + $(MISE_EXEC) forge verify-contract $(PROTOCOL_VERSIONS_PROXY) src/universal/Proxy.sol:Proxy \ + --constructor-args $(PROTOCOL_VERSIONS_PROXY_CTOR_ARGS) \ + --num-of-optimizations 5000 $(VERIFY_COMMON) .PHONY: verify-proofs verify-proofs: ifndef VERIFIER_API_KEY $(error VERIFIER_API_KEY is not set) endif - cd $(PROJECT_DIR) && RUST_LOG=off FOUNDRY_BYTECODE_HASH=none FOUNDRY_OPTIMIZER_RUNS=999999 FOUNDRY_EVM_VERSION=cancun \ - $(MISE_EXEC) forge verify-contract $(PROTOCOL_VERSIONS_IMPL) src/L1/ProtocolVersions.sol:ProtocolVersions \ - --num-of-optimizations 999999 $(VERIFY_COMMON) - cd $(PROJECT_DIR) && RUST_LOG=off FOUNDRY_BYTECODE_HASH=none FOUNDRY_OPTIMIZER_RUNS=999999 FOUNDRY_EVM_VERSION=cancun \ - $(MISE_EXEC) forge verify-contract $(NEW_AGGREGATE_VERIFIER) src/L1/proofs/AggregateVerifier.sol:AggregateVerifier \ - --constructor-args $(AGGREGATE_VERIFIER_CTOR_ARGS) \ - --num-of-optimizations 999999 $(VERIFY_COMMON) + @set -e; $(LINK_VERIFY_DEPS); \ + cd $(PROJECT_DIR); \ + $(VERIFY_ENV) FOUNDRY_OPTIMIZER_RUNS=999999 \ + $(MISE_EXEC) forge verify-contract $(PROTOCOL_VERSIONS_IMPL) src/L1/ProtocolVersions.sol:ProtocolVersions \ + --num-of-optimizations 999999 $(VERIFY_COMMON); \ + $(VERIFY_ENV) FOUNDRY_OPTIMIZER_RUNS=999999 \ + $(MISE_EXEC) forge verify-contract $(NEW_AGGREGATE_VERIFIER) src/L1/proofs/AggregateVerifier.sol:AggregateVerifier \ + --constructor-args $(AGGREGATE_VERIFIER_CTOR_ARGS) \ + --num-of-optimizations 999999 $(VERIFY_COMMON) ## # Validation files From 77364e76793c78fd6fdbc5372bc1419fb8d10543 Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Tue, 15 Sep 2026 08:11:15 -0400 Subject: [PATCH 10/14] Correct Zeronet Azul and Beryl activation timestamps The schedule assumed a re-genesised Zeronet had every fork through Beryl active at the genesis timestamp. Azul and Beryl actually activated after it, at genesis +300s and +600s, per the ZERONET chain config in base/base, which is what the nodes fork on. Ids 10 and 11 were therefore importing activations five and ten minutes earlier than they happened. Every other id matches the node config. The schedule is an initialize argument passed in the upgrade transaction, and neither the deployed AggregateVerifier nor the registry bakes it in, so nothing needs redeploying. --- .../tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md | 10 +++++++--- .../2026-09-14-cobalt-upgrade/config/zeronet/.env | 14 +++++++++----- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md b/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md index 7635413b0..b4bd6ba44 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md @@ -34,9 +34,13 @@ Open `config//.env` and confirm every value, in particular: - `PROTOCOL_VERSIONS_INITIAL_SCHEDULE` — the activation timestamp imported for each upgrade id. Ids should stay aligned with the Base mainnet registry so that a given index means the same fork - on every chain. Entries may be `0` for an unscheduled fork. Zeronet was re-genesised with every - fork through Beryl already active, so ids 0–11 carry the genesis timestamp and Cobalt (id 12) - is `0`. + on every chain. Entries may be `0` for an unscheduled fork. Every entry except Cobalt's is a fork + that has already happened, so each one must match the network's chain config in + [base/base](https://github.com/base/base/blob/main/crates/common/chains/src/config.rs), which is + what the nodes actually fork on. Do not assume a re-genesised network has everything active at the + genesis timestamp: on Zeronet, Azul and Beryl activated a few minutes after genesis, and id 7 + (PectraBlobSchedule) is unscheduled at `0`. Cobalt (id 12) is the activation this task schedules, + and the node config carries no Cobalt timestamp until its own rollout lands. - `PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION` — must be non-zero and fit in 128 bits. The comment above it gives the `cast` command to re-derive the packed value from the human-readable version. - `PROTOCOL_VERSIONS_INCIDENT_RESPONDER` — the address allowed to use the incident path. diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env index 23fb419c4..2a6095d78 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env @@ -9,14 +9,18 @@ OLD_AGGREGATE_VERIFIER=0x7dd0f51C71DA5243174FA829c8cf3385B06833b0 # ProtocolVersions initial state. # -# Zeronet re-genesised at 1782348588, so every fork through Beryl is active from -# genesis. Ids are kept aligned with the Base mainnet registry so that an index means -# the same fork on every chain: +# Zeronet re-genesised at 1782348588. Every fork through Jovian is active from genesis, +# but Azul and Beryl activated shortly after it, so they carry their own timestamps. +# Ids are kept aligned with the Base mainnet registry so that an index means the same +# fork on every chain. Timestamps must match the node's ZERONET chain config in +# base/base crates/common/chains/src/config.rs: # 0 genesis, 1 canyon, 2 delta, 3 ecotone, 4 fjord, 5 granite, 6 holocene, -# 7 pectraBlobSchedule (unscheduled), 8 isthmus, 9 jovian, 10 azul, 11 beryl, +# 7 pectraBlobSchedule (unscheduled), 8 isthmus, 9 jovian, all at 1782348588, +# 10 azul -> 1782348888, genesis + 300s +# 11 beryl -> 1782349188, genesis + 600s # 12 cobalt -> 1789574400, which is 2026-09-16 16:00:00 UTC: # date -u -r 1789574400 -PROTOCOL_VERSIONS_INITIAL_SCHEDULE=1782348588,1782348588,1782348588,1782348588,1782348588,1782348588,1782348588,0,1782348588,1782348588,1782348588,1782348588,1789574400 +PROTOCOL_VERSIONS_INITIAL_SCHEDULE=1782348588,1782348588,1782348588,1782348588,1782348588,1782348588,1782348588,0,1782348588,1782348588,1782348888,1782349188,1789574400 # Minimum protocol version, set to v1.3.2. The OP protocol version format packs the # low 16 bytes as major || minor || patch || pre-release, four bytes each, so v1.3.2 From 231bd28400c50e7eaf5c885917d2077390579c6a Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Tue, 15 Sep 2026 09:01:38 -0400 Subject: [PATCH 11/14] add validation files --- .../zeronet/validations/base-signer.json | 292 ++++++++++++++++++ .../validations/security-council-signer.json | 286 +++++++++++++++++ 2 files changed, 578 insertions(+) create mode 100644 active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/validations/base-signer.json create mode 100644 active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/validations/security-council-signer.json diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/validations/base-signer.json b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/validations/base-signer.json new file mode 100644 index 000000000..f45e12cff --- /dev/null +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/validations/base-signer.json @@ -0,0 +1,292 @@ +{ + "cmd": "PROXY_ADMIN_OWNER=0x3d59999977e0896ee1f8783bb8251df16fb483e9 L1_PROXY_ADMIN=0xf2d2c097be80fb87844b7e259ef67efb98b26f87 OPTIMISM_PORTAL=0x7e3b97c95c823f385ff6770411f6e12f8e09ac9b SYSTEM_CONFIG=0x0a111c7980152bde41d71f48e2e1d8184f5f6187 DISPUTE_GAME_FACTORY_PROXY=0xd930e0cebd52d7c77b8f900de242e818506c5474 OLD_OPTIMISM_PORTAL_IMPL=0xc1ad6d4e8da1403b9eb6a99491899577050f4863 OLD_SYSTEM_CONFIG_IMPL=0xb54d7ff110995029b89a0045128cae42c931aa83 OLD_DISPUTE_GAME_FACTORY_IMPL=0x3a0a9e5b91709bba0bcb4bb4b66730dcfef6e926 OLD_AGGREGATE_VERIFIER=0x7dd0f51C71DA5243174FA829c8cf3385B06833b0 NEW_OPTIMISM_PORTAL_IMPL=0xb4aC39aadC3130fEf3F348ECe8D033540dF12089 NEW_SYSTEM_CONFIG_IMPL=0x210303565CBf0b8c0d2837523816f815F02ad5eB NEW_DISPUTE_GAME_FACTORY_IMPL=0xBeE0c6DD082D7A483Da4bD6e56C7e5292BDa7Ce8 NEW_AGGREGATE_VERIFIER=0x2504B1c3B78B2711e24eadF7eA077b0cA1b91859 PROTOCOL_VERSIONS_PROXY=0x30e172aaC675c9fe5A64792F92C9fD4d3E7cA9Da PROTOCOL_VERSIONS_IMPL=0x30ADFDAB722D36B26f12f562d7cAdF4Cd8831c58 PROTOCOL_VERSIONS_INCIDENT_RESPONDER=0x856611ed7e07d83243b15e93f6321f2df6865852 PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION=79228162569604569823262539776 PROTOCOL_VERSIONS_INITIAL_SCHEDULE=1782348588,1782348588,1782348588,1782348588,1782348588,1782348588,1782348588,0,1782348588,1782348588,1782348888,1782349188,1789574400 mise exec -- forge script --rpc-url https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net tasks/2026-09-14-cobalt-upgrade/script/ExecuteCobaltUpgrade.s.sol:ExecuteCobaltUpgrade --sig sign(address[]) [0x856611ed7e07d83243b15e93f6321f2df6865852] --sender 0x2c1475476B586d66a85bC65A5aB396BBbAa4f3aD", + "ledgerId": 1, + "rpcUrl": "https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net", + "expectedDomainAndMessageHashes": { + "address": "0x3d59999977e0896ee1f8783bB8251DF16fb483E9", + "domainHash": "0xc88eae2baaa4c8513a3d87913666de9463f106158aaf8be5cd31588215ccd5c4", + "messageHash": "0x265bdb16032513574e02db5ad450c5345e7304d0fa36d2a009c86e6d4221846e" + }, + "stateOverrides": [ + { + "name": "Proxy Admin Owner - Zeronet", + "address": "0x3d59999977e0896ee1f8783bB8251DF16fb483E9", + "overrides": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Override the threshold to 1 so the transaction simulation can occur.", + "allowDifference": false + } + ] + }, + { + "name": "CB Signer Safe - Zeronet", + "address": "0x856611eD7E07D83243b15E93f6321f2df6865852", + "overrides": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Override the threshold to 1 so the transaction simulation can occur.", + "allowDifference": false + }, + { + "key": "0x22d07ae145e29a1354330c3907e8569a367528393f8a5a0438bc67b7b9c15f52", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Simulates an approval from msg.sender in order for the task simulation to succeed.", + "allowDifference": false + } + ] + } + ], + "stateChanges": [ + { + "name": "SystemConfig - Zeronet", + "address": "0x0a111C7980152bDe41D71f48e2E1d8184f5f6187", + "changes": [ + { + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "before": "0x000000000000000000000000b54d7ff110995029b89a0045128cae42c931aa83", + "after": "0x000000000000000000000000210303565cbf0b8c0d2837523816f815f02ad5eb", + "description": "Upgrades SystemConfig to the Cobalt implementation, which is the build that keeps Zeronet's patched MAX_GAS_LIMIT of 2,000,000,000 (version 3.14.0+max-gas-limit-2000M). The gas limit and pause state are asserted unchanged.", + "allowDifference": false + } + ] + }, + { + "name": "ProtocolVersions - Zeronet", + "address": "0x30e172aaC675c9fe5A64792F92C9fD4d3E7cA9Da", + "changes": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Sets Initializable._initialized to 1, recording that the new ProtocolVersions proxy has run its reinitializer(1) initialize call.", + "allowDifference": false + }, + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x000000000000000000000000000000000000000000000000000000000000000d", + "description": "Sets the _timestamps array length to 13, one entry per registered upgrade (ids 0-12, genesis through cobalt).", + "allowDifference": false + }, + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x000000000000000000000000000000000000000000000000000000000000000e", + "description": "Sets the _upgradeScheduleId array length to 14: the bytes32(0) seed at index 0 plus one hash-chain link for each of the 13 registered upgrades.", + "allowDifference": false + }, + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x0000000000000000000000000000000000000001000000030000000200000000", + "description": "Sets minimumProtocolVersion to v1.3.2. The OP format packs the low 16 bytes as major || minor || patch || pre-release, four bytes each, so v1.3.2 is 0x00000001000000030000000200000000 (79228162569604569823262539776).", + "allowDifference": false + }, + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x000000000000000000000000856611ed7e07d83243b15e93f6321f2df6865852", + "description": "Sets incidentResponder to the Coinbase multisig. This is a restricted role that can only push an already-scheduled, not-yet-activated upgrade further into the future.", + "allowDifference": false + }, + { + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x00000000000000000000000030adfdab722d36b26f12f562d7cadf4cd8831c58", + "description": "Upgrades the ProtocolVersions proxy from the zero address to the registry implementation (version 1.0.0). The proxy was deployed uninitialized, so this is the upgradeAndCall that also seeds the schedule.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x0166d3f8da856c31a45b46260bff4abea91e079f65bb1d19caf72f05113ff7c7", + "description": "_upgradeScheduleId[1]: hash-chain link committing to upgrade id 0 (genesis) at 1782348588.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x7dd0a3d5cf72f45456110f9b003c1def43a4e5594271cd1f00f9f9f031411212", + "description": "_upgradeScheduleId[2]: hash-chain link committing to upgrade id 1 (canyon) at 1782348588.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad1", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x7fd31e37e400843a4ab62b3a757975732b70bf5f37dc034a6b0401ce2d9b56f6", + "description": "_upgradeScheduleId[3]: hash-chain link committing to upgrade id 2 (delta) at 1782348588.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0xd8876ffe4b1bfdfaaf050a75289034bb88a6f0c773b07055b163de2c36ffb284", + "description": "_upgradeScheduleId[4]: hash-chain link committing to upgrade id 3 (ecotone) at 1782348588.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad3", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x0bf104b9a877be6444d1fb0e6bba7df327e35975910a5a3b985ab7c3d02350c1", + "description": "_upgradeScheduleId[5]: hash-chain link committing to upgrade id 4 (fjord) at 1782348588.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad4", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x59d5d17a92c9e1be92a97f47e70409e37ae90ad3105c5714b3867ae2c98f0bf2", + "description": "_upgradeScheduleId[6]: hash-chain link committing to upgrade id 5 (granite) at 1782348588.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad5", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x0335ac8de8507343a45ee1cdb53ba505eaea168ed5cc79a0e9a5e7a51c1b799e", + "description": "_upgradeScheduleId[7]: hash-chain link committing to upgrade id 6 (holocene) at 1782348588.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad6", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0xc3ed410e08f5d2805b96e95e5b153f8ab9b0506de56b9a799f1cd483850c4e0f", + "description": "_upgradeScheduleId[8]: hash-chain link committing to upgrade id 7 (pectraBlobSchedule), which stays unscheduled at 0.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad7", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0xb9cbaba7c1dbba36145e42340250daf38d32e6384e90d76cd8eeff2b42685623", + "description": "_upgradeScheduleId[9]: hash-chain link committing to upgrade id 8 (isthmus) at 1782348588.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad8", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x06ac8fad7216097e71e1d41a3c1b7f342f9115b20cff01bf0df808bdd4bb54a3", + "description": "_upgradeScheduleId[10]: hash-chain link committing to upgrade id 9 (jovian) at 1782348588.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad9", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x7c085c72396f9d01629fa24f3a1b7c7a36a9e74019a6006ffe3fe1702b6e1628", + "description": "_upgradeScheduleId[11]: hash-chain link committing to upgrade id 10 (azul) at 1782348888.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ada", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x6731b82c511c2773e9f127f8c57ab260410dc30d9d69cbeeb10925b3c45fc6bc", + "description": "_upgradeScheduleId[12]: hash-chain link committing to upgrade id 11 (beryl) at 1782349188.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5adb", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0xf79cbe9afb777dd098279ee69b442ffa04d8f8c9d6314ff21747452be3315773", + "description": "_upgradeScheduleId[13]: hash-chain link committing to upgrade id 12 (cobalt) at 1789574400. As the tail of the chain, this is the registry's scheduleId.", + "allowDifference": false + }, + { + "key": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x000000006a3c7b2c000000006a3c7b2c000000006a3c7b2c000000006a3c7b2c", + "description": "_timestamps[0..3] packed: genesis, canyon, delta and ecotone, all active from Zeronet genesis at 1782348588.", + "allowDifference": false + }, + { + "key": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x0000000000000000000000006a3c7b2c000000006a3c7b2c000000006a3c7b2c", + "description": "_timestamps[4..7] packed: fjord, granite and holocene at 1782348588; pectraBlobSchedule (id 7) is registered but left unscheduled at 0.", + "allowDifference": false + }, + { + "key": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x000000006a3c7d84000000006a3c7c58000000006a3c7b2c000000006a3c7b2c", + "description": "_timestamps[8..11] packed: isthmus and jovian at 1782348588, azul at 1782348888 (genesis + 300s) and beryl at 1782349188 (genesis + 600s).", + "allowDifference": false + }, + { + "key": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf9", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x000000000000000000000000000000000000000000000000000000006aaabd00", + "description": "_timestamps[12]: schedules cobalt for 1789574400, which is 2026-09-16 16:00:00 UTC.", + "allowDifference": false + } + ] + }, + { + "name": "Proxy Admin Owner - Zeronet", + "address": "0x3d59999977e0896ee1f8783bB8251DF16fb483E9", + "changes": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "before": "0x0000000000000000000000000000000000000000000000000000000000000016", + "after": "0x0000000000000000000000000000000000000000000000000000000000000017", + "description": "Increments the nonce", + "allowDifference": false + }, + { + "key": "0x103aa8769d892f9cfb369a9b9971534dac7c7fa98e32d0eaeb85f0e265f251fa", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Records the nested Safe approval of the Cobalt upgrade transaction hash from the Coinbase signer Safe.", + "allowDifference": false + } + ] + }, + { + "name": "OptimismPortal2 - Zeronet", + "address": "0x7E3B97c95c823F385Ff6770411F6E12F8E09ac9b", + "changes": [ + { + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "before": "0x000000000000000000000000c1ad6d4e8da1403b9eb6a99491899577050f4863", + "after": "0x000000000000000000000000b4ac39aadc3130fef3f348ece8d033540df12089", + "description": "Upgrades OptimismPortal2 to the Cobalt implementation (version 6.0.0), which removes the EthLockbox code paths. Zeronet has no lockbox, so no ETH moves and the former ethLockbox slot 63 becomes a spacer that keeps its current value.", + "allowDifference": false + } + ] + }, + { + "name": "CB Signer Safe - Zeronet", + "address": "0x856611eD7E07D83243b15E93f6321f2df6865852", + "changes": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "before": "0x000000000000000000000000000000000000000000000000000000000000001c", + "after": "0x000000000000000000000000000000000000000000000000000000000000001d", + "description": "Increments the nonce", + "allowDifference": false + } + ] + }, + { + "name": "DisputeGameFactory - Zeronet", + "address": "0xD930e0cebD52D7C77b8F900dE242E818506C5474", + "changes": [ + { + "key": "0x32912047a4c082de3e601c4b381c2aa6252270818a4be33442b17fb41b6cf7d6", + "before": "0x0000000000000000000000007dd0f51c71da5243174fa829c8cf3385b06833b0", + "after": "0x0000000000000000000000002504b1c3b78b2711e24eadf7ea077b0ca1b91859", + "description": "Sets gameImpls[621] to the redeployed AggregateVerifier (version 0.2.0), replacing the previous verifier. The new verifier is bound to the new ProtocolVersions registry.", + "allowDifference": false + }, + { + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "before": "0x0000000000000000000000003a0a9e5b91709bba0bcb4bb4b66730dcfef6e926", + "after": "0x000000000000000000000000bee0c6dd082d7a483da4bd6e56c7e5292bda7ce8", + "description": "Upgrades DisputeGameFactory to the Cobalt implementation (version 1.5.0), which deploys new dispute game proxies with CREATE2. Existing games and the game count are unchanged.", + "allowDifference": false + } + ] + } + ], + "balanceChanges": [], + "skipTaskOriginValidation": true +} diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/validations/security-council-signer.json b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/validations/security-council-signer.json new file mode 100644 index 000000000..bb325e11d --- /dev/null +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/validations/security-council-signer.json @@ -0,0 +1,286 @@ +{ + "cmd": "PROXY_ADMIN_OWNER=0x3d59999977e0896ee1f8783bb8251df16fb483e9 L1_PROXY_ADMIN=0xf2d2c097be80fb87844b7e259ef67efb98b26f87 OPTIMISM_PORTAL=0x7e3b97c95c823f385ff6770411f6e12f8e09ac9b SYSTEM_CONFIG=0x0a111c7980152bde41d71f48e2e1d8184f5f6187 DISPUTE_GAME_FACTORY_PROXY=0xd930e0cebd52d7c77b8f900de242e818506c5474 OLD_OPTIMISM_PORTAL_IMPL=0xc1ad6d4e8da1403b9eb6a99491899577050f4863 OLD_SYSTEM_CONFIG_IMPL=0xb54d7ff110995029b89a0045128cae42c931aa83 OLD_DISPUTE_GAME_FACTORY_IMPL=0x3a0a9e5b91709bba0bcb4bb4b66730dcfef6e926 OLD_AGGREGATE_VERIFIER=0x7dd0f51C71DA5243174FA829c8cf3385B06833b0 NEW_OPTIMISM_PORTAL_IMPL=0xb4aC39aadC3130fEf3F348ECe8D033540dF12089 NEW_SYSTEM_CONFIG_IMPL=0x210303565CBf0b8c0d2837523816f815F02ad5eB NEW_DISPUTE_GAME_FACTORY_IMPL=0xBeE0c6DD082D7A483Da4bD6e56C7e5292BDa7Ce8 NEW_AGGREGATE_VERIFIER=0x2504B1c3B78B2711e24eadF7eA077b0cA1b91859 PROTOCOL_VERSIONS_PROXY=0x30e172aaC675c9fe5A64792F92C9fD4d3E7cA9Da PROTOCOL_VERSIONS_IMPL=0x30ADFDAB722D36B26f12f562d7cAdF4Cd8831c58 PROTOCOL_VERSIONS_INCIDENT_RESPONDER=0x856611ed7e07d83243b15e93f6321f2df6865852 PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION=79228162569604569823262539776 PROTOCOL_VERSIONS_INITIAL_SCHEDULE=1782348588,1782348588,1782348588,1782348588,1782348588,1782348588,1782348588,0,1782348588,1782348588,1782348888,1782349188,1789574400 mise exec -- forge script --rpc-url https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net tasks/2026-09-14-cobalt-upgrade/script/ExecuteCobaltUpgrade.s.sol:ExecuteCobaltUpgrade --sig sign(address[]) [0xC4c0aD998B5DfA4CF4B298970F21b9015a5eE7bA] --sender 0x2c1475476B586d66a85bC65A5aB396BBbAa4f3aD", + "ledgerId": 1, + "rpcUrl": "https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net", + "expectedDomainAndMessageHashes": { + "address": "0x3d59999977e0896ee1f8783bB8251DF16fb483E9", + "domainHash": "0x1e2faea9157fbff31d9297595a71e2dedfeb1184207c07bb6bd64f807332a525", + "messageHash": "0x3c177176ea7bd2f9cbf1f3845d612bbce0b13cc847bf5c05ada7d07876b3fe7a" + }, + "stateOverrides": [ + { + "name": "Proxy Admin Owner - Zeronet", + "address": "0x3d59999977e0896ee1f8783bB8251DF16fb483E9", + "overrides": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Override the threshold to 1 so the transaction simulation can occur.", + "allowDifference": false + } + ] + }, + { + "name": "Security Council Safe - Zeronet", + "address": "0xC4c0aD998B5DfA4CF4B298970F21b9015a5eE7bA", + "overrides": [ + { + "key": "0x05fd0c137b28dbf220ae37278c8372ce729c7c32742b2f92b4957d78c30bb9ba", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Simulates an approval from msg.sender in order for the task simulation to succeed.", + "allowDifference": false + } + ] + } + ], + "stateChanges": [ + { + "name": "SystemConfig - Zeronet", + "address": "0x0a111C7980152bDe41D71f48e2E1d8184f5f6187", + "changes": [ + { + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "before": "0x000000000000000000000000b54d7ff110995029b89a0045128cae42c931aa83", + "after": "0x000000000000000000000000210303565cbf0b8c0d2837523816f815f02ad5eb", + "description": "Upgrades SystemConfig to the Cobalt implementation, which is the build that keeps Zeronet's patched MAX_GAS_LIMIT of 2,000,000,000 (version 3.14.0+max-gas-limit-2000M). The gas limit and pause state are asserted unchanged.", + "allowDifference": false + } + ] + }, + { + "name": "ProtocolVersions - Zeronet", + "address": "0x30e172aaC675c9fe5A64792F92C9fD4d3E7cA9Da", + "changes": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Sets Initializable._initialized to 1, recording that the new ProtocolVersions proxy has run its reinitializer(1) initialize call.", + "allowDifference": false + }, + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x000000000000000000000000000000000000000000000000000000000000000d", + "description": "Sets the _timestamps array length to 13, one entry per registered upgrade (ids 0-12, genesis through cobalt).", + "allowDifference": false + }, + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x000000000000000000000000000000000000000000000000000000000000000e", + "description": "Sets the _upgradeScheduleId array length to 14: the bytes32(0) seed at index 0 plus one hash-chain link for each of the 13 registered upgrades.", + "allowDifference": false + }, + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x0000000000000000000000000000000000000001000000030000000200000000", + "description": "Sets minimumProtocolVersion to v1.3.2. The OP format packs the low 16 bytes as major || minor || patch || pre-release, four bytes each, so v1.3.2 is 0x00000001000000030000000200000000 (79228162569604569823262539776).", + "allowDifference": false + }, + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x000000000000000000000000856611ed7e07d83243b15e93f6321f2df6865852", + "description": "Sets incidentResponder to the Coinbase multisig. This is a restricted role that can only push an already-scheduled, not-yet-activated upgrade further into the future.", + "allowDifference": false + }, + { + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x00000000000000000000000030adfdab722d36b26f12f562d7cadf4cd8831c58", + "description": "Upgrades the ProtocolVersions proxy from the zero address to the registry implementation (version 1.0.0). The proxy was deployed uninitialized, so this is the upgradeAndCall that also seeds the schedule.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x0166d3f8da856c31a45b46260bff4abea91e079f65bb1d19caf72f05113ff7c7", + "description": "_upgradeScheduleId[1]: hash-chain link committing to upgrade id 0 (genesis) at 1782348588.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x7dd0a3d5cf72f45456110f9b003c1def43a4e5594271cd1f00f9f9f031411212", + "description": "_upgradeScheduleId[2]: hash-chain link committing to upgrade id 1 (canyon) at 1782348588.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad1", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x7fd31e37e400843a4ab62b3a757975732b70bf5f37dc034a6b0401ce2d9b56f6", + "description": "_upgradeScheduleId[3]: hash-chain link committing to upgrade id 2 (delta) at 1782348588.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0xd8876ffe4b1bfdfaaf050a75289034bb88a6f0c773b07055b163de2c36ffb284", + "description": "_upgradeScheduleId[4]: hash-chain link committing to upgrade id 3 (ecotone) at 1782348588.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad3", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x0bf104b9a877be6444d1fb0e6bba7df327e35975910a5a3b985ab7c3d02350c1", + "description": "_upgradeScheduleId[5]: hash-chain link committing to upgrade id 4 (fjord) at 1782348588.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad4", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x59d5d17a92c9e1be92a97f47e70409e37ae90ad3105c5714b3867ae2c98f0bf2", + "description": "_upgradeScheduleId[6]: hash-chain link committing to upgrade id 5 (granite) at 1782348588.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad5", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x0335ac8de8507343a45ee1cdb53ba505eaea168ed5cc79a0e9a5e7a51c1b799e", + "description": "_upgradeScheduleId[7]: hash-chain link committing to upgrade id 6 (holocene) at 1782348588.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad6", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0xc3ed410e08f5d2805b96e95e5b153f8ab9b0506de56b9a799f1cd483850c4e0f", + "description": "_upgradeScheduleId[8]: hash-chain link committing to upgrade id 7 (pectraBlobSchedule), which stays unscheduled at 0.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad7", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0xb9cbaba7c1dbba36145e42340250daf38d32e6384e90d76cd8eeff2b42685623", + "description": "_upgradeScheduleId[9]: hash-chain link committing to upgrade id 8 (isthmus) at 1782348588.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad8", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x06ac8fad7216097e71e1d41a3c1b7f342f9115b20cff01bf0df808bdd4bb54a3", + "description": "_upgradeScheduleId[10]: hash-chain link committing to upgrade id 9 (jovian) at 1782348588.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad9", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x7c085c72396f9d01629fa24f3a1b7c7a36a9e74019a6006ffe3fe1702b6e1628", + "description": "_upgradeScheduleId[11]: hash-chain link committing to upgrade id 10 (azul) at 1782348888.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ada", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x6731b82c511c2773e9f127f8c57ab260410dc30d9d69cbeeb10925b3c45fc6bc", + "description": "_upgradeScheduleId[12]: hash-chain link committing to upgrade id 11 (beryl) at 1782349188.", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5adb", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0xf79cbe9afb777dd098279ee69b442ffa04d8f8c9d6314ff21747452be3315773", + "description": "_upgradeScheduleId[13]: hash-chain link committing to upgrade id 12 (cobalt) at 1789574400. As the tail of the chain, this is the registry's scheduleId.", + "allowDifference": false + }, + { + "key": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x000000006a3c7b2c000000006a3c7b2c000000006a3c7b2c000000006a3c7b2c", + "description": "_timestamps[0..3] packed: genesis, canyon, delta and ecotone, all active from Zeronet genesis at 1782348588.", + "allowDifference": false + }, + { + "key": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x0000000000000000000000006a3c7b2c000000006a3c7b2c000000006a3c7b2c", + "description": "_timestamps[4..7] packed: fjord, granite and holocene at 1782348588; pectraBlobSchedule (id 7) is registered but left unscheduled at 0.", + "allowDifference": false + }, + { + "key": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x000000006a3c7d84000000006a3c7c58000000006a3c7b2c000000006a3c7b2c", + "description": "_timestamps[8..11] packed: isthmus and jovian at 1782348588, azul at 1782348888 (genesis + 300s) and beryl at 1782349188 (genesis + 600s).", + "allowDifference": false + }, + { + "key": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf9", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x000000000000000000000000000000000000000000000000000000006aaabd00", + "description": "_timestamps[12]: schedules cobalt for 1789574400, which is 2026-09-16 16:00:00 UTC.", + "allowDifference": false + } + ] + }, + { + "name": "Proxy Admin Owner - Zeronet", + "address": "0x3d59999977e0896ee1f8783bB8251DF16fb483E9", + "changes": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "before": "0x0000000000000000000000000000000000000000000000000000000000000016", + "after": "0x0000000000000000000000000000000000000000000000000000000000000017", + "description": "Increments the nonce", + "allowDifference": false + }, + { + "key": "0x287d72ec20910c0a7fcdb6138b6057f9e48f93ad4b6e5c230f2febe3279594d4", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Records the nested Safe approval of the Cobalt upgrade transaction hash from the Security Council Safe.", + "allowDifference": false + } + ] + }, + { + "name": "OptimismPortal2 - Zeronet", + "address": "0x7E3B97c95c823F385Ff6770411F6E12F8E09ac9b", + "changes": [ + { + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "before": "0x000000000000000000000000c1ad6d4e8da1403b9eb6a99491899577050f4863", + "after": "0x000000000000000000000000b4ac39aadc3130fef3f348ece8d033540df12089", + "description": "Upgrades OptimismPortal2 to the Cobalt implementation (version 6.0.0), which removes the EthLockbox code paths. Zeronet has no lockbox, so no ETH moves and the former ethLockbox slot 63 becomes a spacer that keeps its current value.", + "allowDifference": false + } + ] + }, + { + "name": "Security Council Safe - Zeronet", + "address": "0xC4c0aD998B5DfA4CF4B298970F21b9015a5eE7bA", + "changes": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "before": "0x0000000000000000000000000000000000000000000000000000000000000019", + "after": "0x000000000000000000000000000000000000000000000000000000000000001a", + "description": "Increments the nonce", + "allowDifference": false + } + ] + }, + { + "name": "DisputeGameFactory - Zeronet", + "address": "0xD930e0cebD52D7C77b8F900dE242E818506C5474", + "changes": [ + { + "key": "0x32912047a4c082de3e601c4b381c2aa6252270818a4be33442b17fb41b6cf7d6", + "before": "0x0000000000000000000000007dd0f51c71da5243174fa829c8cf3385b06833b0", + "after": "0x0000000000000000000000002504b1c3b78b2711e24eadf7ea077b0ca1b91859", + "description": "Sets gameImpls[621] to the redeployed AggregateVerifier (version 0.2.0), replacing the previous verifier. The new verifier is bound to the new ProtocolVersions registry.", + "allowDifference": false + }, + { + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "before": "0x0000000000000000000000003a0a9e5b91709bba0bcb4bb4b66730dcfef6e926", + "after": "0x000000000000000000000000bee0c6dd082d7a483da4bd6e56c7e5292bda7ce8", + "description": "Upgrades DisputeGameFactory to the Cobalt implementation (version 1.5.0), which deploys new dispute game proxies with CREATE2. Existing games and the game count are unchanged.", + "allowDifference": false + } + ] + } + ], + "balanceChanges": [], + "skipTaskOriginValidation": true +} From fef1e6f93f42744bbacfda602058269718f79bcc Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Tue, 15 Sep 2026 09:49:59 -0400 Subject: [PATCH 12/14] Repin signer tool to 8e059b6 to pass TASK_NETWORK into the deps install Co-authored-by: Cursor --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 5361c82c8..251122813 100644 --- a/Makefile +++ b/Makefile @@ -109,7 +109,7 @@ forge-deps: ## # Task Signer Tool ## -SIGNER_TOOL_COMMIT=1fc76441a1cde3581c224023adfa79b8cfdb2fa4 +SIGNER_TOOL_COMMIT=8e059b65ddf936f2fcfd3c820544f8576f74bd35 SIGNER_TOOL_PATH=signer-tool .PHONY: checkout-signer-tool From 748d65104ce1a9b392e0863dd31fa1704da803e4 Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Tue, 15 Sep 2026 10:10:03 -0400 Subject: [PATCH 13/14] Record where the AggregateVerifier proof hashes come from The three hashes were listed with no provenance, so a reviewer had no way to check them short of asking. Record the node release they are built from, base/base releases/v1.4.0, and how each is produced: the TEE value is PCR0 of the reproducible Nitro enclave image from crates/proof/tee, and the two ZK values are the SP1 range and aggregation verification keys from just succinct vkeys --build. All three match the AggregateVerifier already deployed at 0x2504B1c3. --- .../tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md | 14 +++++++++----- .../2026-09-14-cobalt-upgrade/config/zeronet/.env | 9 +++++++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md b/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md index b4bd6ba44..acd4e8663 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/FACILITATOR.md @@ -48,11 +48,15 @@ Open `config//.env` and confirm every value, in particular: live proxies before building any calls, so a stale value stops the task rather than upgrading from an unexpected base. - `AGGREGATE_VERIFIER_TEE_IMAGE_HASH`, `AGGREGATE_VERIFIER_ZK_RANGE_HASH` and - `AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH` — the proof program hashes, derived from the Base node - release these games prove against. They ship blank and the deploy script refuses to run until - they are filled in. Every other `AggregateVerifier` constructor argument, including the config - hash and the block intervals, is read back from the live implementation at deploy time, so the - redeploy cannot change them. + `AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH` — the proof program hashes, built from the Base node + release these games prove against, which for Zeronet is + [`releases/v1.4.0`](https://github.com/base/base/tree/releases/v1.4.0). The TEE value is PCR0 of + the Nitro enclave image; the two ZK values are the SP1 range and aggregation verification keys + from `just succinct vkeys --build`. The `.env` comment records how each is produced, so they can + be regenerated from that ref rather than taken on trust. They ship blank and the deploy script + refuses to run until they are filled in. Every other `AggregateVerifier` constructor argument, + including the config hash and the block intervals, is read back from the live implementation at + deploy time, so the redeploy cannot change them. ## 3. Deploy diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env index 2a6095d78..4591bd94b 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/.env @@ -33,6 +33,15 @@ PROTOCOL_VERSIONS_INCIDENT_RESPONDER=0x856611ed7e07d83243b15e93f6321f2df6865852 # AggregateVerifier proof program hashes. Every other constructor argument is read # from the live implementation at deploy time, so these are the only values that # change. +# +# All three are built from the base/base node release these games prove against, +# releases/v1.4.0: https://github.com/base/base/tree/releases/v1.4.0 +# +# The TEE image hash is PCR0 of the AWS Nitro enclave image built from +# crates/proof/tee, which pins its upstream build inputs so the measurement is +# reproducible. The two ZK hashes are the SP1 range and aggregation verification keys +# printed by `just succinct vkeys --build`, which the Generate Succinct VKeys workflow +# runs against a given ref. AGGREGATE_VERIFIER_TEE_IMAGE_HASH=0xe8dc2300cf325b2527cbfa5e664a70acc40a9f2fc0617bd35cdfa61652a5fc30 AGGREGATE_VERIFIER_ZK_RANGE_HASH=0x7713943c2c2412314b135c5606cdb3923a54f7555d91d9f31c2f64e34e16f2f4 AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH=0x002663a1072dc1e1938e13d3b269fff88e843eb4ef76d6c6953dde4f5152973b From 6d16a334d167c24355b5b2c46ac9036a9fbafda9 Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Tue, 15 Sep 2026 14:00:15 -0400 Subject: [PATCH 14/14] execute task --- .../config/zeronet/README.md | 20 +- .../560048/run-1789494949901.json | 90 +++ .../560048/run-1789494998746.json | 90 +++ .../560048/run-1789495033098.json | 585 ++++++++++++++++++ 4 files changed, 775 insertions(+), 10 deletions(-) create mode 100644 active/evm/tasks/2026-09-14-cobalt-upgrade/records/ExecuteCobaltUpgrade.s.sol/560048/run-1789494949901.json create mode 100644 active/evm/tasks/2026-09-14-cobalt-upgrade/records/ExecuteCobaltUpgrade.s.sol/560048/run-1789494998746.json create mode 100644 active/evm/tasks/2026-09-14-cobalt-upgrade/records/ExecuteCobaltUpgrade.s.sol/560048/run-1789495033098.json diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/README.md b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/README.md index 7104cdc9a..808bddf9c 100644 --- a/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/README.md +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/config/zeronet/README.md @@ -1,6 +1,6 @@ # Cobalt Upgrade -Status: READY TO SIGN +Status: [EXECUTED](https://hoodi.etherscan.io/tx/0xabfb3ed6b24334891957b4f0c22273b06392132288862ca8235b13af0a47d667) ## Description @@ -23,19 +23,19 @@ asserts each of these before and after. ## Custody -| Role | Address | -| -- | -- | +| Role | Address | +| ------------------------- | -------------------------------------------- | | ProxyAdmin owner (2-of-2) | `0x3d59999977e0896ee1f8783bB8251DF16fb483E9` | -| Coinbase multisig | `0x856611eD7E07D83243b15E93f6321f2df6865852` | -| Security Council | `0xC4c0aD998B5DfA4CF4B298970F21b9015a5eE7bA` | +| Coinbase multisig | `0x856611eD7E07D83243b15E93f6321f2df6865852` | +| Security Council | `0xC4c0aD998B5DfA4CF4B298970F21b9015a5eE7bA` | ## Targets -| Contract | Address | -| -- | -- | -| L1 `ProxyAdmin` | `0xF2d2c097bE80Fb87844b7E259ef67EFb98b26F87` | -| `OptimismPortal2` proxy | `0x7E3b97C95c823f385Ff6770411F6E12F8E09AC9b` | -| `SystemConfig` proxy | `0x0a111C7980152BDe41D71f48e2E1d8184f5F6187` | +| Contract | Address | +| -------------------------- | -------------------------------------------- | +| L1 `ProxyAdmin` | `0xF2d2c097bE80Fb87844b7E259ef67EFb98b26F87` | +| `OptimismPortal2` proxy | `0x7E3b97C95c823f385Ff6770411F6E12F8E09AC9b` | +| `SystemConfig` proxy | `0x0a111C7980152BDe41D71f48e2E1d8184f5F6187` | | `DisputeGameFactory` proxy | `0xd930E0CebD52d7C77b8f900De242e818506C5474` | New implementation addresses are recorded in [`addresses.json`](addresses.json) once deployed. diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/records/ExecuteCobaltUpgrade.s.sol/560048/run-1789494949901.json b/active/evm/tasks/2026-09-14-cobalt-upgrade/records/ExecuteCobaltUpgrade.s.sol/560048/run-1789494949901.json new file mode 100644 index 000000000..6b761872a --- /dev/null +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/records/ExecuteCobaltUpgrade.s.sol/560048/run-1789494949901.json @@ -0,0 +1,90 @@ +{ + "transactions": [ + { + "hash": "0xabfb3ed6b24334891957b4f0c22273b06392132288862ca8235b13af0a47d667", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x856611ed7e07d83243b15e93f6321f2df6865852", + "function": "execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)", + "arguments": [ + "0x3d59999977e0896ee1f8783bB8251DF16fb483E9", + "0", + "0xd4d9bdcd296f6841292d3bead1cd264327f33e03195aa2543cb3470d2051765dad385e2d", + "0", + "0", + "0", + "0", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0xc937c4cb92b3960cbb975e22075a1ecd08eeaf712d6f5b7864ec350ec6e1d5c9500b857f3b12249eaf88f0e728c4fc4ae98f1a22396419a9df32db6fafb2e12b1b003985e433248e8c1cfd30b74c088bdf1e2385cfa88b3fec5c9d244a50d13d3f0f8a719f08c098af5bae9935f9106f973bdcf931ca3bbd9ec917c81ccff55e111b7cef1405650cb5c70bb2bc8294c8318286872e8ac170dc7ca84f3b539f617a1466cf6c4e9ede9ce188061130e446dab1a19e42e022dd3a66d9ea9420b32e49851b" + ], + "transaction": { + "from": "0x8c1a617bdb47342f9c17ac8750e0b070c372c721", + "to": "0x856611ed7e07d83243b15e93f6321f2df6865852", + "gas": "0x20381", + "value": "0x0", + "input": "0x6a7612020000000000000000000000003d59999977e0896ee1f8783bb8251df16fb483e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000024d4d9bdcd296f6841292d3bead1cd264327f33e03195aa2543cb3470d2051765dad385e2d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c3c937c4cb92b3960cbb975e22075a1ecd08eeaf712d6f5b7864ec350ec6e1d5c9500b857f3b12249eaf88f0e728c4fc4ae98f1a22396419a9df32db6fafb2e12b1b003985e433248e8c1cfd30b74c088bdf1e2385cfa88b3fec5c9d244a50d13d3f0f8a719f08c098af5bae9935f9106f973bdcf931ca3bbd9ec917c81ccff55e111b7cef1405650cb5c70bb2bc8294c8318286872e8ac170dc7ca84f3b539f617a1466cf6c4e9ede9ce188061130e446dab1a19e42e022dd3a66d9ea9420b32e49851b0000000000000000000000000000000000000000000000000000000000", + "nonce": "0xb8", + "chainId": "0x88bb0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xd44ae", + "logs": [ + { + "address": "0x3d59999977e0896ee1f8783bb8251df16fb483e9", + "topics": [ + "0xf2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c", + "0x296f6841292d3bead1cd264327f33e03195aa2543cb3470d2051765dad385e2d", + "0x000000000000000000000000856611ed7e07d83243b15e93f6321f2df6865852" + ], + "data": "0x", + "blockHash": "0xb651707d3333a1c86e5ef653c83a81ff2661e419b6c97ed9a551c806df7f763e", + "blockNumber": "0x37644c", + "blockTimestamp": "0x6aa986a4", + "transactionHash": "0xabfb3ed6b24334891957b4f0c22273b06392132288862ca8235b13af0a47d667", + "transactionIndex": "0x17", + "logIndex": "0xf", + "removed": false + }, + { + "address": "0x856611ed7e07d83243b15e93f6321f2df6865852", + "topics": [ + "0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e", + "0x9006779dd18a15e0b992092195360fc5c78e75f32c2824e7ebe28be76c916350" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xb651707d3333a1c86e5ef653c83a81ff2661e419b6c97ed9a551c806df7f763e", + "blockNumber": "0x37644c", + "blockTimestamp": "0x6aa986a4", + "transactionHash": "0xabfb3ed6b24334891957b4f0c22273b06392132288862ca8235b13af0a47d667", + "transactionIndex": "0x17", + "logIndex": "0x10", + "removed": false + } + ], + "logsBloom": "0x00000000400000000000200000000200000004000000000000000000040000001001000000000000000000000000000000000040000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000800000000000000000000000000000000000000000000000000000000000000000000200000000000008000000000000000000000000000000000000000000000000040000004000000200000000080000000000000000000000000000008000000000000000000000000000000000000000000000004000000000000000000000000000000000000000200000000100000000000000000", + "type": "0x2", + "transactionHash": "0xabfb3ed6b24334891957b4f0c22273b06392132288862ca8235b13af0a47d667", + "transactionIndex": "0x17", + "blockHash": "0xb651707d3333a1c86e5ef653c83a81ff2661e419b6c97ed9a551c806df7f763e", + "blockNumber": "0x37644c", + "gasUsed": "0x17538", + "effectiveGasPrice": "0x475d4d34", + "from": "0x8c1a617bdb47342f9c17ac8750e0b070c372c721", + "to": "0x856611ed7e07d83243b15e93f6321f2df6865852", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1789494949901, + "chain": 560048, + "commit": "748d651" +} \ No newline at end of file diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/records/ExecuteCobaltUpgrade.s.sol/560048/run-1789494998746.json b/active/evm/tasks/2026-09-14-cobalt-upgrade/records/ExecuteCobaltUpgrade.s.sol/560048/run-1789494998746.json new file mode 100644 index 000000000..8e16ba82d --- /dev/null +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/records/ExecuteCobaltUpgrade.s.sol/560048/run-1789494998746.json @@ -0,0 +1,90 @@ +{ + "transactions": [ + { + "hash": "0x01f2422ea1aab02df51e3a40257de2a56caa0704dcd1d20f6eb37109cd4b0cb2", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xc4c0ad998b5dfa4cf4b298970f21b9015a5ee7ba", + "function": "execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)", + "arguments": [ + "0x3d59999977e0896ee1f8783bB8251DF16fb483E9", + "0", + "0xd4d9bdcd296f6841292d3bead1cd264327f33e03195aa2543cb3470d2051765dad385e2d", + "0", + "0", + "0", + "0", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x27d6597072c7ef3763db1a4371ea2ee198aeebef8dc9148983e9a901a591ce2f100257738eec79d2dad15d21432ef16f1f57712f13cd8e5e16d4c6c87d6d98a51b" + ], + "transaction": { + "from": "0x8c1a617bdb47342f9c17ac8750e0b070c372c721", + "to": "0xc4c0ad998b5dfa4cf4b298970f21b9015a5ee7ba", + "gas": "0x1b752", + "value": "0x0", + "input": "0x6a7612020000000000000000000000003d59999977e0896ee1f8783bb8251df16fb483e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000024d4d9bdcd296f6841292d3bead1cd264327f33e03195aa2543cb3470d2051765dad385e2d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004127d6597072c7ef3763db1a4371ea2ee198aeebef8dc9148983e9a901a591ce2f100257738eec79d2dad15d21432ef16f1f57712f13cd8e5e16d4c6c87d6d98a51b00000000000000000000000000000000000000000000000000000000000000", + "nonce": "0xb9", + "chainId": "0x88bb0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x132adc", + "logs": [ + { + "address": "0x3d59999977e0896ee1f8783bb8251df16fb483e9", + "topics": [ + "0xf2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c", + "0x296f6841292d3bead1cd264327f33e03195aa2543cb3470d2051765dad385e2d", + "0x000000000000000000000000c4c0ad998b5dfa4cf4b298970f21b9015a5ee7ba" + ], + "data": "0x", + "blockHash": "0x9dc30f644a7f2593745036d43499a8e4868ffd35ef7496ee3f629e9677524282", + "blockNumber": "0x37644f", + "blockTimestamp": "0x6aa986d4", + "transactionHash": "0x01f2422ea1aab02df51e3a40257de2a56caa0704dcd1d20f6eb37109cd4b0cb2", + "transactionIndex": "0x18", + "logIndex": "0x1c", + "removed": false + }, + { + "address": "0xc4c0ad998b5dfa4cf4b298970f21b9015a5ee7ba", + "topics": [ + "0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e", + "0x685271642434da15d061d92ec3f3f7f523696d6f8040e1f3c660ebfc2a8b750d" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x9dc30f644a7f2593745036d43499a8e4868ffd35ef7496ee3f629e9677524282", + "blockNumber": "0x37644f", + "blockTimestamp": "0x6aa986d4", + "transactionHash": "0x01f2422ea1aab02df51e3a40257de2a56caa0704dcd1d20f6eb37109cd4b0cb2", + "transactionIndex": "0x18", + "logIndex": "0x1d", + "removed": false + } + ], + "logsBloom": "0x00000000400000000000000000000000000004000000000000400000040000000001000000000000000000000000000000000000000000100000000000000000010000000000000000000000000000000000000800000000000000001000000008000000400000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000004000000200000000080000000000200000000000000000008000000000000000000000000000000000000000000000004000000000000000000000010000000000000000000000000100000000000000000", + "type": "0x2", + "transactionHash": "0x01f2422ea1aab02df51e3a40257de2a56caa0704dcd1d20f6eb37109cd4b0cb2", + "transactionIndex": "0x18", + "blockHash": "0x9dc30f644a7f2593745036d43499a8e4868ffd35ef7496ee3f629e9677524282", + "blockNumber": "0x37644f", + "gasUsed": "0x13e10", + "effectiveGasPrice": "0x3e4ef838", + "from": "0x8c1a617bdb47342f9c17ac8750e0b070c372c721", + "to": "0xc4c0ad998b5dfa4cf4b298970f21b9015a5ee7ba", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1789494998746, + "chain": 560048, + "commit": "748d651" +} \ No newline at end of file diff --git a/active/evm/tasks/2026-09-14-cobalt-upgrade/records/ExecuteCobaltUpgrade.s.sol/560048/run-1789495033098.json b/active/evm/tasks/2026-09-14-cobalt-upgrade/records/ExecuteCobaltUpgrade.s.sol/560048/run-1789495033098.json new file mode 100644 index 000000000..6ff15f245 --- /dev/null +++ b/active/evm/tasks/2026-09-14-cobalt-upgrade/records/ExecuteCobaltUpgrade.s.sol/560048/run-1789495033098.json @@ -0,0 +1,585 @@ +{ + "transactions": [ + { + "hash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x3d59999977e0896ee1f8783bb8251df16fb483e9", + "function": "execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)", + "arguments": [ + "0xA8B8CA1d6F0F5Ce63dCEA9121A01b302c5801303", + "0", + "0x858cc8320000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000009800000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a80000000000000000000000000a8b8ca1d6f0f5ce63dcea9121a01b302c58013030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000007c482ad56cb0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004e000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000006a0000000000000000000000000f2d2c097be80fb87844b7e259ef67efb98b26f870000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002c49623609d00000000000000000000000030e172aac675c9fe5a64792f92c9fd4d3e7ca9da00000000000000000000000030adfdab722d36b26f12f562d7cadf4cd8831c580000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000022487f6a390000000000000000000000000856611ed7e07d83243b15e93f6321f2df686585200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000001000000030000000200000000000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000006a3c7b2c000000000000000000000000000000000000000000000000000000006a3c7b2c000000000000000000000000000000000000000000000000000000006a3c7b2c000000000000000000000000000000000000000000000000000000006a3c7b2c000000000000000000000000000000000000000000000000000000006a3c7b2c000000000000000000000000000000000000000000000000000000006a3c7b2c000000000000000000000000000000000000000000000000000000006a3c7b2c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006a3c7b2c000000000000000000000000000000000000000000000000000000006a3c7b2c000000000000000000000000000000000000000000000000000000006a3c7c58000000000000000000000000000000000000000000000000000000006a3c7d84000000000000000000000000000000000000000000000000000000006aaabd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f2d2c097be80fb87844b7e259ef67efb98b26f8700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000004499a88ec40000000000000000000000007e3b97c95c823f385ff6770411f6e12f8e09ac9b000000000000000000000000b4ac39aadc3130fef3f348ece8d033540df1208900000000000000000000000000000000000000000000000000000000000000000000000000000000f2d2c097be80fb87844b7e259ef67efb98b26f8700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000004499a88ec40000000000000000000000000a111c7980152bde41d71f48e2e1d8184f5f6187000000000000000000000000210303565cbf0b8c0d2837523816f815f02ad5eb00000000000000000000000000000000000000000000000000000000000000000000000000000000f2d2c097be80fb87844b7e259ef67efb98b26f8700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000004499a88ec4000000000000000000000000d930e0cebd52d7c77b8f900de242e818506c5474000000000000000000000000bee0c6dd082d7a483da4bd6e56c7e5292bda7ce800000000000000000000000000000000000000000000000000000000000000000000000000000000d930e0cebd52d7c77b8f900de242e818506c547400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000004414f6b1a3000000000000000000000000000000000000000000000000000000000000026d0000000000000000000000002504b1c3b78b2711e24eadf7ea077b0ca1b9185900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "1", + "0", + "0", + "0", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x000000000000000000000000856611ed7e07d83243b15e93f6321f2df6865852000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c4c0ad998b5dfa4cf4b298970f21b9015a5ee7ba000000000000000000000000000000000000000000000000000000000000000001" + ], + "transaction": { + "from": "0x8c1a617bdb47342f9c17ac8750e0b070c372c721", + "to": "0x3d59999977e0896ee1f8783bb8251df16fb483e9", + "gas": "0xfe5f8", + "value": "0x0", + "input": "0x6a761202000000000000000000000000a8b8ca1d6f0f5ce63dcea9121a01b302c5801303000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cc00000000000000000000000000000000000000000000000000000000000000b44858cc8320000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000009800000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a80000000000000000000000000a8b8ca1d6f0f5ce63dcea9121a01b302c58013030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000007c482ad56cb0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004e000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000006a0000000000000000000000000f2d2c097be80fb87844b7e259ef67efb98b26f870000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002c49623609d00000000000000000000000030e172aac675c9fe5a64792f92c9fd4d3e7ca9da00000000000000000000000030adfdab722d36b26f12f562d7cadf4cd8831c580000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000022487f6a390000000000000000000000000856611ed7e07d83243b15e93f6321f2df686585200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000001000000030000000200000000000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000006a3c7b2c000000000000000000000000000000000000000000000000000000006a3c7b2c000000000000000000000000000000000000000000000000000000006a3c7b2c000000000000000000000000000000000000000000000000000000006a3c7b2c000000000000000000000000000000000000000000000000000000006a3c7b2c000000000000000000000000000000000000000000000000000000006a3c7b2c000000000000000000000000000000000000000000000000000000006a3c7b2c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006a3c7b2c000000000000000000000000000000000000000000000000000000006a3c7b2c000000000000000000000000000000000000000000000000000000006a3c7c58000000000000000000000000000000000000000000000000000000006a3c7d84000000000000000000000000000000000000000000000000000000006aaabd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f2d2c097be80fb87844b7e259ef67efb98b26f8700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000004499a88ec40000000000000000000000007e3b97c95c823f385ff6770411f6e12f8e09ac9b000000000000000000000000b4ac39aadc3130fef3f348ece8d033540df1208900000000000000000000000000000000000000000000000000000000000000000000000000000000f2d2c097be80fb87844b7e259ef67efb98b26f8700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000004499a88ec40000000000000000000000000a111c7980152bde41d71f48e2e1d8184f5f6187000000000000000000000000210303565cbf0b8c0d2837523816f815f02ad5eb00000000000000000000000000000000000000000000000000000000000000000000000000000000f2d2c097be80fb87844b7e259ef67efb98b26f8700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000004499a88ec4000000000000000000000000d930e0cebd52d7c77b8f900de242e818506c5474000000000000000000000000bee0c6dd082d7a483da4bd6e56c7e5292bda7ce800000000000000000000000000000000000000000000000000000000000000000000000000000000d930e0cebd52d7c77b8f900de242e818506c547400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000004414f6b1a3000000000000000000000000000000000000000000000000000000000000026d0000000000000000000000002504b1c3b78b2711e24eadf7ea077b0ca1b9185900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082000000000000000000000000856611ed7e07d83243b15e93f6321f2df6865852000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c4c0ad998b5dfa4cf4b298970f21b9015a5ee7ba000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000", + "nonce": "0xba", + "chainId": "0x88bb0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x12e16a", + "logs": [ + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000030adfdab722d36b26f12f562d7cadf4cd8831c58" + ], + "data": "0x", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x14", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0xc8d4579ff78c4e70e6ae3acbb4858a04ea798b4e8efff9ff7a8c8775d7b2c858", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x15", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0x48496c9e95bc0f6dd82bee879408724c3b1a356b8a6d9c3fbffe270b24720791", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000000000000000000000000000000000006a3c7b2c", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x16", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0xc8d4579ff78c4e70e6ae3acbb4858a04ea798b4e8efff9ff7a8c8775d7b2c858", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "data": "0x", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x17", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0x48496c9e95bc0f6dd82bee879408724c3b1a356b8a6d9c3fbffe270b24720791", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "data": "0x000000000000000000000000000000000000000000000000000000006a3c7b2c", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x18", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0xc8d4579ff78c4e70e6ae3acbb4858a04ea798b4e8efff9ff7a8c8775d7b2c858", + "0x0000000000000000000000000000000000000000000000000000000000000002" + ], + "data": "0x", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x19", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0x48496c9e95bc0f6dd82bee879408724c3b1a356b8a6d9c3fbffe270b24720791", + "0x0000000000000000000000000000000000000000000000000000000000000002" + ], + "data": "0x000000000000000000000000000000000000000000000000000000006a3c7b2c", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x1a", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0xc8d4579ff78c4e70e6ae3acbb4858a04ea798b4e8efff9ff7a8c8775d7b2c858", + "0x0000000000000000000000000000000000000000000000000000000000000003" + ], + "data": "0x", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x1b", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0x48496c9e95bc0f6dd82bee879408724c3b1a356b8a6d9c3fbffe270b24720791", + "0x0000000000000000000000000000000000000000000000000000000000000003" + ], + "data": "0x000000000000000000000000000000000000000000000000000000006a3c7b2c", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x1c", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0xc8d4579ff78c4e70e6ae3acbb4858a04ea798b4e8efff9ff7a8c8775d7b2c858", + "0x0000000000000000000000000000000000000000000000000000000000000004" + ], + "data": "0x", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x1d", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0x48496c9e95bc0f6dd82bee879408724c3b1a356b8a6d9c3fbffe270b24720791", + "0x0000000000000000000000000000000000000000000000000000000000000004" + ], + "data": "0x000000000000000000000000000000000000000000000000000000006a3c7b2c", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x1e", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0xc8d4579ff78c4e70e6ae3acbb4858a04ea798b4e8efff9ff7a8c8775d7b2c858", + "0x0000000000000000000000000000000000000000000000000000000000000005" + ], + "data": "0x", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x1f", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0x48496c9e95bc0f6dd82bee879408724c3b1a356b8a6d9c3fbffe270b24720791", + "0x0000000000000000000000000000000000000000000000000000000000000005" + ], + "data": "0x000000000000000000000000000000000000000000000000000000006a3c7b2c", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x20", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0xc8d4579ff78c4e70e6ae3acbb4858a04ea798b4e8efff9ff7a8c8775d7b2c858", + "0x0000000000000000000000000000000000000000000000000000000000000006" + ], + "data": "0x", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x21", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0x48496c9e95bc0f6dd82bee879408724c3b1a356b8a6d9c3fbffe270b24720791", + "0x0000000000000000000000000000000000000000000000000000000000000006" + ], + "data": "0x000000000000000000000000000000000000000000000000000000006a3c7b2c", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x22", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0xc8d4579ff78c4e70e6ae3acbb4858a04ea798b4e8efff9ff7a8c8775d7b2c858", + "0x0000000000000000000000000000000000000000000000000000000000000007" + ], + "data": "0x", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x23", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0xc8d4579ff78c4e70e6ae3acbb4858a04ea798b4e8efff9ff7a8c8775d7b2c858", + "0x0000000000000000000000000000000000000000000000000000000000000008" + ], + "data": "0x", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x24", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0x48496c9e95bc0f6dd82bee879408724c3b1a356b8a6d9c3fbffe270b24720791", + "0x0000000000000000000000000000000000000000000000000000000000000008" + ], + "data": "0x000000000000000000000000000000000000000000000000000000006a3c7b2c", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x25", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0xc8d4579ff78c4e70e6ae3acbb4858a04ea798b4e8efff9ff7a8c8775d7b2c858", + "0x0000000000000000000000000000000000000000000000000000000000000009" + ], + "data": "0x", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x26", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0x48496c9e95bc0f6dd82bee879408724c3b1a356b8a6d9c3fbffe270b24720791", + "0x0000000000000000000000000000000000000000000000000000000000000009" + ], + "data": "0x000000000000000000000000000000000000000000000000000000006a3c7b2c", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x27", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0xc8d4579ff78c4e70e6ae3acbb4858a04ea798b4e8efff9ff7a8c8775d7b2c858", + "0x000000000000000000000000000000000000000000000000000000000000000a" + ], + "data": "0x", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x28", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0x48496c9e95bc0f6dd82bee879408724c3b1a356b8a6d9c3fbffe270b24720791", + "0x000000000000000000000000000000000000000000000000000000000000000a" + ], + "data": "0x000000000000000000000000000000000000000000000000000000006a3c7c58", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x29", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0xc8d4579ff78c4e70e6ae3acbb4858a04ea798b4e8efff9ff7a8c8775d7b2c858", + "0x000000000000000000000000000000000000000000000000000000000000000b" + ], + "data": "0x", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x2a", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0x48496c9e95bc0f6dd82bee879408724c3b1a356b8a6d9c3fbffe270b24720791", + "0x000000000000000000000000000000000000000000000000000000000000000b" + ], + "data": "0x000000000000000000000000000000000000000000000000000000006a3c7d84", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x2b", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0xc8d4579ff78c4e70e6ae3acbb4858a04ea798b4e8efff9ff7a8c8775d7b2c858", + "0x000000000000000000000000000000000000000000000000000000000000000c" + ], + "data": "0x", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x2c", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0x48496c9e95bc0f6dd82bee879408724c3b1a356b8a6d9c3fbffe270b24720791", + "0x000000000000000000000000000000000000000000000000000000000000000c" + ], + "data": "0x000000000000000000000000000000000000000000000000000000006aaabd00", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x2d", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0x3ce196af7f202b9a61978967a766a54245d6588745bc8f76226360f5a87085ea", + "0xf79cbe9afb777dd098279ee69b442ffa04d8f8c9d6314ff21747452be3315773" + ], + "data": "0x", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x2e", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0xafb29e5c7f4fc4818c2ffe01313f20873fbb8d3ecb8c231226be562b9a11e57f", + "0x0000000000000000000000000000000000000001000000030000000200000000" + ], + "data": "0x", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x2f", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0xb1c6dde58c72ae176c3481e130f3af63d9d7f9edc52f9c07ab80840f85f442ea", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000856611ed7e07d83243b15e93f6321f2df6865852" + ], + "data": "0x", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x30", + "removed": false + }, + { + "address": "0x30e172aac675c9fe5a64792f92c9fd4d3e7ca9da", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x31", + "removed": false + }, + { + "address": "0x7e3b97c95c823f385ff6770411f6e12f8e09ac9b", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000b4ac39aadc3130fef3f348ece8d033540df12089" + ], + "data": "0x", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x32", + "removed": false + }, + { + "address": "0x0a111c7980152bde41d71f48e2e1d8184f5f6187", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000210303565cbf0b8c0d2837523816f815f02ad5eb" + ], + "data": "0x", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x33", + "removed": false + }, + { + "address": "0xd930e0cebd52d7c77b8f900de242e818506c5474", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000bee0c6dd082d7a483da4bd6e56c7e5292bda7ce8" + ], + "data": "0x", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x34", + "removed": false + }, + { + "address": "0xd930e0cebd52d7c77b8f900de242e818506c5474", + "topics": [ + "0xff513d80e2c7fa487608f70a618dfbc0cf415699dc69588c747e8c71566c88de", + "0x0000000000000000000000002504b1c3b78b2711e24eadf7ea077b0ca1b91859", + "0x000000000000000000000000000000000000000000000000000000000000026d" + ], + "data": "0x", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x35", + "removed": false + }, + { + "address": "0x3d59999977e0896ee1f8783bb8251df16fb483e9", + "topics": [ + "0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e", + "0x296f6841292d3bead1cd264327f33e03195aa2543cb3470d2051765dad385e2d" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "blockTimestamp": "0x6aa986f8", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "logIndex": "0x36", + "removed": false + } + ], + "logsBloom": "0x040000004005000000000040000002004000060000000000000000800400000000210100000822000000002020000020000010000604811040210000002c00000200b800041000000000000000000200000000000004400000080000000000000a000000020000000000000000052800000000000000000000002800000010000080010400404000010000000000001000001800000080000400000000088000000002000000100400000140000404000000200000800080002200080004400040080020000008008000000000040000002200008000000000400100000064200000000100000000000000000080000020200200008000040000002000800100", + "type": "0x2", + "transactionHash": "0x4c8ad9546c5fa21be5887a009c1509499381bf6da9349737b7999117b50d714a", + "transactionIndex": "0x5", + "blockHash": "0xf310a0097bcd11c40543a81a4d53d59e8b8faa39ed72f319eb886c9446873c98", + "blockNumber": "0x376452", + "gasUsed": "0xb8296", + "effectiveGasPrice": "0x440171b8", + "from": "0x8c1a617bdb47342f9c17ac8750e0b070c372c721", + "to": "0x3d59999977e0896ee1f8783bb8251df16fb483e9", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1789495033098, + "chain": 560048, + "commit": "748d651" +} \ No newline at end of file