From a17f53fd996cf44c370e4770135c44fde68cb48e Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Thu, 22 Oct 2026 16:09:47 -0400 Subject: [PATCH 01/16] wip: mainnet Denim upgrade with all L2 predeploys --- .../2026-10-07-denim-upgrade/FACILITATOR.md | 80 ++- .../tasks/2026-10-07-denim-upgrade/Makefile | 67 +- .../config/mainnet/.env | 69 ++ .../config/mainnet/README.md | 38 ++ .../2026-10-07-denim-upgrade/foundry.toml | 28 + .../script/DeployAttestations.s.sol | 20 + .../script/DeployBridges.s.sol | 30 + .../script/DeployFactory.s.sol | 28 + .../script/DeployOperatorFeeVault.s.sol | 15 + ...ecuteDenimUpgradeWithAllL2Predeploys.s.sol | 633 ++++++++++++++++++ .../script/LegacyMigrator.sol | 20 + .../2026-10-07-denim-upgrade/status.json | 18 +- .../test/Mainnet.t.sol | 364 ++++++++++ 13 files changed, 1391 insertions(+), 19 deletions(-) create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/.env create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/README.md create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/foundry.toml create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/script/DeployAttestations.s.sol create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/script/DeployBridges.s.sol create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/script/DeployFactory.s.sol create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/script/DeployOperatorFeeVault.s.sol create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/script/LegacyMigrator.sol create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/test/Mainnet.t.sol diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md b/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md index bfd4e138..948a32bc 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md +++ b/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md @@ -1,16 +1,16 @@ # Denim upgrade facilitator guide -Sepolia and mainnet use `ExecuteDenimUpgradeWithL2Predeploys` for the two Denim L1 calls and five -L2 upgrade deposits in one ProxyAdmin-owner transaction. The Security Council signs once. -Zeronet ran `ExecuteDenimUpgrade` for Denim only and upgraded the L2 predeploys separately. -The unset `UPGRADE_SCRIPT_NAME` preserves that Denim-only path. For the combined path, set -`UPGRADE_SCRIPT_NAME=ExecuteDenimUpgradeWithL2Predeploys` in `config//.env`. +Sepolia executed `ExecuteDenimUpgradeWithL2Predeploys`: two Denim L1 calls and five L2 deposits. +Mainnet selects `ExecuteDenimUpgradeWithAllL2Predeploys`: two Denim L1 calls and thirteen L2 deposits, +fifteen calls in ONE ProxyAdmin-owner transaction. The Security Council approves this transaction once, +with eight member signatures. Zeronet ran `ExecuteDenimUpgrade` for Denim only. Leave the executed +paths and their network configurations unchanged. | Change | Contracts touched | | --- | --- | | Fork-gated proof intervals for 200ms blocks | `AggregateVerifier` (redeployed as `0.3.0`), `DisputeGameFactory` (`setImplementation`) | | Denim activation and minimum node version | `ProtocolVersions` (`registerUpgrade`, upgrade id 13) | -| L2 predeploy upgrades through `OptimismPortal` deposits | `L2ToL1MessagePasser` `1.2.0`, `L1Block` `1.8.0`, `SequencerFeeVault`, `BaseFeeVault`, `L1FeeVault` `1.6.0` | +| First five L2 predeploy upgrades through `OptimismPortal` deposits | `L2ToL1MessagePasser` `1.2.0`, `L1Block` `1.8.0`, `SequencerFeeVault`, `BaseFeeVault`, `L1FeeVault` `1.6.0` | `AggregateVerifier` `0.3.0` carries two proposal interval pairs: the slow pair for 2s blocks and the fast pair for Denim's 200ms blocks. It reads the Denim activation from `ProtocolVersions` index 13 and @@ -50,6 +50,20 @@ Open `config//.env` and confirm: Every other `AggregateVerifier` constructor argument is copied from the live verifier at deploy time. +For mainnet, obtain PCR0 and both SP1 verification keys from the reproducible v1.5.1-based prover +build before deploying or generating validations. The three hash fields intentionally start blank. +The Sepolia f3a459f build cannot derive post-Denim mainnet blocks because it disables mainnet Denim. +Do not reuse its hashes. Mainnet validation, approval and execution also refuse missing hashes. + +Mainnet preserves the live vault recipients and L2 withdrawal networks. `BaseTime` is excluded: +Denim installs it only while its implementation slot is empty. The mainnet script refuses an occupied +implementation slot or an admin other than the L2 ProxyAdmin in both setup and the L2 post-check. + +EAS mainnet `1.0.1` uses EIP-712 domain version `1.0.1`, not Sepolia's `1.2.0`. The new domain is +`1.3.0`. Outstanding delegated attestation/revocation signatures become invalid; clients must sign +again using the new domain, type hashes and delegation ABI. Existing attestations, schemas and nonces +remain at their existing storage locations. + ## 3. Deploy and verify ```bash @@ -67,7 +81,21 @@ For the combined path, deploy the five L2 implementations after deploying the ve make TASK_NETWORK= deploy-l2 ``` -The facilitator runs both deployment steps with a Ledger. `deploy-l2` uses the L2 RPC, 999999 optimizer runs, +For mainnet, then deploy the other eight implementations and LegacyMigrator with the task-local +Foundry project: + +```bash +make TASK_NETWORK= deploy-remaining-l2 +make TASK_NETWORK= simulate +``` + +The extra deployments use 0.8.15 for factories and bridges, 0.8.19 for attestations, and 0.8.25 for +OperatorFeeVault. Per-file factory optimizer profiles use 5000 runs; the other implementations use +999999 runs, no bytecode hash, and Cancun. The multisig script also builds from `active/evm` using +its default compiler settings. `simulate` uses test-only verifier hashes and local implementations; +it does not deploy, generate validations, sign or broadcast. + +The facilitator runs all deployment steps with a Ledger. `deploy-l2` uses the L2 RPC, 999999 optimizer runs, no bytecode hash and Cancun, matching base/contracts. It appends `l2ToL1MessagePasser`, `l1Block`, `sequencerFeeVault`, `baseFeeVault` and `l1FeeVault` to `config//addresses.json`. There is no L2 source-verification step. Deploy the verifier first because its script replaces the address file; @@ -76,7 +104,7 @@ while the verifier and other L2 deployment use 0.8.15. Commit `config//addresses.json` and the task-scoped `records/` broadcast artifacts, then fill in the implementation addresses in `config//README.md`. The combined validation, -approval and execution targets refuse to proceed until all six implementation addresses are present. +approval and execution targets refuse to proceed until all six addresses on Sepolia, or all fifteen addresses on mainnet including the migrator, are present. ## 4. Generate validation files @@ -93,15 +121,36 @@ and state-change descriptions. Expected state changes: - `ProtocolVersions`: a 14th schedule entry (Denim) with `PROTOCOL_VERSIONS_DENIM_ACTIVATION_TIMESTAMP`, the extended schedule id chain, and the new minimum protocol version. -- Combined path only: five separate `OptimismPortal.depositTransaction` calls to the L2 ProxyAdmin, +- Sepolia combined path: five separate `OptimismPortal.depositTransaction` calls to the L2 ProxyAdmin, with five `TransactionDeposited` events and portal resource-metering state changes such as resource params. Each deposit has zero value and a 200000 L2 gas limit. Check that the sender is the owner Safe. +- Mainnet: thirteen separate zero-value owner-Safe deposits to the L2 ProxyAdmin, each with a + 300000 gas limit, totaling 3900000 L2 gas against the portal's 20000000 resource limit. The first + five calls are the Sepolia set above. The remaining eight are: + + | Target | New version | Method | + | --- | --- | --- | + | OptimismMintableERC721Factory | 1.4.2 | upgrade | + | OperatorFeeVault | 1.1.0 | upgradeAndCall initialize | + | SchemaRegistry | 1.3.1-beta.2 | upgrade | + | EAS | 1.4.1-beta.3 | upgrade | + | L2CrossDomainMessenger | 2.2.0 | upgradeAndCall LegacyMigrator.migrate | + | L2StandardBridge | 1.13.0 | upgradeAndCall LegacyMigrator.migrate | + | OptimismMintableERC20Factory | 1.10.2 | upgradeAndCall LegacyMigrator.migrate | + | L2ERC721Bridge | 1.10.0 | upgradeAndCall LegacyMigrator.migrate | + + The four migrations clear legacy slot 0, install the final implementation, and initialize its + counterpart atomically. On mainnet those slots contain only initializer flags or zero spacers, + unlike Sepolia's packed state. All three fee vaults and OperatorFeeVault initialize their storage + configuration without clearing totalProcessed in slot 0. The new ERC20 factory deployments mapping + starts empty; it does not backfill tokens created by the old factory. - L2 storage changes are not part of the L1 validation state diff. The script post-check replays the deposits on an L2 fork and checks implementation addresses, versions and all three vaults' initialized recipient, minimum withdrawal and withdrawal network. Each upgrade is its own deposit so the L2 ProxyAdmin sees the aliased owner. - Safe nonce and approval changes. +For mainnet, KEEP `taskOriginConfig`. Task-origin validation is required for this owner-Safe transaction. For any non-mainnet rollout, remove each generated `taskOriginConfig` and add this root field: ```json @@ -126,9 +175,10 @@ margin. `ProtocolVersions` enforces this one-hour `MIN_NOTICE`. Once registered, only be delayed by the incident responder and freezes one hour before it lands. The deposits execute on L2 shortly after the L1 transaction, not at Denim activation. The predeploy -upgrades have no ordering dependency on Denim. Check that all five deposits succeeded on L2. +upgrades have no ordering dependency on Denim. Check that all five Sepolia deposits, or all thirteen mainnet deposits, succeeded on L2. Immediately after execution, roll the network's proposer and provers to the prover build documented in `config//.env`. +On mainnet this MUST be the reproducible v1.5.1-based build. Execute first, then roll immediately; do not roll before execution. The new verifier accepts proofs only from that build, so proposals pause until the rollout lands; keep the gap short. New enclave signers register themselves in `TEEProverRegistry` on startup. The nitro host's health check requires a signer valid for the registry's current expected image hash, so the new build cannot be deployed before execution. Confirm the new signers @@ -143,6 +193,14 @@ cast call "$TEE_PROVER_REGISTRY_PROXY" 'signerImageHash(address)(bytes32)' /dev/null) UPGRADE_ENV += OPTIMISM_PORTAL=$(OPTIMISM_PORTAL) \ L2_RPC_URL=$(L2_RPC_URL) \ @@ -63,7 +63,7 @@ UPGRADE_ENV += OPTIMISM_PORTAL=$(OPTIMISM_PORTAL) \ .PHONY: check-implementations check-implementations: - @jq -e '[.aggregateVerifier, .l2ToL1MessagePasser, .l1Block, .sequencerFeeVault, .baseFeeVault, .l1FeeVault] | all(.[]; type == "string" and test("^0x[0-9a-fA-F]{40}$$") and ascii_downcase != "0x0000000000000000000000000000000000000000")' "$(ADDRESSES_JSON)" >/dev/null 2>&1 || \ + @jq -e '[.aggregateVerifier, .l2ToL1MessagePasser, .l1Block, .sequencerFeeVault, .baseFeeVault, .l1FeeVault $(MAINNET_IMPLEMENTATIONS)] | all(.[]; type == "string" and test("^0x[0-9a-fA-F]{40}$$") and ascii_downcase != "0x0000000000000000000000000000000000000000")' "$(ADDRESSES_JSON)" >/dev/null 2>&1 || \ { echo 'Deploy AggregateVerifier and all five L2 implementations into $(ADDRESSES_JSON) before validation, approval or execution'; exit 1; } approve-cb approve-sc execute: check-implementations @@ -78,8 +78,8 @@ AGGREGATE_VERIFIER_BUILD = FOUNDRY_OPTIMIZER=true FOUNDRY_OPTIMIZER_RUNS=999999 .PHONY: deploy deploy: -ifeq ($(UPGRADE_SCRIPT_NAME),ExecuteDenimUpgradeWithL2Predeploys) - @test ! -f "$(ADDRESSES_JSON)" || jq -e '[.l2ToL1MessagePasser, .l1Block, .sequencerFeeVault, .baseFeeVault, .l1FeeVault] | all(.[]; . == null)' "$(ADDRESSES_JSON)" >/dev/null || \ +ifneq ($(filter ExecuteDenimUpgradeWithL2Predeploys ExecuteDenimUpgradeWithAllL2Predeploys,$(UPGRADE_SCRIPT_NAME)),) + @test ! -f "$(ADDRESSES_JSON)" || jq -e '[.l2ToL1MessagePasser, .l1Block, .sequencerFeeVault, .baseFeeVault, .l1FeeVault $(MAINNET_IMPLEMENTATIONS)] | all(.[]; . == null)' "$(ADDRESSES_JSON)" >/dev/null || \ { echo 'deploy replaces addresses.json; deploy AggregateVerifier before deploy-l2'; exit 1; } endif @test -f "$(ADDRESSES_JSON)" || echo '{}' > "$(ADDRESSES_JSON)" @@ -92,7 +92,7 @@ DEPLOY_FEE_VAULTS_SCRIPT := $(TASK_DIR)/script/DeployFeeVaultImpls.s.sol:DeployF .PHONY: deploy-l2 deploy-l2: - @test "$(UPGRADE_SCRIPT_NAME)" = ExecuteDenimUpgradeWithL2Predeploys || \ + @test -n "$(filter ExecuteDenimUpgradeWithL2Predeploys ExecuteDenimUpgradeWithAllL2Predeploys,$(UPGRADE_SCRIPT_NAME))" || \ { echo 'deploy-l2 requires the combined upgrade script in config/$(TASK_NETWORK)/.env'; exit 1; } @jq -e '.aggregateVerifier | type == "string" and test("^0x[0-9a-fA-F]{40}$$") and ascii_downcase != "0x0000000000000000000000000000000000000000"' "$(ADDRESSES_JSON)" >/dev/null 2>&1 || \ { echo 'Run deploy before deploy-l2; it initializes $(ADDRESSES_JSON)'; exit 1; } @@ -134,11 +134,11 @@ endif # Validation files ## .PHONY: gen-validation-cb -gen-validation-cb: $(if $(filter ExecuteDenimUpgradeWithL2Predeploys,$(UPGRADE_SCRIPT_NAME)),check-implementations) deps-signer-tool +gen-validation-cb: $(if $(filter ExecuteDenimUpgradeWithL2Predeploys ExecuteDenimUpgradeWithAllL2Predeploys,$(UPGRADE_SCRIPT_NAME)),check-implementations) deps-signer-tool $(call GEN_VALIDATION,$(UPGRADE_SCRIPT),$(CB_MULTISIG),$(CB_SENDER),base-signer.json,$(UPGRADE_ENV)) .PHONY: gen-validation-sc -gen-validation-sc: $(if $(filter ExecuteDenimUpgradeWithL2Predeploys,$(UPGRADE_SCRIPT_NAME)),check-implementations) deps-signer-tool +gen-validation-sc: $(if $(filter ExecuteDenimUpgradeWithL2Predeploys ExecuteDenimUpgradeWithAllL2Predeploys,$(UPGRADE_SCRIPT_NAME)),check-implementations) deps-signer-tool $(call GEN_VALIDATION,$(UPGRADE_SCRIPT),$(BASE_SECURITY_COUNCIL),$(SC_SENDER),security-council-signer.json,$(UPGRADE_ENV)) ## @@ -155,3 +155,56 @@ approve-sc: .PHONY: execute execute: export $(UPGRADE_ENV); $(call MULTISIG_EXECUTE,0x) + +ifeq ($(UPGRADE_SCRIPT_NAME),ExecuteDenimUpgradeWithAllL2Predeploys) +TASK_PROJECT_DIR := $(CURDIR) +MAINNET_IMPLEMENTATIONS = , .optimismMintableERC721Factory, .operatorFeeVault, .schemaRegistry, .eas, .l2CrossDomainMessenger, .l2StandardBridge, .optimismMintableERC20Factory, .l2ERC721Bridge, .legacyMigrator +MAINNET_CONFIG_ENV = FACTORY_BRIDGE=$(FACTORY_BRIDGE) REMOTE_CHAIN_ID=$(REMOTE_CHAIN_ID) \ + L1_CROSS_DOMAIN_MESSENGER=$(L1_CROSS_DOMAIN_MESSENGER) L1_STANDARD_BRIDGE=$(L1_STANDARD_BRIDGE) \ + L1_ERC721_BRIDGE=$(L1_ERC721_BRIDGE) ERC20_FACTORY_BRIDGE=$(ERC20_FACTORY_BRIDGE) \ + OPERATOR_FEE_VAULT_RECIPIENT=$(OPERATOR_FEE_VAULT_RECIPIENT) \ + OPERATOR_FEE_VAULT_MIN_WITHDRAWAL_AMOUNT=$(OPERATOR_FEE_VAULT_MIN_WITHDRAWAL_AMOUNT) \ + OPERATOR_FEE_VAULT_WITHDRAWAL_NETWORK=$(OPERATOR_FEE_VAULT_WITHDRAWAL_NETWORK) +UPGRADE_ENV += $(MAINNET_CONFIG_ENV) \ + ERC721_FACTORY_IMPL=$(call impl,optimismMintableERC721Factory) \ + OPERATOR_FEE_VAULT_IMPL=$(call impl,operatorFeeVault) \ + SCHEMA_REGISTRY_IMPL=$(call impl,schemaRegistry) EAS_IMPL=$(call impl,eas) \ + MESSENGER_IMPL=$(call impl,l2CrossDomainMessenger) BRIDGE_IMPL=$(call impl,l2StandardBridge) \ + ERC20_FACTORY_IMPL=$(call impl,optimismMintableERC20Factory) ERC721_BRIDGE_IMPL=$(call impl,l2ERC721Bridge) \ + LEGACY_MIGRATOR=$(call impl,legacyMigrator) + +clean-lib: bootstrap-mise install-eip712sign +forge-deps: clean-lib +deps: + cd $(PROJECT_DIR) && $(MISE_EXEC) forge install --no-git \ + github.com/OpenZeppelin/openzeppelin-contracts@ecd2ca2cd7cac116f7a37d0e474bbb3d7d5e1c4d \ + github.com/OpenZeppelin/openzeppelin-contracts-upgradeable@0a2cb9a445c365870ed7a8ab461b12acf3e27d63 + +.PHONY: check-prover-hashes deploy-remaining-l2 build-multisig simulate test +check-prover-hashes: + @for hash in "$(AGGREGATE_VERIFIER_TEE_IMAGE_HASH)" "$(AGGREGATE_VERIFIER_ZK_RANGE_HASH)" "$(AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH)"; do \ + printf '%s\n' "$$hash" | grep -Eq '^0x[0-9a-fA-F]{64}$$' && \ + test "$$hash" != 0x0000000000000000000000000000000000000000000000000000000000000000 || \ + { echo 'Confirm the reproducible mainnet v1.5.1-based prover hashes first'; exit 1; }; \ + done + +deploy gen-validation-cb gen-validation-sc approve-cb approve-sc execute: check-prover-hashes +deps-signer-tool: check-prover-hashes + +deploy-remaining-l2: + @jq -e '[.aggregateVerifier, .l2ToL1MessagePasser, .l1Block, .sequencerFeeVault, .baseFeeVault, .l1FeeVault] | all(.[]; type == "string" and test("^0x[0-9a-fA-F]{40}$$") and ascii_downcase != "0x0000000000000000000000000000000000000000")' "$(ADDRESSES_JSON)" >/dev/null || \ + { echo 'Run deploy and deploy-l2 first'; exit 1; } + cd $(TASK_PROJECT_DIR) && $(AGGREGATE_VERIFIER_BUILD) $(MISE_EXEC) forge build + @set -e; for script in DeployFactory DeployBridges DeployOperatorFeeVault DeployAttestations; do \ + cd $(TASK_PROJECT_DIR); $(MAINNET_CONFIG_ENV) ADDRESSES_JSON=$(ADDRESSES_JSON) $(AGGREGATE_VERIFIER_BUILD) \ + $(MISE_EXEC) forge script script/$$script.s.sol:$$script --rpc-url $(L2_RPC_URL) \ + --ledger --hd-paths $(LEDGER_HD_PATH) --broadcast -vvvv; \ + done + +build-multisig: + cd $(PROJECT_DIR) && $(MISE_EXEC) forge build $(TASK_DIR)/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol + +simulate test: build-multisig + cd $(TASK_PROJECT_DIR) && $(UPGRADE_ENV) L1_RPC_URL=$(L1_RPC_URL) CB_MULTISIG=$(CB_MULTISIG) \ + $(MISE_EXEC) forge test -vv +endif diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/.env b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/.env new file mode 100644 index 00000000..8b1e2db4 --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/.env @@ -0,0 +1,69 @@ +# base/contracts v8.4.0, AggregateVerifier 0.3.0. +# https://github.com/base/contracts/tree/8c21f6d08a36b4059ae2bb8938f1e7e758a0e962 +BASE_CONTRACTS_COMMIT=8c21f6d08a36b4059ae2bb8938f1e7e758a0e962 + +# Ethereum L1 block 26250153, DisputeGameFactory.gameImpls(621). +# Network addresses and RPCs come from repository config/mainnet.env. +GAME_TYPE=621 +OLD_AGGREGATE_VERIFIER=0xeF9eCeA15265321753047EBF7D54C858D53cB94f + +# The live verifier's slow intervals are 600/30. At 200ms, 6000/300 preserves +# 20 intermediate roots and the 20 minute range. Cadence source: +# https://github.com/base/base/tree/5476069f1eb74a56bccb56fdefd4b4bb0e3cda42/crates/common/genesis +FAST_BLOCK_INTERVAL=6000 +FAST_INTERMEDIATE_BLOCK_INTERVAL=300 + +# Pending reproducible v1.5.1-based prover build: PCR0 and SP1 range/aggregate vkeys +# have not been produced. Fill only from that build's verified outputs. +# base/base f3a459feaf4b071f311940510055b4b55b9374b8 cannot be used on mainnet: +# crates/common/chains/src/chain.rs sets mainnet Denim to ForkCondition::Never. +# Roll mainnet provers and proposer immediately AFTER execution, not before. +AGGREGATE_VERIFIER_TEE_IMAGE_HASH= +AGGREGATE_VERIFIER_ZK_RANGE_HASH= +AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH= + +# Mainnet Denim: 2026-11-05 18:00:00 UTC, upgrade id 13. +# https://github.com/base/base/blob/5476069f1eb74a56bccb56fdefd4b4bb0e3cda42/crates/common/chains/src/config.rs +# Mainnet denim_timestamp = 1_793_901_600. +# ProtocolVersions at Ethereum block 26250153 has 13 entries, last 1790791200, +# with index 7 = 0. MIN_NOTICE = 3600. Recheck the notice window before execution. +PROTOCOL_VERSIONS_DENIM_ACTIVATION_TIMESTAMP=1793901600 + +# ProtocolVersions.minimumProtocolVersion() at Ethereum block 26250153. +PROTOCOL_VERSIONS_CURRENT_MINIMUM_PROTOCOL_VERSION=79228162588051313896972091392 +# v1.5.1 packs major || minor || patch || prerelease, each four bytes: +# python3 -c 'print((1 << 96) | (5 << 64) | (1 << 32))' +# Hex: 0x00000001000000050000000100000000 +# https://github.com/base/base/releases/tag/v1.5.1 +PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION=79228162606498057966386675712 +UPGRADE_SCRIPT_NAME=ExecuteDenimUpgradeWithAllL2Predeploys + +# Base mainnet L2 block 52953400. Vaults 0x4200...0011, ...0019, ...001a +# version() = 1.3.0, RECIPIENT(), MIN_WITHDRAWAL_AMOUNT(), WITHDRAWAL_NETWORK(). +# Slots 1 and 2 are empty; slot 0 holds totalProcessed, which must be preserved. +# Recipient is FeeDisburser, an existing L2 contract, so preserve L2 withdrawals. +FEE_VAULT_RECIPIENT=0x09C7bAD99688a55a2e83644BFAed09e62bDcCcBA +FEE_VAULT_MIN_WITHDRAWAL_AMOUNT=2000000000000000000 +FEE_VAULT_WITHDRAWAL_NETWORK=1 + +# Base mainnet L2 block 52953400, ERC721 factory BRIDGE()/REMOTE_CHAIN_ID(). +FACTORY_BRIDGE=0x4200000000000000000000000000000000000014 +REMOTE_CHAIN_ID=1 +# Same block, ERC20 factory BRIDGE(), also stored in slot 1. +# The implementation is 0x6922ac4dbdfedea3a1e5535f12c3171f2b964c91, version 1.9.0. +ERC20_FACTORY_BRIDGE=0x4200000000000000000000000000000000000010 +# Same block, OperatorFeeVault RECIPIENT()/MIN_WITHDRAWAL_AMOUNT()/WITHDRAWAL_NETWORK(). +OPERATOR_FEE_VAULT_RECIPIENT=0x4200000000000000000000000000000000000019 +OPERATOR_FEE_VAULT_MIN_WITHDRAWAL_AMOUNT=0 +OPERATOR_FEE_VAULT_WITHDRAWAL_NETWORK=1 + +# Base mainnet block 52953400 legacy versions: +# Messenger 1.4.0, StandardBridge 1.1.0, ERC20 factory 1.9.0, ERC721 bridge 1.1.0, +# ERC721 factory 1.2.0, OperatorFeeVault 1.0.0, SchemaRegistry/EAS 1.0.1, +# L2ToL1MessagePasser 1.0.0, L1Block 1.7.0, three fee vaults 1.3.0. +# Legacy slot 0: messenger = 1 << 160; StandardBridge/ERC721 bridge = 0; +# ERC20 factory = 1. Messenger idle sender at slot 204 = 0xdead, slot 207 = 0. +# Counterparts match repository config/mainnet.env. L2 ProxyAdmin owner is +# 0x8cC51c3008b3f03Fe483B28B8Db90e19cF076a6d, the aliased L1 owner. +# BaseTime 0x4200...0030 implementation slot is empty and admin is 0x4200...0018. +# EXCLUDED: Denim installs BaseTime only while that implementation slot is empty. diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/README.md b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/README.md new file mode 100644 index 00000000..c9810e73 --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/README.md @@ -0,0 +1,38 @@ +# Base mainnet Denim upgrade + +Status: READY TO SIGN + +One ProxyAdmin-owner transaction replaces AggregateVerifier, registers Denim for +2026-11-05 18:00:00 UTC with minimum node version v1.5.1, and sends thirteen L2 +upgrade deposits. The Security Council signs once, with eight member signatures. +The Base multisig requires three member signatures. + +| Target | Current version | New version | New implementation | +| --- | --- | --- | --- | +| AggregateVerifier, game type 621 | 0.2.0 | 0.3.0 | Pending deployment | +| L2ToL1MessagePasser | 1.0.0 | 1.2.0 | Pending deployment | +| L1Block | 1.7.0 | 1.8.0 | Pending deployment | +| SequencerFeeVault | 1.3.0 | 1.6.0 | Pending deployment | +| BaseFeeVault | 1.3.0 | 1.6.0 | Pending deployment | +| L1FeeVault | 1.3.0 | 1.6.0 | Pending deployment | +| OptimismMintableERC721Factory | 1.2.0 | 1.4.2 | Pending deployment | +| OperatorFeeVault | 1.0.0 | 1.1.0 | Pending deployment | +| SchemaRegistry | 1.0.1 | 1.3.1-beta.2 | Pending deployment | +| EAS | 1.0.1 | 1.4.1-beta.3 | Pending deployment | +| L2CrossDomainMessenger | 1.4.0 | 2.2.0 | Pending deployment | +| L2StandardBridge | 1.1.0 | 1.13.0 | Pending deployment | +| OptimismMintableERC20Factory | 1.9.0 | 1.10.2 | Pending deployment | +| L2ERC721Bridge | 1.1.0 | 1.10.0 | Pending deployment | + +LegacyMigrator: Pending deployment. ProtocolVersions adds upgrade id 13. +BaseTime is excluded. Existing vault recipients and withdrawal networks are preserved. +EAS delegated signatures must be signed again for domain version 1.3.0. + +The facilitator must confirm the reproducible v1.5.1-based prover hashes and fill the +implementation addresses before generating validations. Mainnet task-origin validation is required. + +From `active/evm/tasks/2026-10-07-denim-upgrade/`: + +```bash +make TASK_NETWORK=mainnet sign-task +``` diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/foundry.toml b/active/evm/tasks/2026-10-07-denim-upgrade/foundry.toml new file mode 100644 index 00000000..7e7062f5 --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/foundry.toml @@ -0,0 +1,28 @@ +[profile.default] +src = "script" +test = "test" +out = "out" +libs = ["../../lib"] +broadcast = "records" +fs_permissions = [{ access = "read-write", path = "./" }] +optimizer = true +optimizer_runs = 999999 +bytecode_hash = "none" +evm_version = "cancun" +auto_detect_solc = true +additional_compiler_profiles = [{ name = "factory", optimizer_runs = 5000 }] +compilation_restrictions = [ + { paths = "../../lib/contracts/src/universal/OptimismMintableERC20Factory.sol", optimizer_runs = 5000 }, + { paths = "../../lib/contracts/src/L2/OptimismMintableERC721Factory.sol", optimizer_runs = 5000 }, + { paths = "../../lib/contracts/src/L2/OptimismMintableERC721.sol", optimizer_runs = 5000 }, +] +remappings = [ + "forge-std/=../../lib/forge-std/src/", + "@base-contracts/=../../lib/contracts/", + "interfaces/=../../lib/contracts/interfaces/", + "src/=../../lib/contracts/src/", + "lib/=../../lib/", +] + +[lint] +lint_on_build = false diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/script/DeployAttestations.s.sol b/active/evm/tasks/2026-10-07-denim-upgrade/script/DeployAttestations.s.sol new file mode 100644 index 00000000..33f77a2f --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/script/DeployAttestations.s.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.19; + +import {Script} from "forge-std/Script.sol"; +import {EAS} from "@base-contracts/src/vendor/eas/EAS.sol"; +import {SchemaRegistry} from "@base-contracts/src/vendor/eas/SchemaRegistry.sol"; + +contract DeployAttestations is Script { + function run() external { + vm.startBroadcast(); + SchemaRegistry registry = new SchemaRegistry(); + EAS eas = new EAS(); + vm.stopBroadcast(); + require(keccak256(bytes(registry.version())) == keccak256("1.3.1-beta.2"), "registry version mismatch"); + require(keccak256(bytes(eas.version())) == keccak256("1.4.1-beta.3"), "EAS version mismatch"); + string memory path = vm.envString("ADDRESSES_JSON"); + vm.writeJson(vm.toString(address(registry)), path, ".schemaRegistry"); + vm.writeJson(vm.toString(address(eas)), path, ".eas"); + } +} diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/script/DeployBridges.s.sol b/active/evm/tasks/2026-10-07-denim-upgrade/script/DeployBridges.s.sol new file mode 100644 index 00000000..a2f31229 --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/script/DeployBridges.s.sol @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import {Script} from "forge-std/Script.sol"; +import {ISemver} from "interfaces/universal/ISemver.sol"; +import {L2CrossDomainMessenger} from "@base-contracts/src/L2/L2CrossDomainMessenger.sol"; +import {L2StandardBridge} from "@base-contracts/src/L2/L2StandardBridge.sol"; +import {L2ERC721Bridge} from "@base-contracts/src/L2/L2ERC721Bridge.sol"; +import {LegacyMigrator} from "./LegacyMigrator.sol"; + +contract DeployBridges is Script { + function run() external { + vm.startBroadcast(); + address[3] memory implementations = + [address(new L2CrossDomainMessenger()), address(new L2StandardBridge()), address(new L2ERC721Bridge())]; + LegacyMigrator migrator = new LegacyMigrator(); + vm.stopBroadcast(); + string[3] memory versions = [string("2.2.0"), "1.13.0", "1.10.0"]; + string[3] memory keys = [string(".l2CrossDomainMessenger"), ".l2StandardBridge", ".l2ERC721Bridge"]; + string memory path = vm.envString("ADDRESSES_JSON"); + for (uint256 i; i < 3; i++) { + require( + keccak256(bytes(ISemver(implementations[i]).version())) == keccak256(bytes(versions[i])), + "bridge version mismatch" + ); + vm.writeJson(vm.toString(implementations[i]), path, keys[i]); + } + vm.writeJson(vm.toString(address(migrator)), path, ".legacyMigrator"); + } +} diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/script/DeployFactory.s.sol b/active/evm/tasks/2026-10-07-denim-upgrade/script/DeployFactory.s.sol new file mode 100644 index 00000000..6fe8fc5b --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/script/DeployFactory.s.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import {Script} from "forge-std/Script.sol"; +import {OptimismMintableERC721Factory} from "@base-contracts/src/L2/OptimismMintableERC721Factory.sol"; +import {OptimismMintableERC20Factory} from "@base-contracts/src/universal/OptimismMintableERC20Factory.sol"; + +contract DeployFactory is Script { + address internal immutable bridge = vm.envAddress("FACTORY_BRIDGE"); + uint256 internal immutable remoteChainId = vm.envUint("REMOTE_CHAIN_ID"); + + function run() external { + vm.startBroadcast(); + OptimismMintableERC721Factory implementation = new OptimismMintableERC721Factory(bridge, remoteChainId); + OptimismMintableERC20Factory erc20Implementation = new OptimismMintableERC20Factory(); + vm.stopBroadcast(); + require(keccak256(bytes(implementation.version())) == keccak256("1.4.2"), "factory version mismatch"); + require( + keccak256(bytes(erc20Implementation.version())) == keccak256("1.10.2"), "ERC20 factory version mismatch" + ); + vm.writeJson( + vm.toString(address(erc20Implementation)), vm.envString("ADDRESSES_JSON"), ".optimismMintableERC20Factory" + ); + vm.writeJson( + vm.toString(address(implementation)), vm.envString("ADDRESSES_JSON"), ".optimismMintableERC721Factory" + ); + } +} diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/script/DeployOperatorFeeVault.s.sol b/active/evm/tasks/2026-10-07-denim-upgrade/script/DeployOperatorFeeVault.s.sol new file mode 100644 index 00000000..5a8e191f --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/script/DeployOperatorFeeVault.s.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.25; + +import {Script} from "forge-std/Script.sol"; +import {OperatorFeeVault} from "@base-contracts/src/L2/OperatorFeeVault.sol"; + +contract DeployOperatorFeeVault is Script { + function run() external { + vm.startBroadcast(); + OperatorFeeVault implementation = new OperatorFeeVault(); + vm.stopBroadcast(); + require(keccak256(bytes(implementation.version())) == keccak256("1.1.0"), "operator vault version mismatch"); + vm.writeJson(vm.toString(address(implementation)), vm.envString("ADDRESSES_JSON"), ".operatorFeeVault"); + } +} diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol b/active/evm/tasks/2026-10-07-denim-upgrade/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol new file mode 100644 index 00000000..a626dbd8 --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol @@ -0,0 +1,633 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import {console} from "forge-std/console.sol"; +import {LegacyMigrator} from "./LegacyMigrator.sol"; +import {Vm, VmSafe} from "forge-std/Vm.sol"; + +import {IOptimismPortal2} from "interfaces/L1/IOptimismPortal2.sol"; +import {IFeeVault, Types} from "interfaces/L2/IFeeVault.sol"; +import {IProxyAdmin as IL2ProxyAdmin} from "interfaces/universal/IProxyAdmin.sol"; +import {ISemver} from "interfaces/universal/ISemver.sol"; +import {Predeploys} from "@base-contracts/src/libraries/Predeploys.sol"; +import {AddressAliasHelper} from "@base-contracts/src/vendor/AddressAliasHelper.sol"; + +import {MultisigScript, Enum} from "@base-contracts/scripts/universal/MultisigScript.sol"; +import {Simulation} from "@base-contracts/scripts/universal/Simulation.sol"; +import {AggregateVerifier} from "@base-contracts/src/L1/proofs/AggregateVerifier.sol"; +import {GameType} from "@base-contracts/src/libraries/bridge/Types.sol"; + +import {IAggregateVerifierV020} from "./IAggregateVerifierV020.sol"; + +interface IProxyAdmin { + function owner() external view returns (address); +} + +interface IDisputeGameFactoryAdmin { + function gameArgs(GameType gameType) external view returns (bytes memory); + function gameCount() external view returns (uint256); + function gameImpls(GameType gameType) external view returns (address); + function owner() external view returns (address); + function setImplementation(GameType gameType, address impl) external; +} + +interface IProtocolVersions { + function MIN_NOTICE() external view returns (uint64); + function getSchedule() external view returns (uint64[] memory); + function minimumProtocolVersion() external view returns (uint256); + function registerUpgrade(uint64 timestamp, uint256 minProtocolVersion) external returns (uint256); +} + +/// @notice Registers Denim and upgrades thirteen L2 predeploys in one ProxyAdmin-owner transaction. + +contract ExecuteDenimUpgradeWithAllL2Predeploys is MultisigScript { + // Each deposit must call the L2 ProxyAdmin directly so it sees the aliased owner, not an L2 multicall. + // The L1 simulation cannot execute deposits, so the post-check replays them on an L2 fork. + uint64 internal constant L2_GAS_LIMIT = 300_000; + string internal constant L2_TO_L1_MESSAGE_PASSER_VERSION = "1.2.0"; + string internal constant L1_BLOCK_VERSION = "1.8.0"; + string internal constant FEE_VAULT_VERSION = "1.6.0"; + + address internal immutable optimismPortal; + uint256 internal immutable l2Fork; + address internal immutable l2ToL1MessagePasserImpl; + address internal immutable l1BlockImpl; + address internal immutable sequencerFeeVaultImpl; + address internal immutable baseFeeVaultImpl; + address internal immutable l1FeeVaultImpl; + address internal immutable feeVaultRecipient; + uint256 internal immutable feeVaultMinWithdrawalAmount; + Types.WithdrawalNetwork internal immutable feeVaultWithdrawalNetwork; + uint256 internal constant DENIM_UPGRADE_ID = 13; + + string internal constant OLD_VERSION = "0.2.0"; + string internal constant NEW_VERSION = "0.3.0"; + + address internal immutable ownerSafe; + address internal immutable proxyAdmin; + address internal immutable disputeGameFactory; + GameType internal immutable gameType; + address internal immutable oldAggregateVerifier; + address internal immutable newAggregateVerifier; + bytes32 internal immutable teeImageHash; + bytes32 internal immutable zkRangeHash; + bytes32 internal immutable zkAggregateHash; + uint256 internal immutable fastBlockInterval; + uint256 internal immutable fastIntermediateBlockInterval; + uint64 internal immutable denimActivationTimestamp; + uint256 internal immutable currentMinimumProtocolVersion; + uint256 internal immutable newMinimumProtocolVersion; + + // Live state captured at construction and re-asserted after execution. + address internal immutable protocolVersions; + uint256 internal immutable gameCountBefore; + bytes32 internal immutable scheduleHashBefore; + + constructor() { + optimismPortal = vm.envAddress("OPTIMISM_PORTAL"); + l2Fork = vm.createFork(vm.envString("L2_RPC_URL")); + l2ToL1MessagePasserImpl = vm.envAddress("L2_TO_L1_MESSAGE_PASSER_IMPL"); + l1BlockImpl = vm.envAddress("L1_BLOCK_IMPL"); + sequencerFeeVaultImpl = vm.envAddress("SEQUENCER_FEE_VAULT_IMPL"); + baseFeeVaultImpl = vm.envAddress("BASE_FEE_VAULT_IMPL"); + l1FeeVaultImpl = vm.envAddress("L1_FEE_VAULT_IMPL"); + require( + l2ToL1MessagePasserImpl != address(0) && l1BlockImpl != address(0) && sequencerFeeVaultImpl != address(0) + && baseFeeVaultImpl != address(0) && l1FeeVaultImpl != address(0), + "L2 implementation address missing" + ); + feeVaultRecipient = vm.envAddress("FEE_VAULT_RECIPIENT"); + feeVaultMinWithdrawalAmount = vm.envUint("FEE_VAULT_MIN_WITHDRAWAL_AMOUNT"); + feeVaultWithdrawalNetwork = Types.WithdrawalNetwork(vm.envUint("FEE_VAULT_WITHDRAWAL_NETWORK")); + ownerSafe = vm.envAddress("PROXY_ADMIN_OWNER"); + proxyAdmin = vm.envAddress("L1_PROXY_ADMIN"); + disputeGameFactory = vm.envAddress("DISPUTE_GAME_FACTORY_PROXY"); + gameType = GameType.wrap(uint32(vm.envUint("GAME_TYPE"))); + oldAggregateVerifier = vm.envAddress("OLD_AGGREGATE_VERIFIER"); + newAggregateVerifier = vm.envAddress("NEW_AGGREGATE_VERIFIER"); + teeImageHash = vm.envBytes32("AGGREGATE_VERIFIER_TEE_IMAGE_HASH"); + zkRangeHash = vm.envBytes32("AGGREGATE_VERIFIER_ZK_RANGE_HASH"); + zkAggregateHash = vm.envBytes32("AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH"); + fastBlockInterval = vm.envUint("FAST_BLOCK_INTERVAL"); + fastIntermediateBlockInterval = vm.envUint("FAST_INTERMEDIATE_BLOCK_INTERVAL"); + denimActivationTimestamp = uint64(vm.envUint("PROTOCOL_VERSIONS_DENIM_ACTIVATION_TIMESTAMP")); + currentMinimumProtocolVersion = vm.envUint("PROTOCOL_VERSIONS_CURRENT_MINIMUM_PROTOCOL_VERSION"); + newMinimumProtocolVersion = vm.envUint("PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION"); + + address registry = IAggregateVerifierV020(oldAggregateVerifier).PROTOCOL_VERSIONS(); + protocolVersions = registry; + gameCountBefore = IDisputeGameFactoryAdmin(disputeGameFactory).gameCount(); + scheduleHashBefore = keccak256(abi.encode(IProtocolVersions(registry).getSchedule())); + } + + function setUp() public { + require(block.chainid == 1, "wrong L1 chain"); + uint256 l1Fork = vm.activeFork(); + vm.selectFork(l2Fork); + require(block.chainid == 8453, "wrong L2 chain"); + _assertL2Before(); + vm.selectFork(l1Fork); + require( + teeImageHash != bytes32(0) && zkRangeHash != bytes32(0) && zkAggregateHash != bytes32(0), + "prover hashes missing" + ); + require(!IOptimismPortal2(payable(optimismPortal)).paused(), "optimism portal paused"); + require(feeVaultRecipient != address(0), "fee vault recipient not set"); + IDisputeGameFactoryAdmin dgf = IDisputeGameFactoryAdmin(disputeGameFactory); + IProtocolVersions registry = IProtocolVersions(protocolVersions); + + // Both calls are authorized against the same Safe: the factory owner and the ProxyAdmin owner. + require(dgf.owner() == ownerSafe, "dgf owner mismatch"); + require(IProxyAdmin(proxyAdmin).owner() == ownerSafe, "proxy admin owner mismatch"); + + require(dgf.gameImpls(gameType) == oldAggregateVerifier, "unexpected current aggregate verifier"); + require(dgf.gameArgs(gameType).length == 0, "aggregate game args not empty"); + require(_eq(IAggregateVerifierV020(oldAggregateVerifier).version(), OLD_VERSION), "unexpected current version"); + require(newAggregateVerifier.code.length != 0, "new aggregate verifier not deployed"); + require(newAggregateVerifier != oldAggregateVerifier, "new aggregate verifier is the current one"); + require(_eq(AggregateVerifier(newAggregateVerifier).version(), NEW_VERSION), "new version mismatch"); + _assertNewVerifier(); + + uint64[] memory schedule = registry.getSchedule(); + require(schedule.length == DENIM_UPGRADE_ID, "unexpected upgrade count"); + require(denimActivationTimestamp > schedule[schedule.length - 1], "denim must activate after cobalt"); + require( + denimActivationTimestamp >= uint64(block.timestamp) + registry.MIN_NOTICE(), + "denim activation inside MIN_NOTICE" + ); + require( + registry.minimumProtocolVersion() == currentMinimumProtocolVersion, + "current minimum protocol version mismatch" + ); + require(newMinimumProtocolVersion > currentMinimumProtocolVersion, "minimum protocol version not increased"); + require(newMinimumProtocolVersion <= type(uint128).max, "minimum protocol version too large"); + } + + function _buildCalls() internal view override returns (Call[] memory) { + bytes[] memory l2Calls = _l2Calls(); + Call[] memory calls = new Call[](2 + l2Calls.length); + + // Swap the verifier first so it is live before the schedule it reads gains the Denim entry. + calls[0] = Call({ + operation: Enum.Operation.Call, + target: disputeGameFactory, + data: abi.encodeCall(IDisputeGameFactoryAdmin.setImplementation, (gameType, newAggregateVerifier)), + value: 0 + }); + + calls[1] = Call({ + operation: Enum.Operation.Call, + target: protocolVersions, + data: abi.encodeCall( + IProtocolVersions.registerUpgrade, (denimActivationTimestamp, newMinimumProtocolVersion) + ), + value: 0 + }); + + for (uint256 i; i < l2Calls.length; i++) { + calls[2 + i] = Call({ + operation: Enum.Operation.Call, + target: optimismPortal, + data: abi.encodeCall( + IOptimismPortal2.depositTransaction, (Predeploys.PROXY_ADMIN, 0, L2_GAS_LIMIT, false, l2Calls[i]) + ), + value: 0 + }); + } + + return calls; + } + + function _postCheck(Vm.AccountAccess[] memory accesses, Simulation.Payload memory) internal override { + _assertDenimUpgrade(); + _assertDeposits(accesses); + _assertL2Upgrade(); + } + + function _assertDenimUpgrade() internal view { + IDisputeGameFactoryAdmin dgf = IDisputeGameFactoryAdmin(disputeGameFactory); + IProtocolVersions registry = IProtocolVersions(protocolVersions); + + require(dgf.gameImpls(gameType) == newAggregateVerifier, "aggregate verifier not registered"); + require(dgf.gameArgs(gameType).length == 0, "aggregate game args changed"); + require(dgf.gameCount() == gameCountBefore, "game count changed"); + + uint64[] memory schedule = registry.getSchedule(); + require(schedule.length == DENIM_UPGRADE_ID + 1, "denim not registered"); + require(schedule[DENIM_UPGRADE_ID] == denimActivationTimestamp, "denim activation mismatch"); + uint64[] memory previous = new uint64[](DENIM_UPGRADE_ID); + for (uint256 i = 0; i < DENIM_UPGRADE_ID; i++) { + previous[i] = schedule[i]; + } + require(keccak256(abi.encode(previous)) == scheduleHashBefore, "previous upgrades changed"); + require(registry.minimumProtocolVersion() == newMinimumProtocolVersion, "minimum protocol version not updated"); + + // The new verifier must switch to the fast intervals exactly at the first Denim block. + _assertNewVerifier(); + AggregateVerifier av = AggregateVerifier(newAggregateVerifier); + uint256 firstFastBlock = av.L2_GENESIS_BLOCK_NUMBER() + + _divUp(denimActivationTimestamp - av.L2_GENESIS_TIMESTAMP(), av.L2_BLOCK_TIME()); + (uint256 blockInterval, uint256 intermediateBlockInterval) = av.intervalsForStartingBlock(firstFastBlock - 1); + require(blockInterval == av.SLOW_BLOCK_INTERVAL(), "pre-denim block interval mismatch"); + require(intermediateBlockInterval == av.SLOW_INTERMEDIATE_BLOCK_INTERVAL(), "pre-denim intermediate mismatch"); + (blockInterval, intermediateBlockInterval) = av.intervalsForStartingBlock(firstFastBlock); + require(blockInterval == fastBlockInterval, "post-denim block interval mismatch"); + require(intermediateBlockInterval == fastIntermediateBlockInterval, "post-denim intermediate mismatch"); + } + + /// @dev Checks the new verifier's hashes and fast intervals against config and every other immutable + /// against the live verifier. + function _assertNewVerifier() internal view { + IAggregateVerifierV020 live = IAggregateVerifierV020(oldAggregateVerifier); + AggregateVerifier av = AggregateVerifier(newAggregateVerifier); + + require(av.TEE_IMAGE_HASH() == teeImageHash, "tee image hash mismatch"); + require(av.ZK_RANGE_HASH() == zkRangeHash, "zk range hash mismatch"); + require(av.ZK_AGGREGATE_HASH() == zkAggregateHash, "zk aggregate hash mismatch"); + require(av.FAST_BLOCK_INTERVAL() == fastBlockInterval, "fast block interval mismatch"); + require(av.FAST_INTERMEDIATE_BLOCK_INTERVAL() == fastIntermediateBlockInterval, "fast intermediate mismatch"); + + require(av.SLOW_BLOCK_INTERVAL() == live.BLOCK_INTERVAL(), "slow block interval mismatch"); + require( + av.SLOW_INTERMEDIATE_BLOCK_INTERVAL() == live.INTERMEDIATE_BLOCK_INTERVAL(), "slow intermediate mismatch" + ); + require(GameType.unwrap(av.gameType()) == GameType.unwrap(live.gameType()), "game type mismatch"); + require(address(av.anchorStateRegistry()) == live.anchorStateRegistry(), "asr mismatch"); + require(address(av.DISPUTE_GAME_FACTORY()) == live.DISPUTE_GAME_FACTORY(), "dgf mismatch"); + require(address(av.DELAYED_WETH()) == live.DELAYED_WETH(), "delayed weth mismatch"); + require(address(av.TEE_VERIFIER()) == live.TEE_VERIFIER(), "tee verifier mismatch"); + require(address(av.ZK_VERIFIER()) == live.ZK_VERIFIER(), "zk verifier mismatch"); + require(av.CONFIG_HASH() == live.CONFIG_HASH(), "config hash mismatch"); + require(av.L2_CHAIN_ID() == live.L2_CHAIN_ID(), "l2 chain id mismatch"); + require(address(av.PROTOCOL_VERSIONS()) == live.PROTOCOL_VERSIONS(), "protocol versions mismatch"); + require(av.L2_GENESIS_BLOCK_NUMBER() == live.L2_GENESIS_BLOCK_NUMBER(), "genesis block mismatch"); + require(av.L2_GENESIS_TIMESTAMP() == live.L2_GENESIS_TIMESTAMP(), "genesis timestamp mismatch"); + require(av.L2_BLOCK_TIME() == live.L2_BLOCK_TIME(), "l2 block time mismatch"); + } + + function _assertDeposits(Vm.AccountAccess[] memory accesses) internal view { + bytes4 depositSelector = IOptimismPortal2.depositTransaction.selector; + uint256 deposits; + for (uint256 i; i < accesses.length; i++) { + Vm.AccountAccess memory access = accesses[i]; + if (access.kind != VmSafe.AccountAccessKind.Call || access.account != optimismPortal) continue; + if (access.data.length < 4 || bytes4(access.data) != depositSelector) continue; + require(access.accessor == ownerSafe, "deposit not sent by the proxy admin owner"); + require(!access.reverted, "deposit reverted"); + deposits++; + } + require(deposits == 13, "unexpected deposit count"); + } + + function _assertL2Upgrade() internal { + uint256 l1Fork = vm.activeFork(); + vm.selectFork(l2Fork); + _assertL2Before(); + address aliasOwner = AddressAliasHelper.applyL1ToL2Alias(ownerSafe); + address[13] memory proxies = _allProxies(); + address[13] memory impls; + impls[0] = l2ToL1MessagePasserImpl; + impls[1] = l1BlockImpl; + impls[2] = sequencerFeeVaultImpl; + impls[3] = baseFeeVaultImpl; + impls[4] = l1FeeVaultImpl; + address[8] memory extra = _extraImplementations(); + for (uint256 i; i < 8; i++) { + impls[5 + i] = extra[i]; + } + uint256[4] memory processed; + for (uint256 i; i < 3; i++) { + processed[i] = _uint(proxies[i + 2], "totalProcessed()"); + } + processed[3] = _uint(VAULT, "totalProcessed()"); + uint256 nonce = _uint(MESSENGER, "messageNonce()"); + bytes32 sender = vm.load(MESSENGER, bytes32(uint256(204))); + bytes[] memory calls = _l2Calls(); + for (uint256 i; i < 13; i++) { + require(impls[i].code.length != 0, "implementation missing"); + vm.cool(ADMIN); + vm.cool(proxies[i]); + vm.cool(impls[i]); + vm.cool(legacyMigrator); + vm.coolSlot(ADMIN, bytes32(0)); + vm.coolSlot(ADMIN, IMPLEMENTATION_SLOT); + vm.coolSlot(proxies[i], IMPLEMENTATION_SLOT); + vm.coolSlot(proxies[i], ADMIN_SLOT); + vm.coolSlot(proxies[i], INITIALIZABLE_SLOT); + for (uint256 slot; slot <= 4; slot++) { + vm.coolSlot(proxies[i], bytes32(slot)); + } + vm.coolSlot(MESSENGER, bytes32(uint256(204))); + vm.coolSlot(MESSENGER, bytes32(uint256(207))); + vm.prank(aliasOwner); + uint256 beforeGas = gasleft(); + (bool ok, bytes memory reason) = ADMIN.call{gas: L2_GAS_LIMIT}(calls[i]); + uint256 used = beforeGas - gasleft(); + console.log("L2 cold call gas", i, used); + if (!ok) assembly { revert(add(reason, 32), mload(reason)) } + require(used * 3 <= uint256(L2_GAS_LIMIT) * 2, "L2 call lacks gas headroom"); + } + _assertPredeploy(proxies[0], impls[0], L2_TO_L1_MESSAGE_PASSER_VERSION); + _assertPredeploy(proxies[1], impls[1], L1_BLOCK_VERSION); + for (uint256 i; i < 3; i++) { + _assertFeeVault(proxies[i + 2], impls[i + 2]); + require(_uint(proxies[i + 2], "totalProcessed()") == processed[i], "fee processed changed"); + require(vm.load(proxies[i + 2], INITIALIZABLE_SLOT) == bytes32(uint256(1)), "fee initializer mismatch"); + } + _assertUpgrade(extra); + require(_uint(VAULT, "totalProcessed()") == processed[3], "operator processed changed"); + require(_uint(MESSENGER, "messageNonce()") == nonce, "messenger nonce changed"); + require(vm.load(MESSENGER, bytes32(uint256(204))) == sender, "messenger sender changed"); + require(IL2ProxyAdmin(ADMIN).owner() == aliasOwner, "l2 owner changed"); + _assertBaseTime(); + vm.selectFork(l1Fork); + } + + function _assertFeeVault(address proxy, address impl) internal view { + _assertPredeploy(proxy, impl, FEE_VAULT_VERSION); + IFeeVault vault = IFeeVault(payable(proxy)); + require(vault.recipient() == feeVaultRecipient, "fee vault recipient mismatch"); + require(vault.minWithdrawalAmount() == feeVaultMinWithdrawalAmount, "fee vault min withdrawal mismatch"); + require(vault.withdrawalNetwork() == feeVaultWithdrawalNetwork, "fee vault withdrawal network mismatch"); + require(_uint(proxy, "RECIPIENT()") == uint160(feeVaultRecipient), "legacy fee recipient mismatch"); + require(_uint(proxy, "MIN_WITHDRAWAL_AMOUNT()") == feeVaultMinWithdrawalAmount, "legacy fee minimum mismatch"); + require( + _uint(proxy, "WITHDRAWAL_NETWORK()") == uint256(feeVaultWithdrawalNetwork), "legacy fee network mismatch" + ); + } + + function _assertPredeploy(address proxy, address impl, string memory version) internal view { + require( + IL2ProxyAdmin(Predeploys.PROXY_ADMIN).getProxyImplementation(proxy) == impl, + "predeploy implementation mismatch" + ); + require(_eq(ISemver(proxy).version(), version), "predeploy version mismatch"); + } + + function _l2Calls() internal view returns (bytes[] memory calls) { + bytes memory initializeFeeVault = abi.encodeCall( + IFeeVault.initialize, (feeVaultRecipient, feeVaultMinWithdrawalAmount, feeVaultWithdrawalNetwork) + ); + + calls = new bytes[](13); + calls[0] = abi.encodeCall( + IL2ProxyAdmin.upgrade, (payable(Predeploys.L2_TO_L1_MESSAGE_PASSER), l2ToL1MessagePasserImpl) + ); + calls[1] = abi.encodeCall(IL2ProxyAdmin.upgrade, (payable(Predeploys.L1_BLOCK_ATTRIBUTES), l1BlockImpl)); + calls[2] = abi.encodeCall( + IL2ProxyAdmin.upgradeAndCall, + (payable(Predeploys.SEQUENCER_FEE_WALLET), sequencerFeeVaultImpl, initializeFeeVault) + ); + calls[3] = abi.encodeCall( + IL2ProxyAdmin.upgradeAndCall, (payable(Predeploys.BASE_FEE_VAULT), baseFeeVaultImpl, initializeFeeVault) + ); + calls[4] = abi.encodeCall( + IL2ProxyAdmin.upgradeAndCall, (payable(Predeploys.L1_FEE_VAULT), l1FeeVaultImpl, initializeFeeVault) + ); + bytes[] memory extra = _extraCalls(_extraImplementations()); + for (uint256 i; i < 8; i++) { + calls[5 + i] = extra[i]; + } + } + + function _ownerSafe() internal view override returns (address) { + return ownerSafe; + } + + function _divUp(uint256 a, uint256 b) internal pure returns (uint256) { + return (a + b - 1) / b; + } + + function _eq(string memory a, string memory b) internal pure returns (bool) { + return keccak256(bytes(a)) == keccak256(bytes(b)); + } + address internal constant ADMIN = 0x4200000000000000000000000000000000000018; + address internal constant FACTORY = 0x4200000000000000000000000000000000000017; + address internal constant VAULT = 0x420000000000000000000000000000000000001b; + address internal constant REGISTRY = 0x4200000000000000000000000000000000000020; + address internal constant EAS_PROXY = 0x4200000000000000000000000000000000000021; + address internal constant MESSENGER = 0x4200000000000000000000000000000000000007; + address internal constant BRIDGE = 0x4200000000000000000000000000000000000010; + address internal constant ERC20_FACTORY = 0x4200000000000000000000000000000000000012; + address internal constant ERC721_BRIDGE = 0x4200000000000000000000000000000000000014; + bytes32 internal constant INITIALIZABLE_SLOT = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00; + + address internal immutable factoryBridge = vm.envAddress("FACTORY_BRIDGE"); + uint256 internal immutable remoteChainId = vm.envUint("REMOTE_CHAIN_ID"); + address internal immutable vaultRecipient = vm.envAddress("OPERATOR_FEE_VAULT_RECIPIENT"); + uint256 internal immutable vaultMinimum = vm.envUint("OPERATOR_FEE_VAULT_MIN_WITHDRAWAL_AMOUNT"); + uint8 internal immutable vaultNetwork = uint8(vm.envUint("OPERATOR_FEE_VAULT_WITHDRAWAL_NETWORK")); + address internal immutable l1Messenger = vm.envAddress("L1_CROSS_DOMAIN_MESSENGER"); + address internal immutable l1Bridge = vm.envAddress("L1_STANDARD_BRIDGE"); + address internal immutable erc20Bridge = vm.envAddress("ERC20_FACTORY_BRIDGE"); + address internal immutable l1ERC721Bridge = vm.envAddress("L1_ERC721_BRIDGE"); + + address internal immutable legacyMigrator = vm.envAddress("LEGACY_MIGRATOR"); + + function _migrator() internal view returns (address) { + return legacyMigrator; + } + + function _proxies() internal pure returns (address[8] memory) { + return [FACTORY, VAULT, REGISTRY, EAS_PROXY, MESSENGER, BRIDGE, ERC20_FACTORY, ERC721_BRIDGE]; + } + + function _versions() internal pure returns (string[8] memory) { + return [string("1.4.2"), "1.1.0", "1.3.1-beta.2", "1.4.1-beta.3", "2.2.0", "1.13.0", "1.10.2", "1.10.0"]; + } + + function _extraCalls(address[8] memory impls) internal view returns (bytes[] memory calls) { + address[8] memory proxies = _proxies(); + calls = new bytes[](8); + for (uint256 i; i < 4; i++) { + calls[i] = abi.encodeCall(IL2ProxyAdmin.upgrade, (payable(proxies[i]), impls[i])); + } + address[4] memory counterparts = [l1Messenger, l1Bridge, erc20Bridge, l1ERC721Bridge]; + for (uint256 i; i < 4; i++) { + calls[i + 4] = abi.encodeCall( + IL2ProxyAdmin.upgradeAndCall, + ( + payable(proxies[i + 4]), + _migrator(), + abi.encodeCall( + LegacyMigrator.migrate, + (impls[i + 4], abi.encodeWithSignature("initialize(address)", counterparts[i])) + ) + ) + ); + } + calls[1] = abi.encodeCall( + IL2ProxyAdmin.upgradeAndCall, + ( + payable(VAULT), + impls[1], + abi.encodeWithSignature("initialize(address,uint256,uint8)", vaultRecipient, vaultMinimum, vaultNetwork) + ) + ); + } + + address internal immutable extraImpl0 = vm.envAddress("ERC721_FACTORY_IMPL"); + address internal immutable extraImpl1 = vm.envAddress("OPERATOR_FEE_VAULT_IMPL"); + address internal immutable extraImpl2 = vm.envAddress("SCHEMA_REGISTRY_IMPL"); + address internal immutable extraImpl3 = vm.envAddress("EAS_IMPL"); + address internal immutable extraImpl4 = vm.envAddress("MESSENGER_IMPL"); + address internal immutable extraImpl5 = vm.envAddress("BRIDGE_IMPL"); + address internal immutable extraImpl6 = vm.envAddress("ERC20_FACTORY_IMPL"); + address internal immutable extraImpl7 = vm.envAddress("ERC721_BRIDGE_IMPL"); + + function _extraImplementations() internal view returns (address[8] memory) { + return [extraImpl0, extraImpl1, extraImpl2, extraImpl3, extraImpl4, extraImpl5, extraImpl6, extraImpl7]; + } + bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; + bytes32 internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; + address internal constant BASE_TIME = 0x4200000000000000000000000000000000000030; + + function _assertBaseTime() internal view { + require(vm.load(BASE_TIME, IMPLEMENTATION_SLOT) == bytes32(0), "BaseTime already installed"); + require(uint256(vm.load(BASE_TIME, ADMIN_SLOT)) == uint160(ADMIN), "BaseTime admin mismatch"); + } + + function _allProxies() internal pure returns (address[13] memory result) { + result[0] = Predeploys.L2_TO_L1_MESSAGE_PASSER; + result[1] = Predeploys.L1_BLOCK_ATTRIBUTES; + result[2] = Predeploys.SEQUENCER_FEE_WALLET; + result[3] = Predeploys.BASE_FEE_VAULT; + result[4] = Predeploys.L1_FEE_VAULT; + address[8] memory extra = _proxies(); + for (uint256 i; i < 8; i++) { + result[5 + i] = extra[i]; + } + } + + function _assertL2Before() internal view { + _assertBaseTime(); + require(IL2ProxyAdmin(ADMIN).owner() == AddressAliasHelper.applyL1ToL2Alias(ownerSafe), "l2 owner mismatch"); + string[13] memory versions = [ + string("1.0.0"), + "1.7.0", + "1.3.0", + "1.3.0", + "1.3.0", + "1.2.0", + "1.0.0", + "1.0.1", + "1.0.1", + "1.4.0", + "1.1.0", + "1.9.0", + "1.1.0" + ]; + address[13] memory proxies = _allProxies(); + for (uint256 i; i < 13; i++) { + require(_eq(ISemver(proxies[i]).version(), versions[i]), "legacy version changed"); + require(uint256(vm.load(proxies[i], ADMIN_SLOT)) == uint160(ADMIN), "proxy admin changed"); + } + for (uint256 i = 2; i <= 4; i++) { + require(_uint(proxies[i], "RECIPIENT()") == uint160(feeVaultRecipient), "live fee recipient changed"); + require( + _uint(proxies[i], "MIN_WITHDRAWAL_AMOUNT()") == feeVaultMinWithdrawalAmount, "live fee minimum changed" + ); + require( + _uint(proxies[i], "WITHDRAWAL_NETWORK()") == uint256(feeVaultWithdrawalNetwork), + "live fee network changed" + ); + require(vm.load(proxies[i], INITIALIZABLE_SLOT) == bytes32(0), "fee vault initialized"); + require( + vm.load(proxies[i], bytes32(uint256(1))) == bytes32(0) + && vm.load(proxies[i], bytes32(uint256(2))) == bytes32(0), + "fee slots occupied" + ); + } + require(_uint(FACTORY, "BRIDGE()") == uint160(factoryBridge), "live factory bridge changed"); + require(_uint(FACTORY, "REMOTE_CHAIN_ID()") == remoteChainId, "live remote chain changed"); + require(_uint(VAULT, "RECIPIENT()") == uint160(vaultRecipient), "live operator recipient changed"); + require(_uint(VAULT, "MIN_WITHDRAWAL_AMOUNT()") == vaultMinimum, "live operator minimum changed"); + require(_uint(VAULT, "WITHDRAWAL_NETWORK()") == vaultNetwork, "live operator network changed"); + require(vm.load(VAULT, INITIALIZABLE_SLOT) == bytes32(0), "operator vault initialized"); + require( + vm.load(VAULT, bytes32(uint256(1))) == bytes32(0) && vm.load(VAULT, bytes32(uint256(2))) == bytes32(0), + "operator slots occupied" + ); + require(_uint(MESSENGER, "OTHER_MESSENGER()") == uint160(l1Messenger), "live L1 messenger changed"); + require(_uint(BRIDGE, "OTHER_BRIDGE()") == uint160(l1Bridge), "live L1 bridge changed"); + require( + _uint(ERC20_FACTORY, "BRIDGE()") == uint160(erc20Bridge) && erc20Bridge == BRIDGE, + "live ERC20 bridge changed" + ); + require(_uint(ERC721_BRIDGE, "OTHER_BRIDGE()") == uint160(l1ERC721Bridge), "live L1 ERC721 bridge changed"); + require(uint256(vm.load(MESSENGER, bytes32(0))) == uint256(1) << 160, "messenger slot zero changed"); + require(vm.load(BRIDGE, bytes32(0)) == bytes32(0), "bridge slot zero changed"); + require(vm.load(ERC20_FACTORY, bytes32(0)) == bytes32(uint256(1)), "ERC20 slot zero changed"); + require(vm.load(ERC721_BRIDGE, bytes32(0)) == bytes32(0), "ERC721 slot zero changed"); + require(vm.load(MESSENGER, bytes32(uint256(204))) == bytes32(uint256(0xdead)), "messenger relaying"); + require( + _uint(MESSENGER, "l1CrossDomainMessenger()") == uint160(l1Messenger), "legacy messenger counterpart changed" + ); + require(_uint(BRIDGE, "MESSENGER()") == uint160(MESSENGER), "live bridge messenger changed"); + require(_uint(ERC721_BRIDGE, "MESSENGER()") == uint160(MESSENGER), "live ERC721 messenger changed"); + require( + vm.load(ERC20_FACTORY, bytes32(uint256(1))) == bytes32(uint256(uint160(BRIDGE))), + "ERC20 bridge slot changed" + ); + require( + vm.load(BRIDGE, bytes32(uint256(3))) == bytes32(0) && vm.load(BRIDGE, bytes32(uint256(4))) == bytes32(0), + "bridge configuration slots occupied" + ); + require( + vm.load(ERC721_BRIDGE, bytes32(uint256(1))) == bytes32(0) + && vm.load(ERC721_BRIDGE, bytes32(uint256(2))) == bytes32(0), + "ERC721 configuration slots occupied" + ); + require(vm.load(MESSENGER, bytes32(uint256(207))) == bytes32(0), "messenger counterpart slot occupied"); + } + + function _assertUpgrade(address[8] memory impls) internal view { + address[8] memory proxies = _proxies(); + string[8] memory versions = _versions(); + for (uint256 i; i < 8; i++) { + require(IL2ProxyAdmin(ADMIN).getProxyImplementation(proxies[i]) == impls[i], "implementation mismatch"); + require( + keccak256(bytes(ISemver(proxies[i]).version())) == keccak256(bytes(versions[i])), "version mismatch" + ); + } + _assertConfiguration(); + } + + function _assertConfiguration() internal view { + for (uint256 i = 4; i < 8; i++) { + uint256 flags = uint256(vm.load(_proxies()[i], bytes32(0))) >> (i == 4 ? 160 : 0); + require(uint8(flags) == 1 && uint8(flags >> 8) == 0, "migration initializer mismatch"); + } + require(_uint(MESSENGER, "otherMessenger()") == uint160(l1Messenger), "messenger counterpart mismatch"); + require(_uint(MESSENGER, "OTHER_MESSENGER()") == uint160(l1Messenger), "legacy messenger counterpart mismatch"); + require(_uint(BRIDGE, "messenger()") == uint160(MESSENGER), "bridge messenger mismatch"); + require(_uint(BRIDGE, "otherBridge()") == uint160(l1Bridge), "bridge counterpart mismatch"); + require(_uint(BRIDGE, "OTHER_BRIDGE()") == uint160(l1Bridge), "legacy bridge counterpart mismatch"); + require(_uint(ERC20_FACTORY, "bridge()") == uint160(BRIDGE), "ERC20 bridge mismatch"); + require(_uint(ERC20_FACTORY, "BRIDGE()") == uint160(BRIDGE), "legacy ERC20 bridge mismatch"); + require(_uint(ERC721_BRIDGE, "messenger()") == uint160(MESSENGER), "ERC721 messenger mismatch"); + require(_uint(ERC721_BRIDGE, "otherBridge()") == uint160(l1ERC721Bridge), "ERC721 counterpart mismatch"); + require(_uint(ERC721_BRIDGE, "OTHER_BRIDGE()") == uint160(l1ERC721Bridge), "legacy ERC721 counterpart mismatch"); + require(_uint(ERC721_BRIDGE, "MESSENGER()") == uint160(MESSENGER), "legacy ERC721 messenger mismatch"); + require(_uint(BRIDGE, "MESSENGER()") == uint160(MESSENGER), "legacy bridge messenger mismatch"); + require(_uint(MESSENGER, "l1CrossDomainMessenger()") == uint160(l1Messenger), "legacy L1 messenger mismatch"); + require(_uint(FACTORY, "bridge()") == uint160(factoryBridge), "factory bridge mismatch"); + require(_uint(FACTORY, "BRIDGE()") == uint160(factoryBridge), "legacy factory bridge mismatch"); + require(_uint(FACTORY, "remoteChainID()") == remoteChainId, "remote chain mismatch"); + require(_uint(FACTORY, "REMOTE_CHAIN_ID()") == remoteChainId, "legacy remote chain mismatch"); + require(_uint(VAULT, "recipient()") == uint160(vaultRecipient), "operator recipient mismatch"); + require(_uint(VAULT, "minWithdrawalAmount()") == vaultMinimum, "operator minimum mismatch"); + require(_uint(VAULT, "withdrawalNetwork()") == vaultNetwork, "operator network mismatch"); + require(_uint(VAULT, "RECIPIENT()") == uint160(vaultRecipient), "legacy operator recipient mismatch"); + require(_uint(VAULT, "MIN_WITHDRAWAL_AMOUNT()") == vaultMinimum, "legacy operator minimum mismatch"); + require(_uint(VAULT, "WITHDRAWAL_NETWORK()") == vaultNetwork, "legacy operator network mismatch"); + require(vm.load(VAULT, INITIALIZABLE_SLOT) == bytes32(uint256(1)), "operator initializer mismatch"); + require(_uint(EAS_PROXY, "getSchemaRegistry()") == uint160(REGISTRY), "EAS registry mismatch"); + } + + function _uint(address target, string memory signature) internal view returns (uint256) { + (bool ok, bytes memory data) = target.staticcall(abi.encodeWithSignature(signature)); + require(ok, signature); + return abi.decode(data, (uint256)); + } +} diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/script/LegacyMigrator.sol b/active/evm/tasks/2026-10-07-denim-upgrade/script/LegacyMigrator.sol new file mode 100644 index 00000000..0cb98e35 --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/script/LegacyMigrator.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +contract LegacyMigrator { + address private immutable self = address(this); + + event Upgraded(address indexed implementation); + + function migrate(address newImpl, bytes calldata initData) external { + require(address(this) != self, "delegatecall only"); + // Legacy slot zero contains only initializer flags and obsolete configuration spacers. + assembly { + sstore(0, 0) + sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImpl) + } + emit Upgraded(newImpl); + (bool ok, bytes memory reason) = newImpl.delegatecall(initData); + if (!ok) assembly { revert(add(reason, 32), mload(reason)) } + } +} diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/status.json b/active/evm/tasks/2026-10-07-denim-upgrade/status.json index 80f29425..854e9fbf 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/status.json +++ b/active/evm/tasks/2026-10-07-denim-upgrade/status.json @@ -2,7 +2,7 @@ "schema_version": 1, "task": "2026-10-07-denim-upgrade", "kind": "active", - "last_updated": "2026-10-19T21:36:07Z", + "last_updated": "2026-10-22T19:19:26Z", "networks": { "sepolia": { "step": "executed", @@ -26,6 +26,22 @@ "blocksec_ticket": null, "signatures": {}, "executed_tx": "0x9468085edf0a0d5e3dbeea7ab84f13400a496aafc6c21ca8420e4f136c106034" + }, + "mainnet": { + "step": "authoring", + "pr": null, + "blocksec_ticket": null, + "signatures": { + "base": { + "collected": 0, + "required": 3 + }, + "security-council": { + "collected": 0, + "required": 8 + } + }, + "executed_tx": null } } } diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/test/Mainnet.t.sol b/active/evm/tasks/2026-10-07-denim-upgrade/test/Mainnet.t.sol new file mode 100644 index 00000000..8d78e3c4 --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/test/Mainnet.t.sol @@ -0,0 +1,364 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import {Script, console} from "forge-std/Script.sol"; +import {Vm} from "forge-std/Vm.sol"; +import {Simulation} from "@base-contracts/scripts/universal/Simulation.sol"; +import {AggregateVerifier} from "@base-contracts/src/L1/proofs/AggregateVerifier.sol"; +import {DeployDenimProofImpls} from "../script/DeployDenimProofImpls.s.sol"; +import {ExecuteDenimUpgradeWithAllL2Predeploys} from "../script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol"; + +contract VerifierFixture is DeployDenimProofImpls { + function deploy() external returns (address) { + return address( + new AggregateVerifier( + gameType, + anchorStateRegistry, + delayedWeth, + teeVerifier, + zkVerifier, + teeImageHash, + _zkHashes(), + configHash, + l2ChainId, + _intervalConfig(), + _scheduleConfig() + ) + ); + } +} + +contract RevertingInitializer { + function initialize(address) external { + assembly { sstore(0, 999) } + revert("initializer failed"); + } + + function initialize(address, uint256, uint8) external { + assembly { sstore(1, 999) } + revert("initializer failed"); + } +} + +contract MainnetHarness is ExecuteDenimUpgradeWithAllL2Predeploys { + function l2ForkId() external view returns (uint256) { + return l2Fork; + } + + function replay() external { + _assertL2Upgrade(); + } + + function simulateForTest() external { + require(_buildCalls().length == 15, "mainnet must contain fifteen calls"); + address[] memory safes = new address[](1); + safes[0] = ownerSafe; + uint256 snapshot = vm.snapshotState(); + uint256 beforeGas = gasleft(); + (Vm.AccountAccess[] memory accesses, Simulation.Payload memory payload) = + _simulateForSigner(safes, _buildCallsChain(safes)); + uint256 used = beforeGas - gasleft(); + console.log("L1 signer simulation gas including instrumentation", used); + require(used < 12_000_000, "owner transaction lacks gas headroom"); + _postCheck(accesses, payload); + require(vm.revertToState(snapshot), "simulation restore failed"); + _measureOwnerTransaction(_buildCallsChain(safes)[0], accesses); + } + + function _measureOwnerTransaction(Call memory call, Vm.AccountAccess[] memory accesses) internal { + address base = vm.envAddress("CB_MULTISIG"); + address council = vm.envAddress("BASE_SECURITY_COUNCIL"); + bytes32 hash = _getTransactionHash(ownerSafe, call); + vm.store(ownerSafe, Simulation.computeApprovedHashSlot(base, hash), bytes32(uint256(1))); + vm.store(ownerSafe, Simulation.computeApprovedHashSlot(council, hash), bytes32(uint256(1))); + require(vm.load(ownerSafe, bytes32(uint256(4))) == bytes32(uint256(2)), "owner threshold changed"); + require(council < base, "signature order changed"); + bytes memory signatures = abi.encodePacked(bytes32(uint256(uint160(council))), bytes32(0), uint8(1), bytes32(uint256(uint160(base))), bytes32(0), uint8(1)); + Call memory execution = _buildExecTransactionCall(ownerSafe, call, signatures); + for (uint256 i; i < accesses.length; i++) { + vm.cool(accesses[i].account); + for (uint256 j; j < accesses[i].storageAccesses.length; j++) vm.coolSlot(accesses[i].account, accesses[i].storageAccesses[j].slot); + } + uint256 beforeExecution = gasleft(); + (bool ok, bytes memory result) = ownerSafe.call{gas: 12_000_000}(execution.data); + uint256 executionGas = beforeExecution - gasleft() + 21_000 + 16 * execution.data.length; + console.log("L1 two-owner transaction gas upper bound", executionGas); + require(ok && abi.decode(result, (bool)) && executionGas < 12_000_000, "owner transaction too expensive"); + } +} + +contract MainnetTest is Script { + address internal constant ADMIN = 0x4200000000000000000000000000000000000018; + address[13] internal proxies = [ + address(0x4200000000000000000000000000000000000016), + 0x4200000000000000000000000000000000000015, + 0x4200000000000000000000000000000000000011, + 0x4200000000000000000000000000000000000019, + 0x420000000000000000000000000000000000001A, + 0x4200000000000000000000000000000000000017, + 0x420000000000000000000000000000000000001b, + 0x4200000000000000000000000000000000000020, + 0x4200000000000000000000000000000000000021, + 0x4200000000000000000000000000000000000007, + 0x4200000000000000000000000000000000000010, + 0x4200000000000000000000000000000000000012, + 0x4200000000000000000000000000000000000014 + ]; + address[13] internal implementations; + uint256 internal l2; + + function _deploy(string memory artifact, bytes memory args) internal returns (address deployed) { + bytes memory code = abi.encodePacked(vm.getCode(artifact), args); + assembly { deployed := create(0, add(code, 32), mload(code)) } + require(deployed != address(0), "fixture deployment failed"); + vm.makePersistent(deployed); + } + + function setUp() public { + l2 = vm.createSelectFork(vm.envString("L2_RPC_URL"), 52953400); + string[13] memory artifacts = [ + string("L2ToL1MessagePasser"), + "L1Block", + "SequencerFeeVault", + "BaseFeeVault", + "L1FeeVault", + "OptimismMintableERC721Factory", + "OperatorFeeVault", + "SchemaRegistry", + "EAS", + "L2CrossDomainMessenger", + "L2StandardBridge", + "OptimismMintableERC20Factory", + "L2ERC721Bridge" + ]; + string[13] memory keys = [ + string("L2_TO_L1_MESSAGE_PASSER_IMPL"), + "L1_BLOCK_IMPL", + "SEQUENCER_FEE_VAULT_IMPL", + "BASE_FEE_VAULT_IMPL", + "L1_FEE_VAULT_IMPL", + "ERC721_FACTORY_IMPL", + "OPERATOR_FEE_VAULT_IMPL", + "SCHEMA_REGISTRY_IMPL", + "EAS_IMPL", + "MESSENGER_IMPL", + "BRIDGE_IMPL", + "ERC20_FACTORY_IMPL", + "ERC721_BRIDGE_IMPL" + ]; + for (uint256 i; i < 13; i++) { + implementations[i] = _deploy( + string.concat(artifacts[i], ".sol:", artifacts[i]), + i == 5 ? abi.encode(proxies[12], uint256(1)) : bytes("") + ); + vm.setEnv(keys[i], vm.toString(implementations[i])); + } + address migrator = _deploy("LegacyMigrator.sol:LegacyMigrator", ""); + vm.setEnv("LEGACY_MIGRATOR", vm.toString(migrator)); + vm.setEnv("AGGREGATE_VERIFIER_TEE_IMAGE_HASH", vm.toString(bytes32(uint256(1)))); + vm.setEnv("AGGREGATE_VERIFIER_ZK_RANGE_HASH", vm.toString(bytes32(uint256(2)))); + vm.setEnv("AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH", vm.toString(bytes32(uint256(3)))); + vm.createSelectFork(vm.envString("L1_RPC_URL"), 26250153); + VerifierFixture fixture = new VerifierFixture(); + fixture.setUp(); + address verifier = fixture.deploy(); + vm.makePersistent(verifier); + vm.setEnv("NEW_AGGREGATE_VERIFIER", vm.toString(verifier)); + } + + function _upgradeL2() internal returns (MainnetHarness upgrade) { + upgrade = new MainnetHarness(); + vm.makePersistent(address(upgrade)); + vm.selectFork(upgrade.l2ForkId()); + } + + function _read(address target, bytes memory data) internal view returns (bytes memory result) { + bool ok; + (ok, result) = target.staticcall(data); + require(ok, "record read failed"); + } + + function testLiveRecordsSurviveUpgrade() public { + MainnetHarness upgrade = _upgradeL2(); + // RelayedMessage at Base block 52953341. + bytes32 message = 0xad180bec559e0c1f2bad3a30a85216dff3d2753ec11f0bc44613805f5a8a511d; + // Attested at Base block 52953222. + bytes32 uid = 0x3ce6ded82196362b8f066060a366c7b058d9b0ad2891cc6f1154fa67e5ef672a; + bytes32 schema = 0xbde38ceef862b0ec323601a60bda75ffad3b71a8273c9f70f1074cf8c9da15f0; + // OptimismMintableERC721Created at Base block 40918414. + address token = 0x2648349b67C3ffDed6410Bd68CeB9Afbe05Dce24; + // MessagePassed at Base block 52952800. + bytes32 withdrawal = 0x2e9ae2f6d4e928a6d4e7a282e028fe34b6f14ecfc3cc8509460f30676dea447f; + address[6] memory targets = [proxies[9], proxies[8], proxies[7], proxies[5], proxies[0], proxies[0]]; + bytes[6] memory reads = [ + abi.encodeWithSignature("successfulMessages(bytes32)", message), + abi.encodeWithSignature("getAttestation(bytes32)", uid), + abi.encodeWithSignature("getSchema(bytes32)", schema), + abi.encodeWithSignature("isOptimismMintableERC721(address)", token), + abi.encodeWithSignature("sentMessages(bytes32)", withdrawal), + abi.encodeWithSignature("messageNonce()") + ]; + bytes32 domainBefore = keccak256(_read(proxies[8], abi.encodeWithSignature("getDomainSeparator()"))); + bytes[6] memory beforeReads; + for (uint256 i; i < 6; i++) { + beforeReads[i] = _read(targets[i], reads[i]); + require(keccak256(beforeReads[i]) != keccak256(abi.encode(uint256(0))), "live record missing"); + } + uint256[4] memory balances; + bytes32[4] memory totals; + for (uint256 i; i < 4; i++) { + address vault = i == 3 ? proxies[6] : proxies[i + 2]; + balances[i] = vault.balance; + totals[i] = vm.load(vault, bytes32(0)); + } + // No nonzero L2 deposits entry was identified in the sampled withdrawal events. + // A synthetic native-token escrow entry pins this mapping's slot without inventing a live pair. + bytes32 depositSlot = keccak256(abi.encode(address(0x5678), keccak256(abi.encode(address(0x1234), uint256(2))))); + vm.store(proxies[10], depositSlot, bytes32(uint256(123))); + upgrade.replay(); + for (uint256 i; i < 6; i++) { + require(keccak256(_read(targets[i], reads[i])) == keccak256(beforeReads[i]), "live record changed"); + } + for (uint256 i; i < 4; i++) { + address vault = i == 3 ? proxies[6] : proxies[i + 2]; + require(vault.balance == balances[i] && vm.load(vault, bytes32(0)) == totals[i], "vault accounting changed"); + } + require(vm.load(proxies[10], depositSlot) == bytes32(uint256(123)), "native escrow changed"); + require( + keccak256(_read(proxies[8], abi.encodeWithSignature("getDomainSeparator()"))) != domainBefore, + "EAS delegated signature domain not upgraded" + ); + } + + function testRevertingInitializersRollBack() public { + vm.selectFork(l2); + address bad = address(new RevertingInitializer()); + address aliasOwner = 0x8cC51c3008b3f03Fe483B28B8Db90e19cF076a6d; + bytes32 implSlot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; + for (uint256 i; i < 13; i++) { + if (i < 2 || i == 5 || i == 7 || i == 8) continue; + bytes32 oldImpl = vm.load(proxies[i], implSlot); + bytes32 initializerSlot = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00; + bytes32 oldFlags = vm.load(proxies[i], initializerSlot); + bytes32[5] memory slots; + for (uint256 j; j < 5; j++) { + slots[j] = vm.load(proxies[i], bytes32(j)); + } + bytes memory init = i >= 9 + ? abi.encodeWithSignature("initialize(address)", address(1)) + : abi.encodeWithSignature("initialize(address,uint256,uint8)", address(1), uint256(1), uint8(1)); + address target = i >= 9 ? vm.envAddress("LEGACY_MIGRATOR") : bad; + bytes memory data = i >= 9 ? abi.encodeWithSignature("migrate(address,bytes)", bad, init) : init; + vm.prank(aliasOwner); + (bool ok,) = + ADMIN.call(abi.encodeWithSignature("upgradeAndCall(address,address,bytes)", proxies[i], target, data)); + require(!ok, "failed initializer accepted"); + require(vm.load(proxies[i], implSlot) == oldImpl, "failed init changed implementation"); + require(vm.load(proxies[i], initializerSlot) == oldFlags, "failed init changed initializer flags"); + for (uint256 j; j < 5; j++) { + require(vm.load(proxies[i], bytes32(j)) == slots[j], "failed init changed storage"); + } + } + } + + function testDirectMigratorCallReverts() public { + (bool ok, bytes memory reason) = vm.envAddress("LEGACY_MIGRATOR") + .call(abi.encodeWithSignature("migrate(address,bytes)", implementations[9], bytes(""))); + require( + !ok && keccak256(reason) == keccak256(abi.encodeWithSignature("Error(string)", "delegatecall only")), + "direct migrator call accepted" + ); + } + + function testBridgeMintBurnAndETHWithdrawal() public { + MainnetHarness upgrade = _upgradeL2(); + upgrade.replay(); + (bool created, bytes memory result) = proxies[11].call( + abi.encodeWithSignature( + "createOptimismMintableERC20(address,string,string)", address(0x1234), "Migration token", "MIG" + ) + ); + require(created, "token creation failed"); + address token = abi.decode(result, (address)); + require( + abi.decode(_read(proxies[11], abi.encodeWithSignature("deployments(address)", token)), (address)) + == address(0x1234), + "new token deployment not tracked" + ); + bytes memory mint = abi.encodeWithSignature( + "finalizeBridgeERC20(address,address,address,address,uint256,bytes)", + token, + address(0x1234), + address(0x5678), + address(this), + uint256(100), + bytes("") + ); + vm.prank( + address( + uint160(vm.envAddress("L1_CROSS_DOMAIN_MESSENGER")) + + uint160(0x1111000000000000000000000000000000001111) + ) + ); + (bool relayed,) = proxies[9].call( + abi.encodeWithSignature( + "relayMessage(uint256,address,address,uint256,uint256,bytes)", + (uint256(1) << 240) | uint256(987654321), + vm.envAddress("L1_STANDARD_BRIDGE"), + proxies[10], + uint256(0), + uint256(200000), + mint + ) + ); + require(relayed, "deposit relay reverted"); + require( + abi.decode(_read(token, abi.encodeWithSignature("balanceOf(address)", address(this))), (uint256)) == 100, + "relay did not mint" + ); + (bool burned,) = proxies[10].call( + abi.encodeWithSignature( + "bridgeERC20To(address,address,address,uint256,uint32,bytes)", + token, + address(0x1234), + address(0x5678), + uint256(40), + uint32(100000), + bytes("") + ) + ); + require(burned, "bridge burn reverted"); + require( + abi.decode(_read(token, abi.encodeWithSignature("balanceOf(address)", address(this))), (uint256)) == 60, + "burn amount wrong" + ); + uint256 nonce = abi.decode(_read(proxies[0], abi.encodeWithSignature("messageNonce()")), (uint256)); + uint256 balance = proxies[0].balance; + vm.deal(address(this), 1 ether); + (bool withdrawn,) = proxies[10].call{value: 1 ether}( + abi.encodeWithSignature("bridgeETHTo(address,uint32,bytes)", address(0x5678), uint32(100000), bytes("")) + ); + require(withdrawn, "ETH bridge reverted"); + require(proxies[0].balance == balance + 1 ether, "withdrawal value not in message passer"); + require( + abi.decode(_read(proxies[0], abi.encodeWithSignature("messageNonce()")), (uint256)) == nonce + 1, + "withdrawal not enqueued" + ); + } + + function testPortalFeeSensitivity() public { + address portal = vm.envAddress("OPTIMISM_PORTAL"); + vm.store(portal, bytes32(uint256(1)), bytes32(uint256(2 gwei) | (uint256(block.number) << 192))); + MainnetHarness upgrade = new MainnetHarness(); + upgrade.setUp(); + vm.prank(vm.envAddress("CB_MULTISIG")); + upgrade.simulateForTest(); + } + + function testMainnetSignerSimulation() public { + MainnetHarness upgrade = new MainnetHarness(); + upgrade.setUp(); + vm.prank(vm.envAddress("CB_MULTISIG")); + upgrade.simulateForTest(); + } +} From 5c5734874e81fc7168f6153155e002ebda4cde99 Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Thu, 22 Oct 2026 16:26:33 -0400 Subject: [PATCH 02/16] fix(mainnet): guard Denim prerequisites and preserve legacy state Co-authored-by: Toshi --- .../2026-10-07-denim-upgrade/FACILITATOR.md | 19 ++++-- .../config/mainnet/.env | 4 ++ ...ecuteDenimUpgradeWithAllL2Predeploys.s.sol | 34 ++++++++++ .../2026-10-07-denim-upgrade/status.json | 2 +- .../test/Mainnet.t.sol | 65 ++++++++++++++++++- 5 files changed, 116 insertions(+), 8 deletions(-) diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md b/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md index 948a32bc..6ee7ff41 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md +++ b/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md @@ -50,10 +50,21 @@ Open `config//.env` and confirm: Every other `AggregateVerifier` constructor argument is copied from the live verifier at deploy time. -For mainnet, obtain PCR0 and both SP1 verification keys from the reproducible v1.5.1-based prover -build before deploying or generating validations. The three hash fields intentionally start blank. -The Sepolia f3a459f build cannot derive post-Denim mainnet blocks because it disables mainnet Denim. -Do not reuse its hashes. Mainnet validation, approval and execution also refuse missing hashes. +For mainnet, verify the PCR0 and both SP1 verification keys against the v1.5.1 build provenance +in the network config before deploying or generating validations. The Sepolia f3a459f build cannot +derive post-Denim mainnet blocks because it disables mainnet Denim. Do not reuse its hashes. +Mainnet validation, approval and execution refuse missing hashes. + +Build enclave and zk images from exactly base/base v1.5.1 at 5476069f1eb74a56bccb56fdefd4b4bb0e3cda42. +Use the proof-build recipes at 228352e514233177a65cc2d9873f6bf4b08e67cd, Rust 1.94.0 alpine, +linuxkit v1.8.2 and aws-nitro-enclaves-image-format 483114f. A different source revision, recipe or +toolchain can change the accepted hashes. + +The mainnet script checks L1 chain id 1, L2 chain id 8453, the owner Safe's 2-of-2 membership, +Base 3-of-6 and Security Council 8-of-11, the current verifier's 600/30 intervals, portal version +6.0.1, the portal resource budget, schedule length 13, canceled entry 7, last entry 1790791200, +and MIN_NOTICE 3600. It also checks the live L2 versions, proxy admins, legacy storage guards +and counterpart/vault configuration. Re-run simulation if any precondition changes. Mainnet preserves the live vault recipients and L2 withdrawal networks. `BaseTime` is excluded: Denim installs it only while its implementation slot is empty. The mainnet script refuses an occupied diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/.env b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/.env index 8b1e2db4..408b403b 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/.env +++ b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/.env @@ -27,6 +27,10 @@ AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH= # Mainnet denim_timestamp = 1_793_901_600. # ProtocolVersions at Ethereum block 26250153 has 13 entries, last 1790791200, # with index 7 = 0. MIN_NOTICE = 3600. Recheck the notice window before execution. +# Same block: DGF owner and L1 ProxyAdmin owner are PROXY_ADMIN_OWNER; old verifier +# intervals are 600/30. Owner Safe is 2-of-2 (Base 3-of-6, Council 8-of-11). +# Portal version is 6.0.1, resourceConfig.maxResourceLimit is 20000000, +# params.prevBaseFee is 1000000000; L1 block gas limit is 60000000. PROTOCOL_VERSIONS_DENIM_ACTIVATION_TIMESTAMP=1793901600 # ProtocolVersions.minimumProtocolVersion() at Ethereum block 26250153. diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol b/active/evm/tasks/2026-10-07-denim-upgrade/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol index a626dbd8..3cccf95b 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol +++ b/active/evm/tasks/2026-10-07-denim-upgrade/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol @@ -19,6 +19,11 @@ import {GameType} from "@base-contracts/src/libraries/bridge/Types.sol"; import {IAggregateVerifierV020} from "./IAggregateVerifierV020.sol"; +interface IMainnetSafe { + function getThreshold() external view returns (uint256); + function getOwners() external view returns (address[] memory); +} + interface IProxyAdmin { function owner() external view returns (address); } @@ -64,6 +69,8 @@ contract ExecuteDenimUpgradeWithAllL2Predeploys is MultisigScript { string internal constant NEW_VERSION = "0.3.0"; address internal immutable ownerSafe; + address internal immutable baseSafe = vm.envAddress("CB_MULTISIG"); + address internal immutable councilSafe = vm.envAddress("BASE_SECURITY_COUNCIL"); address internal immutable proxyAdmin; address internal immutable disputeGameFactory; GameType internal immutable gameType; @@ -132,6 +139,12 @@ contract ExecuteDenimUpgradeWithAllL2Predeploys is MultisigScript { "prover hashes missing" ); require(!IOptimismPortal2(payable(optimismPortal)).paused(), "optimism portal paused"); + require(_eq(ISemver(optimismPortal).version(), "6.0.1"), "portal version changed"); + require( + uint256(L2_GAS_LIMIT) * 13 + < IOptimismPortal2(payable(optimismPortal)).systemConfig().resourceConfig().maxResourceLimit, + "deposits exhaust portal resource limit" + ); require(feeVaultRecipient != address(0), "fee vault recipient not set"); IDisputeGameFactoryAdmin dgf = IDisputeGameFactoryAdmin(disputeGameFactory); IProtocolVersions registry = IProtocolVersions(protocolVersions); @@ -139,6 +152,19 @@ contract ExecuteDenimUpgradeWithAllL2Predeploys is MultisigScript { // Both calls are authorized against the same Safe: the factory owner and the ProxyAdmin owner. require(dgf.owner() == ownerSafe, "dgf owner mismatch"); require(IProxyAdmin(proxyAdmin).owner() == ownerSafe, "proxy admin owner mismatch"); + _assertSafe(ownerSafe, 2, 2); + _assertSafe(baseSafe, 3, 6); + _assertSafe(councilSafe, 8, 11); + address[] memory owners = IMainnetSafe(ownerSafe).getOwners(); + require( + (owners[0] == baseSafe && owners[1] == councilSafe) || (owners[1] == baseSafe && owners[0] == councilSafe), + "owner Safe members changed" + ); + require(IAggregateVerifierV020(oldAggregateVerifier).BLOCK_INTERVAL() == 600, "slow interval changed"); + require( + IAggregateVerifierV020(oldAggregateVerifier).INTERMEDIATE_BLOCK_INTERVAL() == 30, + "slow intermediate interval changed" + ); require(dgf.gameImpls(gameType) == oldAggregateVerifier, "unexpected current aggregate verifier"); require(dgf.gameArgs(gameType).length == 0, "aggregate game args not empty"); @@ -150,6 +176,8 @@ contract ExecuteDenimUpgradeWithAllL2Predeploys is MultisigScript { uint64[] memory schedule = registry.getSchedule(); require(schedule.length == DENIM_UPGRADE_ID, "unexpected upgrade count"); + require(schedule[7] == 0 && schedule[12] == 1790791200, "legacy schedule changed"); + require(registry.MIN_NOTICE() == 3600, "minimum notice changed"); require(denimActivationTimestamp > schedule[schedule.length - 1], "denim must activate after cobalt"); require( denimActivationTimestamp >= uint64(block.timestamp) + registry.MIN_NOTICE(), @@ -163,6 +191,11 @@ contract ExecuteDenimUpgradeWithAllL2Predeploys is MultisigScript { require(newMinimumProtocolVersion <= type(uint128).max, "minimum protocol version too large"); } + function _assertSafe(address safe, uint256 threshold, uint256 owners) internal view { + require(IMainnetSafe(safe).getThreshold() == threshold, "Safe threshold changed"); + require(IMainnetSafe(safe).getOwners().length == owners, "Safe owner count changed"); + } + function _buildCalls() internal view override returns (Call[] memory) { bytes[] memory l2Calls = _l2Calls(); Call[] memory calls = new Call[](2 + l2Calls.length); @@ -540,6 +573,7 @@ contract ExecuteDenimUpgradeWithAllL2Predeploys is MultisigScript { } require(_uint(FACTORY, "BRIDGE()") == uint160(factoryBridge), "live factory bridge changed"); require(_uint(FACTORY, "REMOTE_CHAIN_ID()") == remoteChainId, "live remote chain changed"); + require(vm.load(FACTORY, bytes32(0)) == bytes32(0), "ERC721 factory root slot changed"); require(_uint(VAULT, "RECIPIENT()") == uint160(vaultRecipient), "live operator recipient changed"); require(_uint(VAULT, "MIN_WITHDRAWAL_AMOUNT()") == vaultMinimum, "live operator minimum changed"); require(_uint(VAULT, "WITHDRAWAL_NETWORK()") == vaultNetwork, "live operator network changed"); diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/status.json b/active/evm/tasks/2026-10-07-denim-upgrade/status.json index 854e9fbf..e3cf232d 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/status.json +++ b/active/evm/tasks/2026-10-07-denim-upgrade/status.json @@ -2,7 +2,7 @@ "schema_version": 1, "task": "2026-10-07-denim-upgrade", "kind": "active", - "last_updated": "2026-10-22T19:19:26Z", + "last_updated": "2026-10-22T20:22:28Z", "networks": { "sepolia": { "step": "executed", diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/test/Mainnet.t.sol b/active/evm/tasks/2026-10-07-denim-upgrade/test/Mainnet.t.sol index 8d78e3c4..1a2974e8 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/test/Mainnet.t.sol +++ b/active/evm/tasks/2026-10-07-denim-upgrade/test/Mainnet.t.sol @@ -41,6 +41,10 @@ contract RevertingInitializer { } contract MainnetHarness is ExecuteDenimUpgradeWithAllL2Predeploys { + constructor() { + vm.rollFork(l2Fork, 52953400); + } + function l2ForkId() external view returns (uint256) { return l2Fork; } @@ -73,11 +77,20 @@ contract MainnetHarness is ExecuteDenimUpgradeWithAllL2Predeploys { vm.store(ownerSafe, Simulation.computeApprovedHashSlot(council, hash), bytes32(uint256(1))); require(vm.load(ownerSafe, bytes32(uint256(4))) == bytes32(uint256(2)), "owner threshold changed"); require(council < base, "signature order changed"); - bytes memory signatures = abi.encodePacked(bytes32(uint256(uint160(council))), bytes32(0), uint8(1), bytes32(uint256(uint160(base))), bytes32(0), uint8(1)); + bytes memory signatures = abi.encodePacked( + bytes32(uint256(uint160(council))), + bytes32(0), + uint8(1), + bytes32(uint256(uint160(base))), + bytes32(0), + uint8(1) + ); Call memory execution = _buildExecTransactionCall(ownerSafe, call, signatures); for (uint256 i; i < accesses.length; i++) { vm.cool(accesses[i].account); - for (uint256 j; j < accesses[i].storageAccesses.length; j++) vm.coolSlot(accesses[i].account, accesses[i].storageAccesses[j].slot); + for (uint256 j; j < accesses[i].storageAccesses.length; j++) { + vm.coolSlot(accesses[i].account, accesses[i].storageAccesses[j].slot); + } } uint256 beforeExecution = gasleft(); (bool ok, bytes memory result) = ownerSafe.call{gas: 12_000_000}(execution.data); @@ -107,6 +120,12 @@ contract MainnetTest is Script { address[13] internal implementations; uint256 internal l2; + struct PreservedState { + bytes32[9] blockAttributes; + bytes32[206] messengerState; + bytes easNonce; + } + function _deploy(string memory artifact, bytes memory args) internal returns (address deployed) { bytes memory code = abi.encodePacked(vm.getCode(artifact), args); assembly { deployed := create(0, add(code, 32), mload(code)) } @@ -199,6 +218,16 @@ contract MainnetTest is Script { abi.encodeWithSignature("messageNonce()") ]; bytes32 domainBefore = keccak256(_read(proxies[8], abi.encodeWithSignature("getDomainSeparator()"))); + PreservedState memory state; + for (uint256 i; i < 9; i++) { + state.blockAttributes[i] = vm.load(proxies[1], bytes32(i)); + } + for (uint256 i = 1; i <= 206; i++) { + state.messengerState[i - 1] = vm.load(proxies[9], bytes32(i)); + } + // A synthetic delegated nonce also pins the inherited EIP-712 mapping's storage location. + vm.store(proxies[8], keccak256(abi.encode(address(0xabcd), uint256(0))), bytes32(uint256(17))); + state.easNonce = _read(proxies[8], abi.encodeWithSignature("getNonce(address)", address(0xabcd))); bytes[6] memory beforeReads; for (uint256 i; i < 6; i++) { beforeReads[i] = _read(targets[i], reads[i]); @@ -224,6 +253,17 @@ contract MainnetTest is Script { require(vault.balance == balances[i] && vm.load(vault, bytes32(0)) == totals[i], "vault accounting changed"); } require(vm.load(proxies[10], depositSlot) == bytes32(uint256(123)), "native escrow changed"); + for (uint256 i; i < 9; i++) { + require(vm.load(proxies[1], bytes32(i)) == state.blockAttributes[i], "L1Block attributes changed"); + } + for (uint256 i = 1; i <= 206; i++) { + require(vm.load(proxies[9], bytes32(i)) == state.messengerState[i - 1], "messenger legacy state changed"); + } + require( + keccak256(_read(proxies[8], abi.encodeWithSignature("getNonce(address)", address(0xabcd)))) + == keccak256(state.easNonce), + "delegated nonce changed" + ); require( keccak256(_read(proxies[8], abi.encodeWithSignature("getDomainSeparator()"))) != domainBefore, "EAS delegated signature domain not upgraded" @@ -249,10 +289,20 @@ contract MainnetTest is Script { : abi.encodeWithSignature("initialize(address,uint256,uint8)", address(1), uint256(1), uint8(1)); address target = i >= 9 ? vm.envAddress("LEGACY_MIGRATOR") : bad; bytes memory data = i >= 9 ? abi.encodeWithSignature("migrate(address,bytes)", bad, init) : init; + vm.expectCall(bad, init); vm.prank(aliasOwner); - (bool ok,) = + (bool ok, bytes memory reason) = ADMIN.call(abi.encodeWithSignature("upgradeAndCall(address,address,bytes)", proxies[i], target, data)); require(!ok, "failed initializer accepted"); + require( + keccak256(reason) + == keccak256( + abi.encodeWithSignature( + "Error(string)", "Proxy: delegatecall to new implementation contract failed" + ) + ), + "upgrade failed before reaching initializer" + ); require(vm.load(proxies[i], implSlot) == oldImpl, "failed init changed implementation"); require(vm.load(proxies[i], initializerSlot) == oldFlags, "failed init changed initializer flags"); for (uint256 j; j < 5; j++) { @@ -355,6 +405,15 @@ contract MainnetTest is Script { upgrade.simulateForTest(); } + function testRejectsChangedSafeThreshold() public { + MainnetHarness upgrade = new MainnetHarness(); + vm.mockCall( + vm.envAddress("BASE_SECURITY_COUNCIL"), abi.encodeWithSignature("getThreshold()"), abi.encode(uint256(1)) + ); + vm.expectRevert(bytes("Safe threshold changed")); + upgrade.setUp(); + } + function testMainnetSignerSimulation() public { MainnetHarness upgrade = new MainnetHarness(); upgrade.setUp(); From f9ce5f2969bb9cae1cc6ce737ea96e06cf0eabb6 Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Thu, 22 Oct 2026 16:28:56 -0400 Subject: [PATCH 03/16] feat(mainnet): set Denim proof program hashes Co-authored-by: Toshi --- .../config/mainnet/.env | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/.env b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/.env index 408b403b..5ccb3cd4 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/.env +++ b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/.env @@ -13,14 +13,25 @@ OLD_AGGREGATE_VERIFIER=0xeF9eCeA15265321753047EBF7D54C858D53cB94f FAST_BLOCK_INTERVAL=6000 FAST_INTERMEDIATE_BLOCK_INTERVAL=300 -# Pending reproducible v1.5.1-based prover build: PCR0 and SP1 range/aggregate vkeys -# have not been produced. Fill only from that build's verified outputs. -# base/base f3a459feaf4b071f311940510055b4b55b9374b8 cannot be used on mainnet: -# crates/common/chains/src/chain.rs sets mainnet Denim to ForkCondition::Never. -# Roll mainnet provers and proposer immediately AFTER execution, not before. -AGGREGATE_VERIFIER_TEE_IMAGE_HASH= -AGGREGATE_VERIFIER_ZK_RANGE_HASH= -AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH= +# All three proof hashes come from base/base v1.5.1: +# https://github.com/base/base/tree/5476069f1eb74a56bccb56fdefd4b4bb0e3cda42 +# f3a459feaf4b071f311940510055b4b55b9374b8 cannot be used for mainnet because +# crates/common/chains/src/chain.rs sets base_mainnet_forks[Denim] to ForkCondition::Never. +# ZK: SP1 range and aggregation vkeys from `just succinct vkeys --build` at 5476069f. +# This method reproduces Sepolia's live range/aggregate hashes from f3a459f exactly. +# The aggregate hash equals v1.5.1-rc.3 (aggregation program unchanged); range is new. +# TEE: keccak256 of PCR0, using `cast keccak 0x$PCR0`: +# 4a6d85332527bad59c7d57041a9f163b11eda818f1e8d8425867d03e1a0357dc64ce6f2eaf0208607ab61e7f4ac4406a +# PCR0 comes from `nitro-cli describe-eif` on the AWS Nitro enclave image built +# with BASE_COMMIT=5476069f and the Base proof-build recipes: +# https://github.com/base/base/tree/228352e514233177a65cc2d9873f6bf4b08e67cd/etc/docker/proof-builds +# Rust 1.94.0 alpine, linuxkit v1.8.2, aws-nitro-enclaves-image-format 483114f. +# The same build from f3a459f gives PCR0 2cbd0c62...5056, matching Sepolia's +# live TEE hash 0x44cc...9ef7. Changing the source, recipe or toolchain changes hashes. +# Execute first, then immediately roll mainnet provers and proposer to this build. +AGGREGATE_VERIFIER_TEE_IMAGE_HASH=0xbe3cceb1e0c7967a1d3211e42af7b3371d08a3311eb0ad844a67e4b37dac4170 +AGGREGATE_VERIFIER_ZK_RANGE_HASH=0x5dcca1064487db8e23b0b4c45b219e0858b7f60110629fe7217cb12c17602f6b +AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH=0x005d9dc3165b95bdc0d70e25c708abdeead994b8b8a06a6ac71d51cba7cf5943 # Mainnet Denim: 2026-11-05 18:00:00 UTC, upgrade id 13. # https://github.com/base/base/blob/5476069f1eb74a56bccb56fdefd4b4bb0e3cda42/crates/common/chains/src/config.rs From f71a4733e5e5194bdad6800929cb1fa1b2016198 Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Thu, 22 Oct 2026 16:49:10 -0400 Subject: [PATCH 04/16] fix: address review round 1 findings --- .../2026-10-07-denim-upgrade/FACILITATOR.md | 49 ++++++++++++++----- .../tasks/2026-10-07-denim-upgrade/Makefile | 7 ++- .../config/mainnet/README.md | 8 +-- ...ecuteDenimUpgradeWithAllL2Predeploys.s.sol | 22 +++++++++ .../test/Mainnet.t.sol | 37 +++++++++++++- 5 files changed, 106 insertions(+), 17 deletions(-) diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md b/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md index 6ee7ff41..cc835d0f 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md +++ b/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md @@ -62,9 +62,9 @@ toolchain can change the accepted hashes. The mainnet script checks L1 chain id 1, L2 chain id 8453, the owner Safe's 2-of-2 membership, Base 3-of-6 and Security Council 8-of-11, the current verifier's 600/30 intervals, portal version -6.0.1, the portal resource budget, schedule length 13, canceled entry 7, last entry 1790791200, +6.0.1, the portal resource and L1 gas budgets described below, schedule length 13, canceled entry 7, last entry 1790791200, and MIN_NOTICE 3600. It also checks the live L2 versions, proxy admins, legacy storage guards -and counterpart/vault configuration. Re-run simulation if any precondition changes. +and counterpart/vault configuration. Re-run `simulate-current` if any precondition changes. Mainnet preserves the live vault recipients and L2 withdrawal networks. `BaseTime` is excluded: Denim installs it only while its implementation slot is empty. The mainnet script refuses an occupied @@ -103,8 +103,9 @@ make TASK_NETWORK= simulate The extra deployments use 0.8.15 for factories and bridges, 0.8.19 for attestations, and 0.8.25 for OperatorFeeVault. Per-file factory optimizer profiles use 5000 runs; the other implementations use 999999 runs, no bytecode hash, and Cancun. The multisig script also builds from `active/evm` using -its default compiler settings. `simulate` uses test-only verifier hashes and local implementations; -it does not deploy, generate validations, sign or broadcast. +its default compiler settings. `simulate` (an alias for `test`) runs deterministic historical fork +tests with test-only verifier hashes and local implementations. It is not the current-state execution +prerequisite. Neither simulation command deploys, generates validations, signs or broadcasts. The facilitator runs all deployment steps with a Ledger. `deploy-l2` uses the L2 RPC, 999999 optimizer runs, no bytecode hash and Cancun, matching base/contracts. It appends `l2ToL1MessagePasser`, `l1Block`, @@ -178,6 +179,12 @@ own nested Safe before the outer transaction runs. ```bash SIGNATURES= make TASK_NETWORK= approve-cb SIGNATURES= make TASK_NETWORK= approve-sc +``` + +On mainnet, first run `make TASK_NETWORK=mainnet simulate-current` after both approvals are onchain. +The current-state simulation requirements and gas budget are below. + +```bash make TASK_NETWORK= execute ``` @@ -208,10 +215,30 @@ block. On the combined path it also checks the five Sepolia or thirteen mainnet on an L2 fork as the aliased owner, and checks implementations, versions, fee-vault config and the unchanged L2 ProxyAdmin owner. Set the README status to the execution transaction link. -Before execution, rerun mainnet simulation against current state and check portal metering. The -300000 uniform limit exceeds 1.5 times every cold L2 measurement. Portal burn for all deposits is -`3900000 * prevBaseFee / max(L1 basefee, 1 gwei)`, less the metered work already performed. At a -1 gwei portal fee and an L1 basefee below 1 gwei, the burn budget is 3900000 L1 gas. Each additional -1 gwei adds 3900000 gas. A rising fee can exhaust the 16777216 transaction cap even though the -60000000 L1 block limit and the portal resource limit are not exhausted. Do not execute if the -current simulation lacks headroom. Do not split this transaction. +Immediately before mainnet execution, after both Safe approvals are onchain, run from this directory: + +```bash +make TASK_NETWORK=mainnet simulate-current +``` + +This invokes `MultisigScript.simulate(bytes)` with `0x` signatures, the real implementations from +`config/mainnet/addresses.json`, and the current L1 and L2 RPC heads. It checks the prerequisites, +including the notice window, simulates the owner transaction using the actual approvals, and replays +all deposits on the current L2 fork. Missing deployment addresses or approvals stop the command. +Do not execute unless it succeeds; the historical `test` / `simulate` target is not a substitute. + +The 300000 uniform limit exceeds 1.5 times every cold L2 measurement. Portal burn for all deposits +is bounded by `3900000 * fee / max(L1 basefee, 1 gwei)` without credit for metered work. +In `setUp` (validation, approval and execution simulations), the script reads live portal `params()` +and resource configuration. It bounds `fee` by `prevBaseFee` plus any positive first-deposit fee +update from the previous block's bought gas, applies the configured minimum (and maximum on a block +update), and takes no +credit for empty-block decay. It requires this burn plus a 5000000 base-cost allowance to be at most +14000000 gas. The allowance rounds the measured ~4300000 baseline transaction cost up by ~16%, +then adds the full metering burn without subtracting the baseline's burn. The 14000000 ceiling +leaves 2777216 gas (~16.6%) below the EIP-7825 per-transaction cap of 16777216. At a 1 gwei portal +fee and L1 basefee below 1 gwei the burn bound is 3900000; each additional 1 gwei adds 3900000. + +Fees and resource use can change after simulation. Recheck immediately before submission and do +not override a failed guard or split this transaction. The L1 block limit and portal resource limit +do not protect against the per-transaction cap. diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/Makefile b/active/evm/tasks/2026-10-07-denim-upgrade/Makefile index c8fb2af8..8fcf5176 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/Makefile +++ b/active/evm/tasks/2026-10-07-denim-upgrade/Makefile @@ -64,7 +64,7 @@ UPGRADE_ENV += OPTIMISM_PORTAL=$(OPTIMISM_PORTAL) \ .PHONY: check-implementations check-implementations: @jq -e '[.aggregateVerifier, .l2ToL1MessagePasser, .l1Block, .sequencerFeeVault, .baseFeeVault, .l1FeeVault $(MAINNET_IMPLEMENTATIONS)] | all(.[]; type == "string" and test("^0x[0-9a-fA-F]{40}$$") and ascii_downcase != "0x0000000000000000000000000000000000000000")' "$(ADDRESSES_JSON)" >/dev/null 2>&1 || \ - { echo 'Deploy AggregateVerifier and all five L2 implementations into $(ADDRESSES_JSON) before validation, approval or execution'; exit 1; } + { echo 'Deploy AggregateVerifier and $(if $(filter ExecuteDenimUpgradeWithAllL2Predeploys,$(UPGRADE_SCRIPT_NAME)),all thirteen L2 implementations and LegacyMigrator,all five L2 implementations) into $(ADDRESSES_JSON) before validation, approval or execution'; exit 1; } approve-cb approve-sc execute: check-implementations endif @@ -204,6 +204,11 @@ deploy-remaining-l2: build-multisig: cd $(PROJECT_DIR) && $(MISE_EXEC) forge build $(TASK_DIR)/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol +.PHONY: simulate-current +simulate-current: check-implementations check-prover-hashes + cd $(PROJECT_DIR) && $(UPGRADE_ENV) $(MISE_EXEC) forge script --rpc-url $(L1_RPC_URL) $(UPGRADE_SCRIPT) \ + --sig "simulate(bytes)" 0x -vvvv + simulate test: build-multisig cd $(TASK_PROJECT_DIR) && $(UPGRADE_ENV) L1_RPC_URL=$(L1_RPC_URL) CB_MULTISIG=$(CB_MULTISIG) \ $(MISE_EXEC) forge test -vv diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/README.md b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/README.md index c9810e73..143cee4a 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/README.md +++ b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/README.md @@ -28,11 +28,13 @@ LegacyMigrator: Pending deployment. ProtocolVersions adds upgrade id 13. BaseTime is excluded. Existing vault recipients and withdrawal networks are preserved. EAS delegated signatures must be signed again for domain version 1.3.0. -The facilitator must confirm the reproducible v1.5.1-based prover hashes and fill the -implementation addresses before generating validations. Mainnet task-origin validation is required. +The reproducible v1.5.1-based prover hashes and their provenance are set in `.env`. +The facilitator must deploy the implementations and generate mainnet task-origin validations before signing. -From `active/evm/tasks/2026-10-07-denim-upgrade/`: +From the repository root: ```bash make TASK_NETWORK=mainnet sign-task ``` + +Select `2026-10-07-denim-upgrade` for mainnet, sign, and send the signature to the facilitator. diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol b/active/evm/tasks/2026-10-07-denim-upgrade/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol index 3cccf95b..a01ddccd 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol +++ b/active/evm/tasks/2026-10-07-denim-upgrade/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol @@ -6,6 +6,7 @@ import {LegacyMigrator} from "./LegacyMigrator.sol"; import {Vm, VmSafe} from "forge-std/Vm.sol"; import {IOptimismPortal2} from "interfaces/L1/IOptimismPortal2.sol"; +import {IResourceMetering} from "interfaces/L1/IResourceMetering.sol"; import {IFeeVault, Types} from "interfaces/L2/IFeeVault.sol"; import {IProxyAdmin as IL2ProxyAdmin} from "interfaces/universal/IProxyAdmin.sol"; import {ISemver} from "interfaces/universal/ISemver.sol"; @@ -49,6 +50,9 @@ contract ExecuteDenimUpgradeWithAllL2Predeploys is MultisigScript { // Each deposit must call the L2 ProxyAdmin directly so it sees the aliased owner, not an L2 multicall. // The L1 simulation cannot execute deposits, so the post-check replays them on an L2 fork. uint64 internal constant L2_GAS_LIMIT = 300_000; + // Round the measured ~4.3M baseline up to 5M, add the full burn, and leave 2,777,216 below EIP-7825. + uint256 internal constant MAX_PROJECTED_L1_GAS = 14_000_000; + uint256 internal constant L1_BASE_GAS_BUDGET = 5_000_000; string internal constant L2_TO_L1_MESSAGE_PASSER_VERSION = "1.2.0"; string internal constant L1_BLOCK_VERSION = "1.8.0"; string internal constant FEE_VAULT_VERSION = "1.6.0"; @@ -129,6 +133,7 @@ contract ExecuteDenimUpgradeWithAllL2Predeploys is MultisigScript { function setUp() public { require(block.chainid == 1, "wrong L1 chain"); + _assertPortalGasHeadroom(); uint256 l1Fork = vm.activeFork(); vm.selectFork(l2Fork); require(block.chainid == 8453, "wrong L2 chain"); @@ -191,6 +196,23 @@ contract ExecuteDenimUpgradeWithAllL2Predeploys is MultisigScript { require(newMinimumProtocolVersion <= type(uint128).max, "minimum protocol version too large"); } + function _assertPortalGasHeadroom() internal view { + IOptimismPortal2 portal = IOptimismPortal2(payable(optimismPortal)); + (uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) = portal.params(); + IResourceMetering.ResourceConfig memory config = portal.systemConfig().resourceConfig(); + uint256 fee = uint256(prevBaseFee); + uint256 target = uint256(config.maxResourceLimit) / config.elasticityMultiplier; + // Bound the first deposit's fee update without taking credit for empty-block decay. + if (block.number > prevBlockNum && prevBoughtGas > target) { + fee += fee * (prevBoughtGas - target) / (target * config.baseFeeMaxChangeDenominator); + } + if (fee < config.minimumBaseFee) fee = config.minimumBaseFee; + if (block.number > prevBlockNum && fee > config.maximumBaseFee) fee = config.maximumBaseFee; + uint256 basefee = block.basefee > 1 gwei ? block.basefee : 1 gwei; + uint256 burn = uint256(L2_GAS_LIMIT) * 13 * fee / basefee; + require(L1_BASE_GAS_BUDGET + burn <= MAX_PROJECTED_L1_GAS, "portal fees exceed L1 gas budget"); + } + function _assertSafe(address safe, uint256 threshold, uint256 owners) internal view { require(IMainnetSafe(safe).getThreshold() == threshold, "Safe threshold changed"); require(IMainnetSafe(safe).getOwners().length == owners, "Safe owner count changed"); diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/test/Mainnet.t.sol b/active/evm/tasks/2026-10-07-denim-upgrade/test/Mainnet.t.sol index 1a2974e8..9bb2f5d4 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/test/Mainnet.t.sol +++ b/active/evm/tasks/2026-10-07-denim-upgrade/test/Mainnet.t.sol @@ -241,9 +241,10 @@ contract MainnetTest is Script { totals[i] = vm.load(vault, bytes32(0)); } // No nonzero L2 deposits entry was identified in the sampled withdrawal events. - // A synthetic native-token escrow entry pins this mapping's slot without inventing a live pair. bytes32 depositSlot = keccak256(abi.encode(address(0x5678), keccak256(abi.encode(address(0x1234), uint256(2))))); vm.store(proxies[10], depositSlot, bytes32(uint256(123))); + bytes memory escrowRead = abi.encodeWithSignature("deposits(address,address)", address(0x1234), address(0x5678)); + require(abi.decode(_read(proxies[10], escrowRead), (uint256)) == 123, "legacy escrow fixture inaccessible"); upgrade.replay(); for (uint256 i; i < 6; i++) { require(keccak256(_read(targets[i], reads[i])) == keccak256(beforeReads[i]), "live record changed"); @@ -252,7 +253,9 @@ contract MainnetTest is Script { address vault = i == 3 ? proxies[6] : proxies[i + 2]; require(vault.balance == balances[i] && vm.load(vault, bytes32(0)) == totals[i], "vault accounting changed"); } - require(vm.load(proxies[10], depositSlot) == bytes32(uint256(123)), "native escrow changed"); + require( + abi.decode(_read(proxies[10], escrowRead), (uint256)) == 123, "bridge escrow inaccessible after upgrade" + ); for (uint256 i; i < 9; i++) { require(vm.load(proxies[1], bytes32(i)) == state.blockAttributes[i], "L1Block attributes changed"); } @@ -405,6 +408,36 @@ contract MainnetTest is Script { upgrade.simulateForTest(); } + function testRejectsPortalFeesWithoutGasHeadroom() public { + vm.fee(0); + address portal = vm.envAddress("OPTIMISM_PORTAL"); + vm.store(portal, bytes32(uint256(1)), bytes32(uint256(3 gwei) | (uint256(block.number) << 192))); + MainnetHarness upgrade = new MainnetHarness(); + vm.expectRevert(bytes("portal fees exceed L1 gas budget")); + upgrade.setUp(); + } + + function testPortalGasBudgetUsesL1Basefee() public { + vm.fee(3 gwei); + address portal = vm.envAddress("OPTIMISM_PORTAL"); + vm.store(portal, bytes32(uint256(1)), bytes32(uint256(6 gwei) | (uint256(block.number) << 192))); + MainnetHarness upgrade = new MainnetHarness(); + upgrade.setUp(); + } + + function testRejectsPortalFeeIncreaseAfterFullBlock() public { + vm.fee(1 gwei); + address portal = vm.envAddress("OPTIMISM_PORTAL"); + vm.store( + portal, + bytes32(uint256(1)), + bytes32(uint256(2 gwei) | (uint256(20_000_000) << 128) | (uint256(block.number - 1) << 192)) + ); + MainnetHarness upgrade = new MainnetHarness(); + vm.expectRevert(bytes("portal fees exceed L1 gas budget")); + upgrade.setUp(); + } + function testRejectsChangedSafeThreshold() public { MainnetHarness upgrade = new MainnetHarness(); vm.mockCall( From 9e565c253d3210a28ec4ef0a45c218dfd1c3d5d9 Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Thu, 22 Oct 2026 17:14:23 -0400 Subject: [PATCH 05/16] fix: address review round 2 findings --- .../2026-10-07-denim-upgrade/FACILITATOR.md | 27 +++- .../tasks/2026-10-07-denim-upgrade/Makefile | 17 +- ...ecuteDenimUpgradeWithAllL2Predeploys.s.sol | 54 +++---- .../test/Mainnet.t.sol | 147 ++++++++++++++++-- 4 files changed, 195 insertions(+), 50 deletions(-) diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md b/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md index cc835d0f..799c6ba2 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md +++ b/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md @@ -105,7 +105,10 @@ OperatorFeeVault. Per-file factory optimizer profiles use 5000 runs; the other i 999999 runs, no bytecode hash, and Cancun. The multisig script also builds from `active/evm` using its default compiler settings. `simulate` (an alias for `test`) runs deterministic historical fork tests with test-only verifier hashes and local implementations. It is not the current-state execution -prerequisite. Neither simulation command deploys, generates validations, signs or broadcasts. +prerequisite. The gas tests use `forge test --isolate`, so each measured ProxyAdmin call and +the owner-Safe execution starts a separate transaction with cold storage. Other tests run without +isolation so cheatcode basefee overrides remain effective. Neither simulation command deploys, +generates validations, signs or broadcasts. The facilitator runs all deployment steps with a Ledger. `deploy-l2` uses the L2 RPC, 999999 optimizer runs, no bytecode hash and Cancun, matching base/contracts. It appends `l2ToL1MessagePasser`, `l1Block`, @@ -156,9 +159,11 @@ and state-change descriptions. Expected state changes: unlike Sepolia's packed state. All three fee vaults and OperatorFeeVault initialize their storage configuration without clearing totalProcessed in slot 0. The new ERC20 factory deployments mapping starts empty; it does not backfill tokens created by the old factory. -- L2 storage changes are not part of the L1 validation state diff. The script post-check replays the - deposits on an L2 fork and checks implementation addresses, versions and all three vaults' initialized - recipient, minimum withdrawal and withdrawal network. Each upgrade is its own deposit so the +- L2 storage changes are not part of the L1 validation state diff. On mainnet, the script post-check validates the + captured deposit arguments in order, including the target, zero value, gas limit, creation flag and + calldata. It replays that decoded calldata on an L2 fork and checks implementation addresses, + versions and all three vaults' initialized recipient, minimum withdrawal and withdrawal network. + Sepolia replays its five expected calls and checks the same vault settings. Each upgrade is its own deposit so the L2 ProxyAdmin sees the aliased owner. - Safe nonce and approval changes. @@ -227,14 +232,24 @@ including the notice window, simulates the owner transaction using the actual ap all deposits on the current L2 fork. Missing deployment addresses or approvals stop the command. Do not execute unless it succeeds; the historical `test` / `simulate` target is not a substitute. -The 300000 uniform limit exceeds 1.5 times every cold L2 measurement. Portal burn for all deposits +The historical isolated gas tests require 1.5 times each deposit's total gas to fit within 300000. +The total includes execution gas, 21000 intrinsic gas and calldata gas. They include CALL and measurement overhead +in execution gas and take no refund credit. The largest measured total is 126660 gas for each of +the standard bridge and ERC721 bridge migrations, requiring 189990 gas with the margin. A plain +upgrade measures 24506 execution gas, not the warm 6933. The 300000 uniform limit remains unchanged. +These are historical fixture measurements; `simulate-current` checks the actual deposited calldata +and replays it with the deposit gas limit minus intrinsic and calldata gas, but does not measure +cold transaction gas. +Portal burn for all deposits is bounded by `3900000 * fee / max(L1 basefee, 1 gwei)` without credit for metered work. In `setUp` (validation, approval and execution simulations), the script reads live portal `params()` and resource configuration. It bounds `fee` by `prevBaseFee` plus any positive first-deposit fee update from the previous block's bought gas, applies the configured minimum (and maximum on a block update), and takes no credit for empty-block decay. It requires this burn plus a 5000000 base-cost allowance to be at most -14000000 gas. The allowance rounds the measured ~4300000 baseline transaction cost up by ~16%, +14000000 gas. The isolated owner transaction measures 4218345 gas including intrinsic and calldata +gas, without refund credit. The test requires at least 10% margin within the 5000000 allowance. +The allowance rounds that baseline up by ~18.5%, then adds the full metering burn without subtracting the baseline's burn. The 14000000 ceiling leaves 2777216 gas (~16.6%) below the EIP-7825 per-transaction cap of 16777216. At a 1 gwei portal fee and L1 basefee below 1 gwei the burn bound is 3900000; each additional 1 gwei adds 3900000. diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/Makefile b/active/evm/tasks/2026-10-07-denim-upgrade/Makefile index 8fcf5176..03b01cd7 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/Makefile +++ b/active/evm/tasks/2026-10-07-denim-upgrade/Makefile @@ -165,7 +165,8 @@ MAINNET_CONFIG_ENV = FACTORY_BRIDGE=$(FACTORY_BRIDGE) REMOTE_CHAIN_ID=$(REMOTE_C OPERATOR_FEE_VAULT_RECIPIENT=$(OPERATOR_FEE_VAULT_RECIPIENT) \ OPERATOR_FEE_VAULT_MIN_WITHDRAWAL_AMOUNT=$(OPERATOR_FEE_VAULT_MIN_WITHDRAWAL_AMOUNT) \ OPERATOR_FEE_VAULT_WITHDRAWAL_NETWORK=$(OPERATOR_FEE_VAULT_WITHDRAWAL_NETWORK) -UPGRADE_ENV += $(MAINNET_CONFIG_ENV) \ +UPGRADE_ENV += CB_MULTISIG=$(CB_MULTISIG) BASE_SECURITY_COUNCIL=$(BASE_SECURITY_COUNCIL) \ + $(MAINNET_CONFIG_ENV) \ ERC721_FACTORY_IMPL=$(call impl,optimismMintableERC721Factory) \ OPERATOR_FEE_VAULT_IMPL=$(call impl,operatorFeeVault) \ SCHEMA_REGISTRY_IMPL=$(call impl,schemaRegistry) EAS_IMPL=$(call impl,eas) \ @@ -180,6 +181,15 @@ deps: github.com/OpenZeppelin/openzeppelin-contracts@ecd2ca2cd7cac116f7a37d0e474bbb3d7d5e1c4d \ github.com/OpenZeppelin/openzeppelin-contracts-upgradeable@0a2cb9a445c365870ed7a8ab461b12acf3e27d63 +.PHONY: check-upgrade-env +check-upgrade-env: + @set -e; keys=' $(foreach assignment,$(UPGRADE_ENV),$(firstword $(subst =, ,$(assignment)))) '; \ + for key in $$(grep -oE 'vm\.env[A-Za-z0-9_]+\("[A-Z0-9_]+"' script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol | cut -d '"' -f 2 | sort -u); do \ + case "$$keys" in *" $$key "*) ;; *) echo "UPGRADE_ENV missing $$key"; exit 1;; esac; \ + done + +gen-validation-cb gen-validation-sc simulate-current test: check-upgrade-env + .PHONY: check-prover-hashes deploy-remaining-l2 build-multisig simulate test check-prover-hashes: @for hash in "$(AGGREGATE_VERIFIER_TEE_IMAGE_HASH)" "$(AGGREGATE_VERIFIER_ZK_RANGE_HASH)" "$(AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH)"; do \ @@ -210,6 +220,7 @@ simulate-current: check-implementations check-prover-hashes --sig "simulate(bytes)" 0x -vvvv simulate test: build-multisig - cd $(TASK_PROJECT_DIR) && $(UPGRADE_ENV) L1_RPC_URL=$(L1_RPC_URL) CB_MULTISIG=$(CB_MULTISIG) \ - $(MISE_EXEC) forge test -vv + cd $(TASK_PROJECT_DIR) && export $(UPGRADE_ENV) L1_RPC_URL=$(L1_RPC_URL) && \ + $(MISE_EXEC) forge test --no-match-test 'testCold' -vv && \ + $(MISE_EXEC) forge test --isolate --match-test 'testCold' -vv endif diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol b/active/evm/tasks/2026-10-07-denim-upgrade/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol index a01ddccd..6dd52d19 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol +++ b/active/evm/tasks/2026-10-07-denim-upgrade/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol @@ -1,7 +1,6 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.15; -import {console} from "forge-std/console.sol"; import {LegacyMigrator} from "./LegacyMigrator.sol"; import {Vm, VmSafe} from "forge-std/Vm.sol"; @@ -50,7 +49,7 @@ contract ExecuteDenimUpgradeWithAllL2Predeploys is MultisigScript { // Each deposit must call the L2 ProxyAdmin directly so it sees the aliased owner, not an L2 multicall. // The L1 simulation cannot execute deposits, so the post-check replays them on an L2 fork. uint64 internal constant L2_GAS_LIMIT = 300_000; - // Round the measured ~4.3M baseline up to 5M, add the full burn, and leave 2,777,216 below EIP-7825. + // Round the cold ~4.22M baseline up to 5M, add the full burn, and leave 2,777,216 below EIP-7825. uint256 internal constant MAX_PROJECTED_L1_GAS = 14_000_000; uint256 internal constant L1_BASE_GAS_BUDGET = 5_000_000; string internal constant L2_TO_L1_MESSAGE_PASSER_VERSION = "1.2.0"; @@ -255,8 +254,7 @@ contract ExecuteDenimUpgradeWithAllL2Predeploys is MultisigScript { function _postCheck(Vm.AccountAccess[] memory accesses, Simulation.Payload memory) internal override { _assertDenimUpgrade(); - _assertDeposits(accesses); - _assertL2Upgrade(); + _assertL2Upgrade(_assertDeposits(accesses)); } function _assertDenimUpgrade() internal view { @@ -320,7 +318,9 @@ contract ExecuteDenimUpgradeWithAllL2Predeploys is MultisigScript { require(av.L2_BLOCK_TIME() == live.L2_BLOCK_TIME(), "l2 block time mismatch"); } - function _assertDeposits(Vm.AccountAccess[] memory accesses) internal view { + function _assertDeposits(Vm.AccountAccess[] memory accesses) internal view returns (bytes[] memory deposited) { + bytes[] memory expected = _l2Calls(); + deposited = new bytes[](expected.length); bytes4 depositSelector = IOptimismPortal2.depositTransaction.selector; uint256 deposits; for (uint256 i; i < accesses.length; i++) { @@ -329,12 +329,25 @@ contract ExecuteDenimUpgradeWithAllL2Predeploys is MultisigScript { if (access.data.length < 4 || bytes4(access.data) != depositSelector) continue; require(access.accessor == ownerSafe, "deposit not sent by the proxy admin owner"); require(!access.reverted, "deposit reverted"); + require(deposits < expected.length, "unexpected deposit count"); + bytes memory arguments = new bytes(access.data.length - 4); + for (uint256 j; j < arguments.length; j++) { + arguments[j] = access.data[j + 4]; + } + (address to, uint256 value, uint64 gasLimit, bool isCreation, bytes memory data) = + abi.decode(arguments, (address, uint256, uint64, bool, bytes)); + require(to == ADMIN, "deposit target mismatch"); + require(value == 0 && access.value == 0, "deposit value mismatch"); + require(gasLimit == L2_GAS_LIMIT, "deposit gas limit mismatch"); + require(!isCreation, "deposit creates contract"); + require(keccak256(data) == keccak256(expected[deposits]), "deposit data mismatch"); + deposited[deposits] = data; deposits++; } require(deposits == 13, "unexpected deposit count"); } - function _assertL2Upgrade() internal { + function _assertL2Upgrade(bytes[] memory calls) internal { uint256 l1Fork = vm.activeFork(); vm.selectFork(l2Fork); _assertL2Before(); @@ -357,30 +370,12 @@ contract ExecuteDenimUpgradeWithAllL2Predeploys is MultisigScript { processed[3] = _uint(VAULT, "totalProcessed()"); uint256 nonce = _uint(MESSENGER, "messageNonce()"); bytes32 sender = vm.load(MESSENGER, bytes32(uint256(204))); - bytes[] memory calls = _l2Calls(); for (uint256 i; i < 13; i++) { require(impls[i].code.length != 0, "implementation missing"); - vm.cool(ADMIN); - vm.cool(proxies[i]); - vm.cool(impls[i]); - vm.cool(legacyMigrator); - vm.coolSlot(ADMIN, bytes32(0)); - vm.coolSlot(ADMIN, IMPLEMENTATION_SLOT); - vm.coolSlot(proxies[i], IMPLEMENTATION_SLOT); - vm.coolSlot(proxies[i], ADMIN_SLOT); - vm.coolSlot(proxies[i], INITIALIZABLE_SLOT); - for (uint256 slot; slot <= 4; slot++) { - vm.coolSlot(proxies[i], bytes32(slot)); - } - vm.coolSlot(MESSENGER, bytes32(uint256(204))); - vm.coolSlot(MESSENGER, bytes32(uint256(207))); vm.prank(aliasOwner); - uint256 beforeGas = gasleft(); - (bool ok, bytes memory reason) = ADMIN.call{gas: L2_GAS_LIMIT}(calls[i]); - uint256 used = beforeGas - gasleft(); - console.log("L2 cold call gas", i, used); + uint256 executionLimit = L2_GAS_LIMIT - _intrinsicGas(calls[i]); + (bool ok, bytes memory reason) = ADMIN.call{gas: executionLimit}(calls[i]); if (!ok) assembly { revert(add(reason, 32), mload(reason)) } - require(used * 3 <= uint256(L2_GAS_LIMIT) * 2, "L2 call lacks gas headroom"); } _assertPredeploy(proxies[0], impls[0], L2_TO_L1_MESSAGE_PASSER_VERSION); _assertPredeploy(proxies[1], impls[1], L1_BLOCK_VERSION); @@ -398,6 +393,13 @@ contract ExecuteDenimUpgradeWithAllL2Predeploys is MultisigScript { vm.selectFork(l1Fork); } + function _intrinsicGas(bytes memory data) internal pure returns (uint256 gas) { + gas = 21_000; + for (uint256 i; i < data.length; i++) { + gas += data[i] == 0 ? 4 : 16; + } + } + function _assertFeeVault(address proxy, address impl) internal view { _assertPredeploy(proxy, impl, FEE_VAULT_VERSION); IFeeVault vault = IFeeVault(payable(proxy)); diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/test/Mainnet.t.sol b/active/evm/tasks/2026-10-07-denim-upgrade/test/Mainnet.t.sol index 9bb2f5d4..caf07da3 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/test/Mainnet.t.sol +++ b/active/evm/tasks/2026-10-07-denim-upgrade/test/Mainnet.t.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.15; import {Script, console} from "forge-std/Script.sol"; -import {Vm} from "forge-std/Vm.sol"; +import {Vm, VmSafe} from "forge-std/Vm.sol"; import {Simulation} from "@base-contracts/scripts/universal/Simulation.sol"; import {AggregateVerifier} from "@base-contracts/src/L1/proofs/AggregateVerifier.sol"; import {DeployDenimProofImpls} from "../script/DeployDenimProofImpls.s.sol"; @@ -50,7 +50,26 @@ contract MainnetHarness is ExecuteDenimUpgradeWithAllL2Predeploys { } function replay() external { - _assertL2Upgrade(); + _assertL2Upgrade(_l2Calls()); + } + + function l2Calls() external view returns (bytes[] memory, uint64) { + return (_l2Calls(), L2_GAS_LIMIT); + } + + function checkDeposits(Vm.AccountAccess[] memory accesses) external view returns (bytes[] memory) { + return _assertDeposits(accesses); + } + + function depositAccesses() external view returns (Vm.AccountAccess[] memory accesses) { + Call[] memory calls = _buildCalls(); + accesses = new Vm.AccountAccess[](13); + for (uint256 i; i < 13; i++) { + accesses[i].account = optimismPortal; + accesses[i].accessor = ownerSafe; + accesses[i].kind = VmSafe.AccountAccessKind.Call; + accesses[i].data = calls[i + 2].data; + } } function simulateForTest() external { @@ -66,10 +85,12 @@ contract MainnetHarness is ExecuteDenimUpgradeWithAllL2Predeploys { require(used < 12_000_000, "owner transaction lacks gas headroom"); _postCheck(accesses, payload); require(vm.revertToState(snapshot), "simulation restore failed"); - _measureOwnerTransaction(_buildCallsChain(safes)[0], accesses); } - function _measureOwnerTransaction(Call memory call, Vm.AccountAccess[] memory accesses) internal { + function prepareOwnerTransaction() external returns (address, bytes memory) { + address[] memory safes = new address[](1); + safes[0] = ownerSafe; + Call memory call = _buildCallsChain(safes)[0]; address base = vm.envAddress("CB_MULTISIG"); address council = vm.envAddress("BASE_SECURITY_COUNCIL"); bytes32 hash = _getTransactionHash(ownerSafe, call); @@ -86,17 +107,7 @@ contract MainnetHarness is ExecuteDenimUpgradeWithAllL2Predeploys { uint8(1) ); Call memory execution = _buildExecTransactionCall(ownerSafe, call, signatures); - for (uint256 i; i < accesses.length; i++) { - vm.cool(accesses[i].account); - for (uint256 j; j < accesses[i].storageAccesses.length; j++) { - vm.coolSlot(accesses[i].account, accesses[i].storageAccesses[j].slot); - } - } - uint256 beforeExecution = gasleft(); - (bool ok, bytes memory result) = ownerSafe.call{gas: 12_000_000}(execution.data); - uint256 executionGas = beforeExecution - gasleft() + 21_000 + 16 * execution.data.length; - console.log("L1 two-owner transaction gas upper bound", executionGas); - require(ok && abi.decode(result, (bool)) && executionGas < 12_000_000, "owner transaction too expensive"); + return (ownerSafe, execution.data); } } @@ -197,6 +208,112 @@ contract MainnetTest is Script { require(ok, "record read failed"); } + function _intrinsicGas(bytes memory data) internal pure returns (uint256 gas) { + gas = 21_000; + for (uint256 i; i < data.length; i++) { + gas += data[i] == 0 ? 4 : 16; + } + } + + function testColdL2DepositGas() public { + MainnetHarness upgrade = _upgradeL2(); + (bytes[] memory calls, uint64 limit) = upgrade.l2Calls(); + address aliasOwner = 0x8cC51c3008b3f03Fe483B28B8Db90e19cF076a6d; + for (uint256 i; i < calls.length; i++) { + uint256 intrinsic = _intrinsicGas(calls[i]); + vm.prank(aliasOwner); + uint256 beforeGas = gasleft(); + (bool ok,) = ADMIN.call{gas: limit - intrinsic}(calls[i]); + // Isolated calls charge intrinsic gas and deduct refunds from gasleft(). + uint256 total = beforeGas - gasleft(); + Vm.Gas memory measured = vm.lastCallGas(); + if (measured.gasRefunded > 0) total += uint64(measured.gasRefunded); + uint256 execution = total - intrinsic; + require(ok, "cold deposit failed"); + if (i == 0) require(execution > 20_000, "gas measurement is not cold; use --isolate"); + console.log("L2 cold execution gas", i, execution); + console.log("L2 intrinsic gas", i, intrinsic); + console.log("L2 total gas", i, execution + intrinsic); + require((execution + intrinsic) * 3 <= uint256(limit) * 2, "L2 deposit lacks gas headroom"); + } + } + + function testColdL1OwnerTransactionGas() public { + MainnetHarness upgrade = new MainnetHarness(); + upgrade.setUp(); + (address owner, bytes memory data) = upgrade.prepareOwnerTransaction(); + uint256 beforeGas = gasleft(); + (bool ok, bytes memory result) = owner.call{gas: 12_000_000}(data); + // Isolation already includes transaction intrinsic gas in the charged gas. + uint256 total = beforeGas - gasleft(); + Vm.Gas memory measured = vm.lastCallGas(); + if (measured.gasRefunded > 0) total += uint64(measured.gasRefunded); + console.log("L1 cold owner transaction gas", total); + require(ok && abi.decode(result, (bool)), "owner transaction failed"); + require(total * 11 <= 5_000_000 * 10, "L1 baseline lacks ten percent margin"); + } + + function testRejectsCorruptedDeposits() public { + MainnetHarness upgrade = new MainnetHarness(); + Vm.AccountAccess[] memory accesses = upgrade.depositAccesses(); + bytes[] memory decoded = upgrade.checkDeposits(accesses); + require(decoded.length == 13, "valid deposits rejected"); + bytes memory original = accesses[0].data; + bytes memory args = new bytes(original.length - 4); + for (uint256 i; i < args.length; i++) { + args[i] = original[i + 4]; + } + (address to, uint256 value, uint64 gasLimit, bool creation, bytes memory data) = + abi.decode(args, (address, uint256, uint64, bool, bytes)); + for (uint256 field; field < 5; field++) { + accesses[0].data = abi.encodeWithSelector( + bytes4(original), + field == 0 ? address(1) : to, + field == 1 ? uint256(1) : value, + field == 2 ? gasLimit + 1 : gasLimit, + field == 3 ? true : creation, + field == 4 ? bytes("corrupt") : data + ); + string[5] memory errors = [ + string("deposit target mismatch"), + "deposit value mismatch", + "deposit gas limit mismatch", + "deposit creates contract", + "deposit data mismatch" + ]; + vm.expectRevert(bytes(errors[field])); + upgrade.checkDeposits(accesses); + } + accesses[0].data = original; + (accesses[0], accesses[1]) = (accesses[1], accesses[0]); + vm.expectRevert(bytes("deposit data mismatch")); + upgrade.checkDeposits(accesses); + } + + function testRejectsInstalledBaseTime() public { + MainnetHarness upgrade = new MainnetHarness(); + vm.selectFork(upgrade.l2ForkId()); + vm.store( + 0x4200000000000000000000000000000000000030, + 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, + bytes32(uint256(1)) + ); + vm.expectRevert(bytes("BaseTime already installed")); + upgrade.replay(); + } + + function testRejectsWrongBaseTimeAdmin() public { + MainnetHarness upgrade = new MainnetHarness(); + vm.selectFork(upgrade.l2ForkId()); + vm.store( + 0x4200000000000000000000000000000000000030, + 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, + bytes32(uint256(1)) + ); + vm.expectRevert(bytes("BaseTime admin mismatch")); + upgrade.replay(); + } + function testLiveRecordsSurviveUpgrade() public { MainnetHarness upgrade = _upgradeL2(); // RelayedMessage at Base block 52953341. From be2f94e5c5ad65690dd18bfcf02e658c10f3898d Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Thu, 22 Oct 2026 17:22:00 -0400 Subject: [PATCH 06/16] docs: keep gas measurements out of the facilitator guide Co-authored-by: Toshi --- .../2026-10-07-denim-upgrade/FACILITATOR.md | 35 ++++++++----------- ...ecuteDenimUpgradeWithAllL2Predeploys.s.sol | 2 +- 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md b/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md index 799c6ba2..492431f1 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md +++ b/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md @@ -232,27 +232,20 @@ including the notice window, simulates the owner transaction using the actual ap all deposits on the current L2 fork. Missing deployment addresses or approvals stop the command. Do not execute unless it succeeds; the historical `test` / `simulate` target is not a substitute. -The historical isolated gas tests require 1.5 times each deposit's total gas to fit within 300000. -The total includes execution gas, 21000 intrinsic gas and calldata gas. They include CALL and measurement overhead -in execution gas and take no refund credit. The largest measured total is 126660 gas for each of -the standard bridge and ERC721 bridge migrations, requiring 189990 gas with the margin. A plain -upgrade measures 24506 execution gas, not the warm 6933. The 300000 uniform limit remains unchanged. -These are historical fixture measurements; `simulate-current` checks the actual deposited calldata -and replays it with the deposit gas limit minus intrinsic and calldata gas, but does not measure -cold transaction gas. -Portal burn for all deposits -is bounded by `3900000 * fee / max(L1 basefee, 1 gwei)` without credit for metered work. -In `setUp` (validation, approval and execution simulations), the script reads live portal `params()` -and resource configuration. It bounds `fee` by `prevBaseFee` plus any positive first-deposit fee -update from the previous block's bought gas, applies the configured minimum (and maximum on a block -update), and takes no -credit for empty-block decay. It requires this burn plus a 5000000 base-cost allowance to be at most -14000000 gas. The isolated owner transaction measures 4218345 gas including intrinsic and calldata -gas, without refund credit. The test requires at least 10% margin within the 5000000 allowance. -The allowance rounds that baseline up by ~18.5%, -then adds the full metering burn without subtracting the baseline's burn. The 14000000 ceiling -leaves 2777216 gas (~16.6%) below the EIP-7825 per-transaction cap of 16777216. At a 1 gwei portal -fee and L1 basefee below 1 gwei the burn bound is 3900000; each additional 1 gwei adds 3900000. +Gas rules enforced by the script and tests: + +- Every deposit has a 300000 L2 gas limit. The isolated cold gas tests (`testColdL2DepositGas`, + run by `test` with `--isolate`) require 1.5 times each deposit's execution, intrinsic and calldata + gas to fit within it. `simulate-current` replays the actual deposited calldata with the deposit + gas limit minus intrinsic and calldata gas, but does not measure cold transaction gas. +- In `setUp` (validation, approval and execution simulations), the script reads the live portal + `params()` and resource configuration. It bounds the portal fee by `prevBaseFee` plus any positive + first-deposit fee update from the previous block's bought gas, applies the configured minimum (and + maximum on a block update), and takes no credit for empty-block decay. The burn for all deposits is + bounded by `3900000 * fee / max(L1 basefee, 1 gwei)`. +- The script requires that burn plus a 5000000 base-cost allowance to be at most 14000000 gas, below + the EIP-7825 per-transaction cap of 16777216. `testColdL1OwnerTransactionGas` requires the cold + owner transaction to fit within the allowance with at least 10% margin. Fees and resource use can change after simulation. Recheck immediately before submission and do not override a failed guard or split this transaction. The L1 block limit and portal resource limit diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol b/active/evm/tasks/2026-10-07-denim-upgrade/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol index 6dd52d19..c4fc702a 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol +++ b/active/evm/tasks/2026-10-07-denim-upgrade/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol @@ -49,7 +49,7 @@ contract ExecuteDenimUpgradeWithAllL2Predeploys is MultisigScript { // Each deposit must call the L2 ProxyAdmin directly so it sees the aliased owner, not an L2 multicall. // The L1 simulation cannot execute deposits, so the post-check replays them on an L2 fork. uint64 internal constant L2_GAS_LIMIT = 300_000; - // Round the cold ~4.22M baseline up to 5M, add the full burn, and leave 2,777,216 below EIP-7825. + // The base budget covers the cold owner transaction (testColdL1OwnerTransactionGas); the ceiling stays below EIP-7825's 16,777,216. uint256 internal constant MAX_PROJECTED_L1_GAS = 14_000_000; uint256 internal constant L1_BASE_GAS_BUDGET = 5_000_000; string internal constant L2_TO_L1_MESSAGE_PASSER_VERSION = "1.2.0"; From 2d112aa6fe05c46fcc84647dea048865cf80a57b Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Thu, 22 Oct 2026 17:29:42 -0400 Subject: [PATCH 07/16] chore: record mainnet PR in task status Co-authored-by: Toshi --- active/evm/tasks/2026-10-07-denim-upgrade/status.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/status.json b/active/evm/tasks/2026-10-07-denim-upgrade/status.json index e3cf232d..50134fe1 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/status.json +++ b/active/evm/tasks/2026-10-07-denim-upgrade/status.json @@ -29,7 +29,7 @@ }, "mainnet": { "step": "authoring", - "pr": null, + "pr": "https://github.com/base/contract-deployments/pull/827", "blocksec_ticket": null, "signatures": { "base": { From 2c88101d5e8c21e90db2cccb554f00a88ee60686 Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Mon, 26 Oct 2026 14:03:59 -0400 Subject: [PATCH 08/16] chore(mainnet): update Denim verifier hashes Source: https://github.com/base/base/tree/6efa75662b57c578d897fea2449035636f6ad9ad Co-authored-by: Toshi --- .../2026-10-07-denim-upgrade/FACILITATOR.md | 6 +++--- .../evm/tasks/2026-10-07-denim-upgrade/Makefile | 2 +- .../config/mainnet/.env | 17 ++++++++--------- .../config/mainnet/README.md | 2 +- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md b/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md index 492431f1..957643cd 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md +++ b/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md @@ -50,12 +50,12 @@ Open `config//.env` and confirm: Every other `AggregateVerifier` constructor argument is copied from the live verifier at deploy time. -For mainnet, verify the PCR0 and both SP1 verification keys against the v1.5.1 build provenance +For mainnet, verify the PCR0 and both SP1 verification keys against the v1.5.2 build provenance in the network config before deploying or generating validations. The Sepolia f3a459f build cannot derive post-Denim mainnet blocks because it disables mainnet Denim. Do not reuse its hashes. Mainnet validation, approval and execution refuse missing hashes. -Build enclave and zk images from exactly base/base v1.5.1 at 5476069f1eb74a56bccb56fdefd4b4bb0e3cda42. +Build enclave and zk images from exactly base/base releases/v1.5.2 at 6efa75662b57c578d897fea2449035636f6ad9ad. Use the proof-build recipes at 228352e514233177a65cc2d9873f6bf4b08e67cd, Rust 1.94.0 alpine, linuxkit v1.8.2 and aws-nitro-enclaves-image-format 483114f. A different source revision, recipe or toolchain can change the accepted hashes. @@ -201,7 +201,7 @@ The deposits execute on L2 shortly after the L1 transaction, not at Denim activa upgrades have no ordering dependency on Denim. Check that all five Sepolia deposits, or all thirteen mainnet deposits, succeeded on L2. Immediately after execution, roll the network's proposer and provers to the prover build documented in `config//.env`. -On mainnet this MUST be the reproducible v1.5.1-based build. Execute first, then roll immediately; do not roll before execution. +On mainnet this MUST be the reproducible v1.5.2 build. Execute first, then roll immediately; do not roll before execution. The new verifier accepts proofs only from that build, so proposals pause until the rollout lands; keep the gap short. New enclave signers register themselves in `TEEProverRegistry` on startup. The nitro host's health check requires a signer valid for the registry's current expected image hash, so the new build cannot be deployed before execution. Confirm the new signers diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/Makefile b/active/evm/tasks/2026-10-07-denim-upgrade/Makefile index 03b01cd7..245b2d0f 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/Makefile +++ b/active/evm/tasks/2026-10-07-denim-upgrade/Makefile @@ -195,7 +195,7 @@ check-prover-hashes: @for hash in "$(AGGREGATE_VERIFIER_TEE_IMAGE_HASH)" "$(AGGREGATE_VERIFIER_ZK_RANGE_HASH)" "$(AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH)"; do \ printf '%s\n' "$$hash" | grep -Eq '^0x[0-9a-fA-F]{64}$$' && \ test "$$hash" != 0x0000000000000000000000000000000000000000000000000000000000000000 || \ - { echo 'Confirm the reproducible mainnet v1.5.1-based prover hashes first'; exit 1; }; \ + { echo 'Confirm the reproducible mainnet v1.5.2 prover hashes first'; exit 1; }; \ done deploy gen-validation-cb gen-validation-sc approve-cb approve-sc execute: check-prover-hashes diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/.env b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/.env index 5ccb3cd4..87b27283 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/.env +++ b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/.env @@ -13,25 +13,24 @@ OLD_AGGREGATE_VERIFIER=0xeF9eCeA15265321753047EBF7D54C858D53cB94f FAST_BLOCK_INTERVAL=6000 FAST_INTERMEDIATE_BLOCK_INTERVAL=300 -# All three proof hashes come from base/base v1.5.1: -# https://github.com/base/base/tree/5476069f1eb74a56bccb56fdefd4b4bb0e3cda42 +# All three proof hashes come from base/base releases/v1.5.2: +# https://github.com/base/base/tree/6efa75662b57c578d897fea2449035636f6ad9ad # f3a459feaf4b071f311940510055b4b55b9374b8 cannot be used for mainnet because # crates/common/chains/src/chain.rs sets base_mainnet_forks[Denim] to ForkCondition::Never. -# ZK: SP1 range and aggregation vkeys from `just succinct vkeys --build` at 5476069f. +# ZK: SP1 range and aggregation vkeys from `just succinct vkeys --build` at 6efa7566. # This method reproduces Sepolia's live range/aggregate hashes from f3a459f exactly. -# The aggregate hash equals v1.5.1-rc.3 (aggregation program unchanged); range is new. # TEE: keccak256 of PCR0, using `cast keccak 0x$PCR0`: -# 4a6d85332527bad59c7d57041a9f163b11eda818f1e8d8425867d03e1a0357dc64ce6f2eaf0208607ab61e7f4ac4406a +# 57f978efc999ccc8b14d15f3884902a75223c0f987137576183281fc067e34754d51bf4687fdfa4f57dc9261cd88136b # PCR0 comes from `nitro-cli describe-eif` on the AWS Nitro enclave image built -# with BASE_COMMIT=5476069f and the Base proof-build recipes: +# with BASE_COMMIT=6efa7566 and the Base proof-build recipes: # https://github.com/base/base/tree/228352e514233177a65cc2d9873f6bf4b08e67cd/etc/docker/proof-builds # Rust 1.94.0 alpine, linuxkit v1.8.2, aws-nitro-enclaves-image-format 483114f. # The same build from f3a459f gives PCR0 2cbd0c62...5056, matching Sepolia's # live TEE hash 0x44cc...9ef7. Changing the source, recipe or toolchain changes hashes. # Execute first, then immediately roll mainnet provers and proposer to this build. -AGGREGATE_VERIFIER_TEE_IMAGE_HASH=0xbe3cceb1e0c7967a1d3211e42af7b3371d08a3311eb0ad844a67e4b37dac4170 -AGGREGATE_VERIFIER_ZK_RANGE_HASH=0x5dcca1064487db8e23b0b4c45b219e0858b7f60110629fe7217cb12c17602f6b -AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH=0x005d9dc3165b95bdc0d70e25c708abdeead994b8b8a06a6ac71d51cba7cf5943 +AGGREGATE_VERIFIER_TEE_IMAGE_HASH=0x73181275ec86503b629510176b5bedec00309060b3f4ff5d8e55d9e83dad5cbd +AGGREGATE_VERIFIER_ZK_RANGE_HASH=0x3d3713d31a8936563bc56791040067131bb3fa3c0ab8b5e65e9c4cc0755b5fdb +AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH=0x00d5a43068d7a9d1eac440a790b776c749ae6516c43f1a572226190cef6fd45a # Mainnet Denim: 2026-11-05 18:00:00 UTC, upgrade id 13. # https://github.com/base/base/blob/5476069f1eb74a56bccb56fdefd4b4bb0e3cda42/crates/common/chains/src/config.rs diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/README.md b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/README.md index 143cee4a..d7a01013 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/README.md +++ b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/README.md @@ -28,7 +28,7 @@ LegacyMigrator: Pending deployment. ProtocolVersions adds upgrade id 13. BaseTime is excluded. Existing vault recipients and withdrawal networks are preserved. EAS delegated signatures must be signed again for domain version 1.3.0. -The reproducible v1.5.1-based prover hashes and their provenance are set in `.env`. +The reproducible v1.5.2 prover hashes and their provenance are set in `.env`. The facilitator must deploy the implementations and generate mainnet task-origin validations before signing. From the repository root: From 4d509a2c5b14155c6cc52cd15631e718759a667a Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Mon, 26 Oct 2026 14:44:29 -0400 Subject: [PATCH 09/16] feat(mainnet): verify L2 implementations on Basescan --- .../2026-10-07-denim-upgrade/FACILITATOR.md | 14 +++++-- .../tasks/2026-10-07-denim-upgrade/Makefile | 34 ++++++++++++++++ .../config/mainnet/README.md | 40 ++++++++++--------- 3 files changed, 66 insertions(+), 22 deletions(-) diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md b/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md index 957643cd..c8863c09 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md +++ b/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md @@ -96,13 +96,20 @@ For mainnet, then deploy the other eight implementations and LegacyMigrator with Foundry project: ```bash -make TASK_NETWORK= deploy-remaining-l2 +make TASK_NETWORK=mainnet deploy-remaining-l2 +make TASK_NETWORK=mainnet verify-l2 make TASK_NETWORK= simulate ``` +On mainnet, all thirteen L2 implementations and LegacyMigrator must pass `verify-l2` on Basescan. +Fill in their verified-source links in `config//README.md` before generating validations +or signing. `verify-l2` waits for each result and stops on a missing address or failed verification. + The extra deployments use 0.8.15 for factories and bridges, 0.8.19 for attestations, and 0.8.25 for OperatorFeeVault. Per-file factory optimizer profiles use 5000 runs; the other implementations use -999999 runs, no bytecode hash, and Cancun. The multisig script also builds from `active/evm` using +999999 runs and no bytecode hash. All use `via-ir=false`. Foundry clamps the configured Cancun +EVM target to London for 0.8.15 and Paris for 0.8.19; 0.8.25 uses Cancun. +The multisig script also builds from `active/evm` using its default compiler settings. `simulate` (an alias for `test`) runs deterministic historical fork tests with test-only verifier hashes and local implementations. It is not the current-state execution prerequisite. The gas tests use `forge test --isolate`, so each measured ProxyAdmin call and @@ -113,7 +120,8 @@ generates validations, signs or broadcasts. The facilitator runs all deployment steps with a Ledger. `deploy-l2` uses the L2 RPC, 999999 optimizer runs, no bytecode hash and Cancun, matching base/contracts. It appends `l2ToL1MessagePasser`, `l1Block`, `sequencerFeeVault`, `baseFeeVault` and `l1FeeVault` to `config//addresses.json`. There is no -L2 source-verification step. Deploy the verifier first because its script replaces the address file; +L2 source-verification target for Sepolia or Zeronet. +Deploy the verifier first because its script replaces the address file; `deploy` refuses to overwrite recorded L2 addresses. The fee-vault deployment uses Solidity 0.8.25, while the verifier and other L2 deployment use 0.8.15. diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/Makefile b/active/evm/tasks/2026-10-07-denim-upgrade/Makefile index 245b2d0f..9c46efd1 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/Makefile +++ b/active/evm/tasks/2026-10-07-denim-upgrade/Makefile @@ -211,6 +211,40 @@ deploy-remaining-l2: --ledger --hd-paths $(LEDGER_HD_PATH) --broadcast -vvvv; \ done +.PHONY: verify-l2 +verify-l2: +ifndef VERIFIER_API_KEY + $(error VERIFIER_API_KEY is not set) +endif + @jq -e '[.l2ToL1MessagePasser, .l1Block, .sequencerFeeVault, .baseFeeVault, .l1FeeVault $(MAINNET_IMPLEMENTATIONS)] | all(.[]; type == "string" and test("^0x[0-9a-fA-F]{40}$$") and ascii_downcase != "0x0000000000000000000000000000000000000000")' "$(ADDRESSES_JSON)" >/dev/null 2>&1 || \ + { echo 'Deploy all thirteen L2 implementations and LegacyMigrator before verify-l2'; exit 1; } + @set -e; cd $(TASK_PROJECT_DIR); \ + verify_l2() { \ + address=$$(jq -er --arg key "$$1" '.[$$key]' "$(ADDRESSES_JSON)"); \ + contract=$$2; compiler=$$3; runs=$$4; profile=$$5; shift 5; \ + RUST_LOG=off $(AGGREGATE_VERIFIER_BUILD) FOUNDRY_VIA_IR=false \ + $(MISE_EXEC) forge verify-contract "$$address" "$$contract" \ + --root $(TASK_PROJECT_DIR) --compilation-profile "$$profile" \ + --compiler-version "$$compiler" --num-of-optimizations "$$runs" \ + --chain 8453 --verifier custom --verifier-url "https://api.etherscan.io/v2/api?chainid=8453" \ + --verifier-api-key $(VERIFIER_API_KEY) --watch "$$@"; \ + }; \ + verify_l2 l2ToL1MessagePasser ../../lib/contracts/src/L2/L2ToL1MessagePasser.sol:L2ToL1MessagePasser v0.8.15+commit.e14f2714 999999 default; \ + verify_l2 l1Block ../../lib/contracts/src/L2/L1Block.sol:L1Block v0.8.15+commit.e14f2714 999999 default; \ + verify_l2 sequencerFeeVault ../../lib/contracts/src/L2/SequencerFeeVault.sol:SequencerFeeVault v0.8.25+commit.b61c2a91 999999 default; \ + verify_l2 baseFeeVault ../../lib/contracts/src/L2/BaseFeeVault.sol:BaseFeeVault v0.8.25+commit.b61c2a91 999999 default; \ + verify_l2 l1FeeVault ../../lib/contracts/src/L2/L1FeeVault.sol:L1FeeVault v0.8.25+commit.b61c2a91 999999 default; \ + verify_l2 optimismMintableERC721Factory ../../lib/contracts/src/L2/OptimismMintableERC721Factory.sol:OptimismMintableERC721Factory v0.8.15+commit.e14f2714 5000 factory \ + --constructor-args "$$( $(MISE_EXEC) cast abi-encode 'constructor(address,uint256)' $(FACTORY_BRIDGE) $(REMOTE_CHAIN_ID))"; \ + verify_l2 operatorFeeVault ../../lib/contracts/src/L2/OperatorFeeVault.sol:OperatorFeeVault v0.8.25+commit.b61c2a91 999999 default; \ + verify_l2 schemaRegistry ../../lib/contracts/src/vendor/eas/SchemaRegistry.sol:SchemaRegistry v0.8.19+commit.7dd6d404 999999 default; \ + verify_l2 eas ../../lib/contracts/src/vendor/eas/EAS.sol:EAS v0.8.19+commit.7dd6d404 999999 default; \ + verify_l2 l2CrossDomainMessenger ../../lib/contracts/src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger v0.8.15+commit.e14f2714 999999 default; \ + verify_l2 l2StandardBridge ../../lib/contracts/src/L2/L2StandardBridge.sol:L2StandardBridge v0.8.15+commit.e14f2714 999999 default; \ + verify_l2 optimismMintableERC20Factory ../../lib/contracts/src/universal/OptimismMintableERC20Factory.sol:OptimismMintableERC20Factory v0.8.15+commit.e14f2714 5000 factory; \ + verify_l2 l2ERC721Bridge ../../lib/contracts/src/L2/L2ERC721Bridge.sol:L2ERC721Bridge v0.8.15+commit.e14f2714 999999 default; \ + verify_l2 legacyMigrator script/LegacyMigrator.sol:LegacyMigrator v0.8.15+commit.e14f2714 999999 default + build-multisig: cd $(PROJECT_DIR) && $(MISE_EXEC) forge build $(TASK_DIR)/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/README.md b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/README.md index d7a01013..5bdfbd41 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/README.md +++ b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/README.md @@ -7,29 +7,31 @@ One ProxyAdmin-owner transaction replaces AggregateVerifier, registers Denim for upgrade deposits. The Security Council signs once, with eight member signatures. The Base multisig requires three member signatures. -| Target | Current version | New version | New implementation | -| --- | --- | --- | --- | -| AggregateVerifier, game type 621 | 0.2.0 | 0.3.0 | Pending deployment | -| L2ToL1MessagePasser | 1.0.0 | 1.2.0 | Pending deployment | -| L1Block | 1.7.0 | 1.8.0 | Pending deployment | -| SequencerFeeVault | 1.3.0 | 1.6.0 | Pending deployment | -| BaseFeeVault | 1.3.0 | 1.6.0 | Pending deployment | -| L1FeeVault | 1.3.0 | 1.6.0 | Pending deployment | -| OptimismMintableERC721Factory | 1.2.0 | 1.4.2 | Pending deployment | -| OperatorFeeVault | 1.0.0 | 1.1.0 | Pending deployment | -| SchemaRegistry | 1.0.1 | 1.3.1-beta.2 | Pending deployment | -| EAS | 1.0.1 | 1.4.1-beta.3 | Pending deployment | -| L2CrossDomainMessenger | 1.4.0 | 2.2.0 | Pending deployment | -| L2StandardBridge | 1.1.0 | 1.13.0 | Pending deployment | -| OptimismMintableERC20Factory | 1.9.0 | 1.10.2 | Pending deployment | -| L2ERC721Bridge | 1.1.0 | 1.10.0 | Pending deployment | - -LegacyMigrator: Pending deployment. ProtocolVersions adds upgrade id 13. +| Target | Current version | New version | New implementation | Basescan verified source | +| --- | --- | --- | --- | --- | +| AggregateVerifier, game type 621 | 0.2.0 | 0.3.0 | Pending deployment | N/A (L1) | +| L2ToL1MessagePasser | 1.0.0 | 1.2.0 | Pending deployment | Pending deployment | +| L1Block | 1.7.0 | 1.8.0 | Pending deployment | Pending deployment | +| SequencerFeeVault | 1.3.0 | 1.6.0 | Pending deployment | Pending deployment | +| BaseFeeVault | 1.3.0 | 1.6.0 | Pending deployment | Pending deployment | +| L1FeeVault | 1.3.0 | 1.6.0 | Pending deployment | Pending deployment | +| OptimismMintableERC721Factory | 1.2.0 | 1.4.2 | Pending deployment | Pending deployment | +| OperatorFeeVault | 1.0.0 | 1.1.0 | Pending deployment | Pending deployment | +| SchemaRegistry | 1.0.1 | 1.3.1-beta.2 | Pending deployment | Pending deployment | +| EAS | 1.0.1 | 1.4.1-beta.3 | Pending deployment | Pending deployment | +| L2CrossDomainMessenger | 1.4.0 | 2.2.0 | Pending deployment | Pending deployment | +| L2StandardBridge | 1.1.0 | 1.13.0 | Pending deployment | Pending deployment | +| OptimismMintableERC20Factory | 1.9.0 | 1.10.2 | Pending deployment | Pending deployment | +| L2ERC721Bridge | 1.1.0 | 1.10.0 | Pending deployment | Pending deployment | + +LegacyMigrator: Pending deployment. Basescan verified source: Pending deployment. +ProtocolVersions adds upgrade id 13. BaseTime is excluded. Existing vault recipients and withdrawal networks are preserved. EAS delegated signatures must be signed again for domain version 1.3.0. The reproducible v1.5.2 prover hashes and their provenance are set in `.env`. -The facilitator must deploy the implementations and generate mainnet task-origin validations before signing. +Before signing, the facilitator must verify all thirteen L2 implementations and LegacyMigrator on Basescan, +fill in their verified-source links above, and generate mainnet task-origin validations. From the repository root: From 9639477e0fa319591a6d1023660866ad36dcb3a4 Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Mon, 26 Oct 2026 14:48:59 -0400 Subject: [PATCH 10/16] docs(mainnet): pass the verifier key to verify-l2 Co-authored-by: Toshi --- active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md b/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md index c8863c09..9f628941 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md +++ b/active/evm/tasks/2026-10-07-denim-upgrade/FACILITATOR.md @@ -97,12 +97,12 @@ Foundry project: ```bash make TASK_NETWORK=mainnet deploy-remaining-l2 -make TASK_NETWORK=mainnet verify-l2 +VERIFIER_API_KEY= make TASK_NETWORK=mainnet verify-l2 make TASK_NETWORK= simulate ``` On mainnet, all thirteen L2 implementations and LegacyMigrator must pass `verify-l2` on Basescan. -Fill in their verified-source links in `config//README.md` before generating validations +Fill in their verified-source links in `config/mainnet/README.md` before generating validations or signing. `verify-l2` waits for each result and stops on a missing address or failed verification. The extra deployments use 0.8.15 for factories and bridges, 0.8.19 for attestations, and 0.8.25 for From 79dfa58064f33b21549a3504ebe6ca1fcf36e723 Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Tue, 27 Oct 2026 14:54:16 -0400 Subject: [PATCH 11/16] chore(mainnet): add Denim deployment addresses and records --- .../config/mainnet/README.md | 32 +-- .../config/mainnet/addresses.json | 18 ++ .../8453/run-1793126594176.json | 96 ++++++++ .../8453/run-1793126554950.json | 225 ++++++++++++++++++ .../1/run-1793126330612.json | 58 +++++ .../8453/run-1793126519425.json | 114 +++++++++ .../8453/run-1793126466487.json | 183 ++++++++++++++ .../8453/run-1793126439373.json | 96 ++++++++ .../8453/run-1793126574963.json | 69 ++++++ 9 files changed, 875 insertions(+), 16 deletions(-) create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/addresses.json create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/records/DeployAttestations.s.sol/8453/run-1793126594176.json create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/records/DeployBridges.s.sol/8453/run-1793126554950.json create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/records/DeployDenimProofImpls.s.sol/1/run-1793126330612.json create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/records/DeployFactory.s.sol/8453/run-1793126519425.json create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/records/DeployFeeVaultImpls.s.sol/8453/run-1793126466487.json create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/records/DeployL2PredeployImpls.s.sol/8453/run-1793126439373.json create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/records/DeployOperatorFeeVault.s.sol/8453/run-1793126574963.json diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/README.md b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/README.md index 5bdfbd41..17357d3b 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/README.md +++ b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/README.md @@ -9,22 +9,22 @@ The Base multisig requires three member signatures. | Target | Current version | New version | New implementation | Basescan verified source | | --- | --- | --- | --- | --- | -| AggregateVerifier, game type 621 | 0.2.0 | 0.3.0 | Pending deployment | N/A (L1) | -| L2ToL1MessagePasser | 1.0.0 | 1.2.0 | Pending deployment | Pending deployment | -| L1Block | 1.7.0 | 1.8.0 | Pending deployment | Pending deployment | -| SequencerFeeVault | 1.3.0 | 1.6.0 | Pending deployment | Pending deployment | -| BaseFeeVault | 1.3.0 | 1.6.0 | Pending deployment | Pending deployment | -| L1FeeVault | 1.3.0 | 1.6.0 | Pending deployment | Pending deployment | -| OptimismMintableERC721Factory | 1.2.0 | 1.4.2 | Pending deployment | Pending deployment | -| OperatorFeeVault | 1.0.0 | 1.1.0 | Pending deployment | Pending deployment | -| SchemaRegistry | 1.0.1 | 1.3.1-beta.2 | Pending deployment | Pending deployment | -| EAS | 1.0.1 | 1.4.1-beta.3 | Pending deployment | Pending deployment | -| L2CrossDomainMessenger | 1.4.0 | 2.2.0 | Pending deployment | Pending deployment | -| L2StandardBridge | 1.1.0 | 1.13.0 | Pending deployment | Pending deployment | -| OptimismMintableERC20Factory | 1.9.0 | 1.10.2 | Pending deployment | Pending deployment | -| L2ERC721Bridge | 1.1.0 | 1.10.0 | Pending deployment | Pending deployment | - -LegacyMigrator: Pending deployment. Basescan verified source: Pending deployment. +| AggregateVerifier, game type 621 | 0.2.0 | 0.3.0 | [`0xc08b8fFAF04Abb1d7013B74a0E57Eccbd7fa5A70`](https://etherscan.io/address/0xc08b8fFAF04Abb1d7013B74a0E57Eccbd7fa5A70#code) | N/A (L1) | +| L2ToL1MessagePasser | 1.0.0 | 1.2.0 | `0xF729d45aA58A015835A745474D4bd18551C3A92c` | [Basescan](https://basescan.org/address/0xF729d45aA58A015835A745474D4bd18551C3A92c#code) | +| L1Block | 1.7.0 | 1.8.0 | `0x8BDE8F549F56D405f07e1aA15Df9e1FC69839881` | [Basescan](https://basescan.org/address/0x8BDE8F549F56D405f07e1aA15Df9e1FC69839881#code) | +| SequencerFeeVault | 1.3.0 | 1.6.0 | `0x31574645D1Cc22778e10b394BF3713beA4aa2B68` | [Basescan](https://basescan.org/address/0x31574645D1Cc22778e10b394BF3713beA4aa2B68#code) | +| BaseFeeVault | 1.3.0 | 1.6.0 | `0x113B0749737B06D94267fe59e935D38e13849deF` | [Basescan](https://basescan.org/address/0x113B0749737B06D94267fe59e935D38e13849deF#code) | +| L1FeeVault | 1.3.0 | 1.6.0 | `0x93759deE9D2100Ca0a0e3EA10A0e5Cc5f07b229B` | [Basescan](https://basescan.org/address/0x93759deE9D2100Ca0a0e3EA10A0e5Cc5f07b229B#code) | +| OptimismMintableERC721Factory | 1.2.0 | 1.4.2 | `0x6e4f4f3E193880339c79605F88a2CD15370C8e02` | [Basescan](https://basescan.org/address/0x6e4f4f3E193880339c79605F88a2CD15370C8e02#code) | +| OperatorFeeVault | 1.0.0 | 1.1.0 | `0x47B6C3e3C3d8144c83910D26E3b517DF4f6058c7` | [Basescan](https://basescan.org/address/0x47B6C3e3C3d8144c83910D26E3b517DF4f6058c7#code) | +| SchemaRegistry | 1.0.1 | 1.3.1-beta.2 | `0xA88AB4351cC11acd42Ca148cd98Cfd91294Aa7BD` | [Basescan](https://basescan.org/address/0xA88AB4351cC11acd42Ca148cd98Cfd91294Aa7BD#code) | +| EAS | 1.0.1 | 1.4.1-beta.3 | `0xb6288DE3f61E3aCfAf4f1b0923656e2ab78C1Ad4` | [Basescan](https://basescan.org/address/0xb6288DE3f61E3aCfAf4f1b0923656e2ab78C1Ad4#code) | +| L2CrossDomainMessenger | 1.4.0 | 2.2.0 | `0xFe016829CbD44B469a4Bb76Ed95343A9458DCbA6` | [Basescan](https://basescan.org/address/0xFe016829CbD44B469a4Bb76Ed95343A9458DCbA6#code) | +| L2StandardBridge | 1.1.0 | 1.13.0 | `0xff312C3496f0848CD94d71dC06C434D487A46a10` | [Basescan](https://basescan.org/address/0xff312C3496f0848CD94d71dC06C434D487A46a10#code) | +| OptimismMintableERC20Factory | 1.9.0 | 1.10.2 | `0x87481a9CBf0aABf9a5f92838F51D9Ca635a33878` | [Basescan](https://basescan.org/address/0x87481a9CBf0aABf9a5f92838F51D9Ca635a33878#code) | +| L2ERC721Bridge | 1.1.0 | 1.10.0 | `0x6cf5489360C17e648d9009c74019699aa716d60c` | [Basescan](https://basescan.org/address/0x6cf5489360C17e648d9009c74019699aa716d60c#code) | + +LegacyMigrator: `0x690D24732FB1Ed4869dCA5Cd2820FE54272aad09`. Basescan verified source: [Basescan](https://basescan.org/address/0x690D24732FB1Ed4869dCA5Cd2820FE54272aad09#code). ProtocolVersions adds upgrade id 13. BaseTime is excluded. Existing vault recipients and withdrawal networks are preserved. EAS delegated signatures must be signed again for domain version 1.3.0. diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/addresses.json b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/addresses.json new file mode 100644 index 00000000..2dd0c8e2 --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/addresses.json @@ -0,0 +1,18 @@ +{ + "aggregateVerifier": "0xc08b8fFAF04Abb1d7013B74a0E57Eccbd7fa5A70", + "aggregateVerifierConstructorArgs": "0x000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000909f6cf47ed12f010a796527f562bfc26c7f4e72000000000000000000000000d0d07924add740a87e41ca8a0d4cbbf6b074ef710000000000000000000000001fba0c57b07af804a9717e51dec9cc27fbc12228000000000000000000000000b88d95bdf6972508942d184866890c1834219b7573181275ec86503b629510176b5bedec00309060b3f4ff5d8e55d9e83dad5cbd3d3713d31a8936563bc56791040067131bb3fa3c0ab8b5e65e9c4cc0755b5fdb00d5a43068d7a9d1eac440a790b776c749ae6516c43f1a572226190cef6fd45a1607709d90d40904f790574404e2ad614eac858f6162faa0ec34c6bf5e5f3c5700000000000000000000000000000000000000000000000000000000000021050000000000000000000000000000000000000000000000000000000000000258000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000001770000000000000000000000000000000000000000000000000000000000000012c0000000000000000000000007480afc8d99a5c645c247db5a1e4a4f440e6e095000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000648a5ce30000000000000000000000000000000000000000000000000000000000000002", + "l2ToL1MessagePasser": "0xF729d45aA58A015835A745474D4bd18551C3A92c", + "l1Block": "0x8BDE8F549F56D405f07e1aA15Df9e1FC69839881", + "sequencerFeeVault": "0x31574645D1Cc22778e10b394BF3713beA4aa2B68", + "baseFeeVault": "0x113B0749737B06D94267fe59e935D38e13849deF", + "l1FeeVault": "0x93759deE9D2100Ca0a0e3EA10A0e5Cc5f07b229B", + "optimismMintableERC20Factory": "0x87481a9CBf0aABf9a5f92838F51D9Ca635a33878", + "optimismMintableERC721Factory": "0x6e4f4f3E193880339c79605F88a2CD15370C8e02", + "l2CrossDomainMessenger": "0xFe016829CbD44B469a4Bb76Ed95343A9458DCbA6", + "l2StandardBridge": "0xff312C3496f0848CD94d71dC06C434D487A46a10", + "l2ERC721Bridge": "0x6cf5489360C17e648d9009c74019699aa716d60c", + "legacyMigrator": "0x690D24732FB1Ed4869dCA5Cd2820FE54272aad09", + "operatorFeeVault": "0x47B6C3e3C3d8144c83910D26E3b517DF4f6058c7", + "schemaRegistry": "0xA88AB4351cC11acd42Ca148cd98Cfd91294Aa7BD", + "eas": "0xb6288DE3f61E3aCfAf4f1b0923656e2ab78C1Ad4" +} \ No newline at end of file diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/records/DeployAttestations.s.sol/8453/run-1793126594176.json b/active/evm/tasks/2026-10-07-denim-upgrade/records/DeployAttestations.s.sol/8453/run-1793126594176.json new file mode 100644 index 00000000..5b53880a --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/records/DeployAttestations.s.sol/8453/run-1793126594176.json @@ -0,0 +1,96 @@ +{ + "transactions": [ + { + "hash": "0xe11fccf787e62eb65a7f4d2844941fc1d5821552e5c56a683587c7a8f6173a28", + "transactionType": "CREATE", + "contractName": "SchemaRegistry", + "contractAddress": "0xa88ab4351cc11acd42ca148cd98cfd91294aa7bd", + "function": null, + "arguments": null, + "transaction": { + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "gas": "0x9c879", + "value": "0x0", + "input": "0x608060405234801561001057600080fd5b506107fe806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610098578063a2ea7c6e146100b9575b600080fd5b6100826040518060400160405280600c81526020017f312e332e312d626574612e32000000000000000000000000000000000000000081525081565b60405161008f9190610473565b60405180910390f35b6100ab6100a636600461048d565b6100d9565b60405190815260200161008f565b6100cc6100c736600461053f565b61029d565b60405161008f9190610558565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250929350915061015b9050826103c5565b600081815260208190526040902054909150156101a4576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102409082610682565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e8460405161028b9190610558565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff1615159282019290925260028201805491929160608401919061033c906105e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610368906105e0565b80156103b55780601f1061038a576101008083540402835291602001916103b5565b820191906000526020600020905b81548152906001019060200180831161039857829003601f168201915b5050505050815250509050919050565b60008160600151826020015183604001516040516020016103e89392919061079c565b604051602081830303815290604052805190602001209050919050565b60005b83811015610420578181015183820152602001610408565b50506000910152565b60008151808452610441816020860160208601610405565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006104866020830184610429565b9392505050565b600080600080606085870312156104a357600080fd5b843567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461051f57600080fd5b91506040850135801515811461053457600080fd5b939692955090935050565b60006020828403121561055157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526105a960a0840182610429565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c908216806105f457607f821691505b60208210810361062d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561067d57600081815260208120601f850160051c8101602086101561065a5750805b601f850160051c820191505b8181101561067957828155600101610666565b5050505b505050565b815167ffffffffffffffff81111561069c5761069c6105b1565b6106b0816106aa84546105e0565b84610633565b602080601f83116001811461070357600084156106cd5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610679565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561075057888601518255948401946001909101908401610731565b508582101561078c57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600084516107ae818460208901610405565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a", + "nonce": "0x28", + "chainId": "0x2105" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x530fa028dbabdceba565f7bddfb7b22e8e0580be03a861d7c7e78eb864b87721", + "transactionType": "CREATE", + "contractName": "EAS", + "contractAddress": "0xb6288de3f61e3acfaf4f1b0923656e2ab78c1ad4", + "function": null, + "arguments": null, + "transaction": { + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "gas": "0x4cf2bc", + "value": "0x0", + "input": "0x61016060405234801561001157600080fd5b50604080518082018252600381526245415360e81b60208083019182528351808501855260058152640312e332e360dc1b908201529151812060e08190527f6a08c3e203132c561752255a4d52ffae85bb9c5d33cb3291520dea1b843563896101008190524660a081815286517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818801819052818901959095526060810193909352608080840192909252308382018190528751808503909201825260c093840190975280519501949094209093529290915261012091909152516101405260805160a05160c05160e05161010051610120516101405161457e61014b600039600061073701526000612784015260006127d3015260006127ae01526000612707015260006127310152600061275b015261457e6000f3fe60806040526004361061018b5760003560e01c806395411525116100d6578063d45c44351161007f578063ed24911d11610059578063ed24911d146104fd578063f10b5cc814610512578063f17325e71461054157600080fd5b8063d45c443514610467578063e30bb5631461049e578063e71ff365146104dd57600080fd5b8063b469318d116100b0578063b469318d146103ba578063b83010d314610414578063cf190f341461044757600080fd5b80639541152514610367578063a3112a641461037a578063a6d4dbc7146103a757600080fd5b806344adc90e116101385780634d003070116101125780634d003070146102de57806354fd4d50146102fe57806379f7573a1461034757600080fd5b806344adc90e1461029857806346926267146102b85780634cb7e9e5146102cb57600080fd5b806317d7de7c1161016957806317d7de7c146102205780632d0335ab146102425780633c0427151461028557600080fd5b80630eabf6601461019057806312b11a17146101a557806313893f61146101e7575b600080fd5b6101a361019e3660046134c8565b610554565b005b3480156101b157600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101f357600080fd5b506102076102023660046134c8565b6106eb565b60405167ffffffffffffffff90911681526020016101de565b34801561022c57600080fd5b50610235610730565b6040516101de9190613578565b34801561024e57600080fd5b506101d461025d3660046135bd565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101d46102933660046135da565b610760565b6102ab6102a63660046134c8565b610863565b6040516101de9190613615565b6101a36102c6366004613659565b6109e4565b6101a36102d93660046134c8565b610a68565b3480156102ea57600080fd5b506102076102f9366004613671565b610b4b565b34801561030a57600080fd5b506102356040518060400160405280600c81526020017f312e342e312d626574612e33000000000000000000000000000000000000000081525081565b34801561035357600080fd5b506101a3610362366004613671565b610b58565b6102ab6103753660046134c8565b610bef565b34801561038657600080fd5b5061039a610395366004613671565b610e62565b6040516101de9190613771565b6101a36103b5366004613784565b611025565b3480156103c657600080fd5b506102076103d5366004613797565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152603460209081526040808320938352929052205467ffffffffffffffff1690565b34801561042057600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101d4565b34801561045357600080fd5b50610207610462366004613671565b6110ca565b34801561047357600080fd5b50610207610482366004613671565b60009081526033602052604090205467ffffffffffffffff1690565b3480156104aa57600080fd5b506104cd6104b9366004613671565b600090815260326020526040902054151590565b60405190151581526020016101de565b3480156104e957600080fd5b506102076104f83660046134c8565b6110d8565b34801561050957600080fd5b506101d4611110565b34801561051e57600080fd5b5060405173420000000000000000000000000000000000002081526020016101de565b6101d461054f3660046137c3565b61111a565b348160005b818110156106e4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82018114600086868481811061059a5761059a6137fe565b90506020028101906105ac919061382d565b6105b590613ac3565b60208101518051919250908015806105d257508260400151518114155b15610609576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ad576106a56040518060a001604052808660000151815260200185848151811061063e5761063e6137fe565b6020026020010151815260200186604001518481518110610661576106616137fe565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506111d8565b60010161060c565b506106c383600001518385606001518a886113e9565b6106cd9088613bed565b9650505050506106dd8160010190565b9050610559565b5050505050565b60004282825b818110156107245761071c3387878481811061070f5761070f6137fe565b9050602002013585611a18565b6001016106f1565b50909150505b92915050565b606061075b7f0000000000000000000000000000000000000000000000000000000000000000611b17565b905090565b600061077361076e83613d22565b611ca5565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161078a5790505090506107f86020840184613d9d565b61080190613dd1565b81600081518110610814576108146137fe565b602090810291909101015261083d83358261083560c0870160a088016135bd565b346001611e2f565b60200151600081518110610853576108536137fe565b6020026020010151915050919050565b60608160008167ffffffffffffffff8111156108815761088161386b565b6040519080825280602002602001820160405280156108b457816020015b606081526020019060019003908161089f5790505b509050600034815b848110156109ce577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85018114368989848181106108fc576108fc6137fe565b905060200281019061090e9190613ddd565b905061091d6020820182613e11565b9050600003610958576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061097d823561096c6020850185613e11565b61097591613e79565b338887611e2f565b805190915061098c9086613bed565b945080602001518785815181106109a5576109a56137fe565b6020026020010181905250806020015151860195505050506109c78160010190565b90506108bc565b506109d98383612541565b979650505050505050565b604080516001808252818301909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816109fb579050509050610a3636839003830160208401613eed565b81600081518110610a4957610a496137fe565b6020908102919091010152610a63823582333460016113e9565b505050565b348160005b818110156106e4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610aad57610aad6137fe565b9050602002810190610abf9190613ddd565b9050610b2c8135610ad36020840184613f09565b808060200260200160405190810160405280939291908181526020016000905b82821015610b1f57610b1060408302860136819003810190613eed565b81526020019060010190610af3565b50505050503388866113e9565b610b369086613bed565b94505050610b448160010190565b9050610a6d565b60004261072a838261262b565b33600090815260208190526040902054808211610ba1576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152602081815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b60608160008167ffffffffffffffff811115610c0d57610c0d61386b565b604051908082528060200260200182016040528015610c4057816020015b6060815260200190600190039081610c2b5790505b509050600034815b848110156109ce577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610c8857610c886137fe565b9050602002810190610c9a919061382d565b9050366000610cac6020840184613e11565b909250905080801580610ccd5750610cc76040850185613f71565b90508114155b15610d04576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610de557610ddd6040518060a0016040528087600001358152602001868685818110610d3957610d396137fe565b9050602002810190610d4b9190613d9d565b610d5490613dd1565b8152602001610d666040890189613f71565b85818110610d7657610d766137fe565b905060600201803603810190610d8c9190613fd8565b8152602001610da16080890160608a016135bd565b73ffffffffffffffffffffffffffffffffffffffff168152602001610dcc60a0890160808a01613ff4565b67ffffffffffffffff169052611ca5565b600101610d07565b506000610e0e8535610df78587613e79565b610e076080890160608a016135bd565b8b8a611e2f565b8051909150610e1d9089613bed565b975080602001518a8881518110610e3657610e366137fe565b602002602001018190525080602001515189019850505050505050610e5b8160010190565b9050610c48565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526032602090815260409182902082516101408101845281548152600182015492810192909252600281015467ffffffffffffffff808216948401949094526801000000000000000081048416606084015270010000000000000000000000000000000090049092166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff16151561010082015260068201805491929161012084019190610f9c9061400f565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc89061400f565b80156110155780601f10610fea57610100808354040283529160200191611015565b820191906000526020600020905b815481529060010190602001808311610ff857829003601f168201915b5050505050815250509050919050565b61103c6110373683900383018361405c565b6111d8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161105357905050905061108e36839003830160208401613eed565b816000815181106110a1576110a16137fe565b6020908102919091010152610a638235826110c260e0860160c087016135bd565b3460016113e9565b60004261072a338483611a18565b60004282825b81811015610724576111088686838181106110fb576110fb6137fe565b905060200201358461262b565b6001016110de565b600061075b6126ed565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816111345790505090506111a26020840184613d9d565b6111ab90613dd1565b816000815181106111be576111be6137fe565b602090810291909101015261083d83358233346001611e2f565b608081015167ffffffffffffffff161580159061120c57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611243576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff84166000908152978890529487208054969794969495611337957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e7595949392886112ba836140ca565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612821565b90506113ad84606001518284602001518560400151866000015160405160200161139993929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612834565b6113e3576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e0000000000000000000000000000000000000000000000000000000081526004810186905260009081907342000000000000000000000000000000000000209063a2ea7c6e90602401600060405180830381865afa158015611457573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261149d9190810190614102565b80519091506114d8576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156114f5576114f561386b565b60405190808252806020026020018201604052801561159457816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816115135790505b50905060008267ffffffffffffffff8111156115b2576115b261386b565b6040519080825280602002602001820160405280156115db578160200160208202803683370190505b50905060005b838110156119fa5760008a82815181106115fd576115fd6137fe565b6020908102919091018101518051600090815260329092526040909120805491925090611656576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611693576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146116e9576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff1661173f576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff1615611799576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff16151561010082015260068201805483916101208401916118a59061400f565b80601f01602080910402602001604051908101604052809291908181526020018280546118d19061400f565b801561191e5780601f106118f35761010080835404028352916020019161191e565b820191906000526020600020905b81548152906001019060200180831161190157829003601f168201915b505050505081525050858481518110611939576119396137fe565b6020026020010181905250816020015184848151811061195b5761195b6137fe565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611991576119916137fe565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f61585600001516040516119e891815260200190565b60405180910390a450506001016115e1565b50611a0a84838360018b8b612a03565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603460209081526040808320858452918290529091205467ffffffffffffffff1615611a8c576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b604080516020808252818301909252606091600091906020820181803683370190505090506000805b6020811015611be2576000858260208110611b5d57611b5d6137fe565b1a60f81b90507fff000000000000000000000000000000000000000000000000000000000000008116600003611b935750611be2565b80848481518110611ba657611ba66137fe565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060019182019101611b40565b5060008167ffffffffffffffff811115611bfe57611bfe61386b565b6040519080825280601f01601f191660200182016040528015611c28576020820181803683370190505b50905060005b82811015611c9c57838181518110611c4857611c486137fe565b602001015160f81c60f81b828281518110611c6557611c656137fe565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101611c2e565b50949350505050565b608081015167ffffffffffffffff1615801590611cd957504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d10576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081529b8c9052988b2080549a9b989a9899611337997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611da0836140ca565b919050558e6080015160405160200161131c9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611e7457611e7461386b565b604051908082528060200260200182016040528015611e9d578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907342000000000000000000000000000000000000209063a2ea7c6e90602401600060405180830381865afa158015611f0f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611f559190810190614102565b8051909150611f90576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff811115611fab57611fab61386b565b60405190808252806020026020018201604052801561204a57816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181611fc95790505b50905060008467ffffffffffffffff8111156120685761206861386b565b604051908082528060200260200182016040528015612091578160200160208202803683370190505b50905060005b858110156125205760008b82815181106120b3576120b36137fe565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff16141580156120fe57504267ffffffffffffffff16816020015167ffffffffffffffff1611155b15612135576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460400151158015612148575080604001515b1561217f576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f81526020016121a34290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b6122458382612df4565b600081815260326020526040902054909250156122645760010161223b565b81835260008281526032602090815260409182902085518155908501516001820155908401516002820180546060870151608088015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0840151600382015560c084015160048201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff000000000000000000000000000000000000000000909116929093169190911791909117905561012084015184919060068201906123e49082614228565b50505060608401511561243b57606084015160009081526032602052604090205461243b576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8287868151811061244e5761244e6137fe565b60200260200101819052508360a00151868681518110612470576124706137fe565b6020026020010181815250508189602001518681518110612493576124936137fe565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161250391815260200190565b60405180910390a4505050506125198160010190565b9050612097565b5061253083838360008c8c612a03565b845250919998505050505050505050565b606060008267ffffffffffffffff81111561255e5761255e61386b565b604051908082528060200260200182016040528015612587578160200160208202803683370190505b508451909150600090815b818110156126205760008782815181106125ae576125ae6137fe565b6020026020010151905060008151905060005b8181101561260c578281815181106125db576125db6137fe565b60200260200101518787815181106125f5576125f56137fe565b6020908102919091010152600195860195016125c1565b5050506126198160010190565b9050612592565b509195945050505050565b60008281526033602052604090205467ffffffffffffffff161561267b576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526033602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561275357507f000000000000000000000000000000000000000000000000000000000000000046145b1561277d57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600061072a61282e6126ed565b83612e53565b60008060006128438585612e95565b9092509050600081600481111561285c5761285c614342565b14801561289457508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156128a4576001925050506129fc565b6000808773ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b88886040516024016128d9929190614371565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516129629190614392565b600060405180830381855afa9150503d806000811461299d576040519150601f19603f3d011682016040523d82523d6000602084013e6129a2565b606091505b50915091508180156129b5575080516020145b80156129f5575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906129f390830160209081019084016143a4565b145b9450505050505b9392505050565b84516000906001819003612a5b57612a538888600081518110612a2857612a286137fe565b602002602001015188600081518110612a4357612a436137fe565b6020026020010151888888612eda565b915050612dea565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612afc5760005b82811015612ae157878181518110612a9857612a986137fe565b6020026020010151600014612ad9576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612a7e565b508315612af157612af1856131f9565b600092505050612dea565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6e91906143bd565b905060005b84811015612c2b5760008a8281518110612b8f57612b8f6137fe565b6020026020010151905080600003612ba75750612c23565b82612bde576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612c18576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612b73565b508715612d06576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612c88908e908e906004016143da565b60206040518083038185885af1158015612ca6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ccb91906143bd565b612d01576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd5565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612d5c908e908e906004016143da565b60206040518083038185885af1158015612d7a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d9f91906143bd565b612dd5576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612de457612de4876131f9565b50925050505b9695505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612e3599989796918c9101614493565b60405160208183030381529060405280519060200120905092915050565b6040517f190100000000000000000000000000000000000000000000000000000000000060208201526022810183905260428101829052600090606201612e35565b6000808251604103612ecb5760208301516040840151606085015160001a612ebf8782858561320c565b94509450505050612ed3565b506000905060025b9250929050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff8116612f4e578515612f35576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8215612f4457612f44846131f9565b6000915050612dea565b8515613039578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc391906143bd565b612ff9576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613033576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b8415613111576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e1908890613093908b90600401613771565b60206040518083038185885af11580156130b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130d691906143bd565b61310c576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131de565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613165908b90600401613771565b60206040518083038185885af1158015613183573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131a891906143bd565b6131de576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156131ed576131ed846131f9565b50939695505050505050565b8015613209576132093382613324565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613243575060009050600361331b565b8460ff16601b1415801561325b57508460ff16601c14155b1561326c575060009050600461331b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156132c0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166133145760006001925092505061331b565b9150600090505b94509492505050565b80471015613393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146133ed576040519150601f19603f3d011682016040523d82523d6000602084013e6133f2565b606091505b5050905080610a63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161338a565b60008083601f84011261349557600080fd5b50813567ffffffffffffffff8111156134ad57600080fd5b6020830191508360208260051b8501011115612ed357600080fd5b600080602083850312156134db57600080fd5b823567ffffffffffffffff8111156134f257600080fd5b6134fe85828601613483565b90969095509350505050565b60005b8381101561352557818101518382015260200161350d565b50506000910152565b6000815180845261354681602086016020860161350a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129fc602083018461352e565b73ffffffffffffffffffffffffffffffffffffffff8116811461320957600080fd5b80356135b88161358b565b919050565b6000602082840312156135cf57600080fd5b81356129fc8161358b565b6000602082840312156135ec57600080fd5b813567ffffffffffffffff81111561360357600080fd5b820160e081850312156129fc57600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561364d57835183529284019291840191600101613631565b50909695505050505050565b60006060828403121561366b57600080fd5b50919050565b60006020828403121561368357600080fd5b5035919050565b6000610140825184526020830151602085015260408301516136b8604086018267ffffffffffffffff169052565b5060608301516136d4606086018267ffffffffffffffff169052565b5060808301516136f0608086018267ffffffffffffffff169052565b5060a083015160a085015260c083015161372260c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e083015161374a60e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612dea8387018261352e565b6020815260006129fc602083018461368a565b6000610100828403121561366b57600080fd5b600080604083850312156137aa57600080fd5b82356137b58161358b565b946020939093013593505050565b6000602082840312156137d557600080fd5b813567ffffffffffffffff8111156137ec57600080fd5b8201604081850312156129fc57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6183360301811261386157600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156138bd576138bd61386b565b60405290565b60405160c0810167ffffffffffffffff811182821017156138bd576138bd61386b565b6040516080810167ffffffffffffffff811182821017156138bd576138bd61386b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156139505761395061386b565b604052919050565b600067ffffffffffffffff8211156139725761397261386b565b5060051b60200190565b60006040828403121561398e57600080fd5b6040516040810181811067ffffffffffffffff821117156139b1576139b161386b565b604052823581526020928301359281019290925250919050565b6000606082840312156139dd57600080fd5b6040516060810181811067ffffffffffffffff82111715613a0057613a0061386b565b604052905080823560ff81168114613a1757600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613a4757600080fd5b81356020613a5c613a5783613958565b613909565b82815260609283028501820192828201919087851115613a7b57600080fd5b8387015b85811015613a9e57613a9189826139cb565b8452928401928101613a7f565b5090979650505050505050565b803567ffffffffffffffff811681146135b857600080fd5b600060a08236031215613ad557600080fd5b613add61389a565b8235815260208084013567ffffffffffffffff80821115613afd57600080fd5b9085019036601f830112613b1057600080fd5b8135613b1e613a5782613958565b81815260069190911b83018401908481019036831115613b3d57600080fd5b938501935b82851015613b6657613b54368661397c565b82528582019150604085019450613b42565b80868801525050506040860135925080831115613b8257600080fd5b5050613b9036828601613a36565b604083015250613ba2606084016135ad565b6060820152613bb360808401613aab565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561072a5761072a613bbe565b801515811461320957600080fd5b600067ffffffffffffffff821115613c2857613c2861386b565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c08284031215613c6657600080fd5b613c6e6138c3565b90508135613c7b8161358b565b81526020613c8a838201613aab565b818301526040830135613c9c81613c00565b604083015260608381013590830152608083013567ffffffffffffffff811115613cc557600080fd5b8301601f81018513613cd657600080fd5b8035613ce4613a5782613c0e565b8181528684838501011115613cf857600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e08236031215613d3457600080fd5b613d3c61389a565b82358152602083013567ffffffffffffffff811115613d5a57600080fd5b613d6636828601613c54565b602083015250613d7936604085016139cb565b604082015260a0830135613d8c8161358b565b6060820152613bb360c08401613aab565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4183360301811261386157600080fd5b600061072a3683613c54565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261386157600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613e4657600080fd5b83018035915067ffffffffffffffff821115613e6157600080fd5b6020019150600581901b3603821315612ed357600080fd5b6000613e87613a5784613958565b80848252602080830192508560051b850136811115613ea557600080fd5b855b81811015613ee157803567ffffffffffffffff811115613ec75760008081fd5b613ed336828a01613c54565b865250938201938201613ea7565b50919695505050505050565b600060408284031215613eff57600080fd5b6129fc838361397c565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f3e57600080fd5b83018035915067ffffffffffffffff821115613f5957600080fd5b6020019150600681901b3603821315612ed357600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613fa657600080fd5b83018035915067ffffffffffffffff821115613fc157600080fd5b6020019150606081023603821315612ed357600080fd5b600060608284031215613fea57600080fd5b6129fc83836139cb565b60006020828403121561400657600080fd5b6129fc82613aab565b600181811c9082168061402357607f821691505b60208210810361366b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000610100828403121561406f57600080fd5b61407761389a565b82358152614088846020850161397c565b602082015261409a84606085016139cb565b604082015260c08301356140ad8161358b565b60608201526140be60e08401613aab565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036140fb576140fb613bbe565b5060010190565b6000602080838503121561411557600080fd5b825167ffffffffffffffff8082111561412d57600080fd5b908401906080828703121561414157600080fd5b6141496138e6565b825181528383015161415a8161358b565b81850152604083015161416c81613c00565b604082015260608301518281111561418357600080fd5b80840193505086601f84011261419857600080fd5b825191506141a8613a5783613c0e565b82815287858486010111156141bc57600080fd5b6141cb8386830187870161350a565b60608201529695505050505050565b601f821115610a6357600081815260208120601f850160051c810160208610156142015750805b601f850160051c820191505b818110156142205782815560010161420d565b505050505050565b815167ffffffffffffffff8111156142425761424261386b565b61425681614250845461400f565b846141da565b602080601f8311600181146142a957600084156142735750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614220565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156142f6578886015182559484019460019091019084016142d7565b508582101561433257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b82815260406020820152600061438a604083018461352e565b949350505050565b6000825161386181846020870161350a565b6000602082840312156143b657600080fd5b5051919050565b6000602082840312156143cf57600080fd5b81516129fc81613c00565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561444f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa088870301855261443d86835161368a565b95509382019390820190600101614403565b50508584038187015286518085528782019482019350915060005b828110156144865784518452938101939281019260010161446a565b5091979650505050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b6058830152846059830152835161452c81607985016020880161350a565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a995050505050505050505056fea164736f6c6343000813000a", + "nonce": "0x29", + "chainId": "0x2105" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1c68c7e", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xe11fccf787e62eb65a7f4d2844941fc1d5821552e5c56a683587c7a8f6173a28", + "transactionIndex": "0x8a", + "blockHash": "0x8bdfbb809d82fa86711ee300b91c0f5c28a50537dbc5fd7a97e63f54dffb65bc", + "blockNumber": "0x32b49ec", + "gasUsed": "0x78685", + "effectiveGasPrice": "0x5b8d80", + "blobGasUsed": "0x2da2c", + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "to": null, + "contractAddress": "0xa88ab4351cc11acd42ca148cd98cfd91294aa7bd", + "daFootprintGasScalar": "0x94", + "l1BaseFeeScalar": "0x8dd", + "l1BlobBaseFee": "0x611a30", + "l1BlobBaseFeeScalar": "0x101c12", + "l1Fee": "0x36cd4acf9", + "l1GasPrice": "0x816ec74", + "l1GasUsed": "0x4ef3" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x18b5fd2", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x530fa028dbabdceba565f7bddfb7b22e8e0580be03a861d7c7e78eb864b87721", + "transactionIndex": "0x80", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockNumber": "0x32b49f0", + "gasUsed": "0x3b30e0", + "effectiveGasPrice": "0x5b8d80", + "blobGasUsed": "0x1288ac", + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "to": null, + "contractAddress": "0xb6288de3f61e3acfaf4f1b0923656e2ab78c1ad4", + "daFootprintGasScalar": "0x94", + "l1BaseFeeScalar": "0x8dd", + "l1BlobBaseFee": "0x611a30", + "l1BlobBaseFeeScalar": "0x101c12", + "l1Fee": "0x4569f8f6", + "l1GasPrice": "0x816ec74", + "l1GasUsed": "0x200fd" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1793126594176, + "chain": 8453, + "commit": "9639477" +} \ No newline at end of file diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/records/DeployBridges.s.sol/8453/run-1793126554950.json b/active/evm/tasks/2026-10-07-denim-upgrade/records/DeployBridges.s.sol/8453/run-1793126554950.json new file mode 100644 index 00000000..96a89df1 --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/records/DeployBridges.s.sol/8453/run-1793126554950.json @@ -0,0 +1,225 @@ +{ + "transactions": [ + { + "hash": "0x622eec94fd64715562d4f5e10d10fb688878767fd5658684ffccfbcd172bf901", + "transactionType": "CREATE", + "contractName": "L2CrossDomainMessenger", + "contractAddress": "0xfe016829cbd44b469a4bb76ed95343a9458dcba6", + "function": null, + "arguments": null, + "transaction": { + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "gas": "0x226cdb", + "value": "0x0", + "input": "0x608060405234801561001057600080fd5b5061001961001e565b6100eb565b600054600160a81b900460ff161561008c5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff600160a01b909104811610156100e9576000805460ff60a01b191660ff60a01b17905560405160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611e2b806100fa6000396000f3fe60806040526004361061018b5760003560e01c80638cbeeef2116100d6578063c4d66de81161007f578063ddd5a40f11610059578063ddd5a40f1461043e578063e46e245a14610454578063ecc704281461046957600080fd5b8063c4d66de8146103de578063d764ad0b146103fe578063db505d801461041157600080fd5b8063a7119869116100b0578063a711986914610333578063b1b1b2091461038e578063b28ade25146103be57600080fd5b80638cbeeef2146102405780639fce812c14610333578063a4e7f8bd1461035e57600080fd5b80634c1d6a69116101385780635c975abb116101125780635c975abb146102c25780636e296e45146102e257806383a740741461031c57600080fd5b80634c1d6a691461024057806354fd4d50146102565780635644cfdf146102ac57600080fd5b80632f7d3922116101695780632f7d3922146101ed5780633dbb202b146102035780633f827a5a1461021857600080fd5b8063028f85f7146101905780630c568498146101c35780632828d7e8146101d8575b600080fd5b34801561019c57600080fd5b506101a5601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101cf57600080fd5b506101a5603f81565b3480156101e457600080fd5b506101a5604081565b3480156101f957600080fd5b506101a561520881565b610216610211366004611861565b6104ce565b005b34801561022457600080fd5b5061022d600181565b60405161ffff90911681526020016101ba565b34801561024c57600080fd5b506101a5619c4081565b34801561026257600080fd5b5061029f6040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516101ba9190611933565b3480156102b857600080fd5b506101a561138881565b3480156102ce57600080fd5b5060005b60405190151581526020016101ba565b3480156102ee57600080fd5b506102f7610761565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ba565b34801561032857600080fd5b506101a562030d4081565b34801561033f57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166102f7565b34801561036a57600080fd5b506102d2610379366004611946565b60ce6020526000908152604090205460ff1681565b34801561039a57600080fd5b506102d26103a9366004611946565b60cb6020526000908152604090205460ff1681565b3480156103ca57600080fd5b506101a56103d936600461198e565b61084d565b3480156103ea57600080fd5b506102166103f9366004611a6e565b61090e565b61021661040c366004611a8b565b610b0d565b34801561041d57600080fd5b5060cf546102f79073ffffffffffffffffffffffffffffffffffffffff1681565b34801561044a57600080fd5b506101a561010481565b34801561046057600080fd5b506101a5602881565b34801561047557600080fd5b506104c060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101ba565b60cf54604080516020601f86018190048102820181019092528481526106369273ffffffffffffffffffffffffffffffffffffffff169161052c9190879087908190840183828082843760009201919091525087925061084d915050565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061059860cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016105b49796959493929190611b5a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526113f2565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856106bb60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516106cd959493929190611bb9565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b600080603f610863604063ffffffff8616611c36565b61086d9190611c66565b611388619c406108808162030d40611cb4565b61088a9190611cb4565b6108949190611cb4565b61089e9190611cb4565b9050600061010467ffffffffffffffff1685516108bb9190611ce0565b90506108f96108cb601083611c36565b6108d59084611cb4565b67ffffffffffffffff166108ea602884611c36565b67ffffffffffffffff16611480565b61090590615208611cb4565b95945050505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610959575060005460017401000000000000000000000000000000000000000090910460ff16105b8061098b5750303b15801561098b575060005474010000000000000000000000000000000000000000900460ff166001145b610a17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610827565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610a9d57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b610aa682611499565b8015610b0957600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60f087901c60028110610bc8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610827565b8061ffff16600003610cbd576000610c19878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506115d5915050565b600081815260cb602052604090205490915060ff1615610cbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610827565b505b6000610d03898989898989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115f492505050565b9050610d4c60cf54337fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef0173ffffffffffffffffffffffffffffffffffffffff90811691161490565b15610d8457853414610d6057610d60611cf8565b600081815260ce602052604090205460ff1615610d7f57610d7f611cf8565b610ed6565b3415610e38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610827565b600081815260ce602052604090205460ff16610ed6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610827565b610edf87611617565b15610f92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610827565b600081815260cb602052604090205460ff1615611031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610827565b61105285611043611388619c40611cb4565b67ffffffffffffffff1661166c565b1580611078575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561119157600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610827565b50506113e9565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061122288619c405a6111e59190611d27565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061168a92505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156112d857600082815260cb602052604090205460ff161561127557611275611cf8565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26113e5565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016113e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610827565b5050505b50505050505050565b6040517fc2b3e5ac0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000169063c2b3e5ac90849061144890889088908790600401611d3e565b6000604051808303818588803b15801561146157600080fd5b505af1158015611475573d6000803e3d6000fd5b505050505050505050565b6000818310156114905781611492565b825b9392505050565b6000547501000000000000000000000000000000000000000000900460ff16611544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610827565b60cc5473ffffffffffffffffffffffffffffffffffffffff1661158e5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006115e3858585856116a2565b805190602001209050949350505050565b600061160487878787878761173b565b8051906020012090509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611666575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000016145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000806000835160208501868989f195945050505050565b6060848484846040516024016116bb9493929190611d7d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606086868686868660405160240161175896959493929190611dc7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146117fc57600080fd5b50565b60008083601f84011261181157600080fd5b50813567ffffffffffffffff81111561182957600080fd5b60208301915083602082850101111561184157600080fd5b9250929050565b803563ffffffff8116811461185c57600080fd5b919050565b6000806000806060858703121561187757600080fd5b8435611882816117da565b9350602085013567ffffffffffffffff81111561189e57600080fd5b6118aa878288016117ff565b90945092506118bd905060408601611848565b905092959194509250565b6000815180845260005b818110156118ee576020818501810151868301820152016118d2565b81811115611900576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061149260208301846118c8565b60006020828403121561195857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156119a157600080fd5b823567ffffffffffffffff808211156119b957600080fd5b818501915085601f8301126119cd57600080fd5b8135818111156119df576119df61195f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611a2557611a2561195f565b81604052828152886020848701011115611a3e57600080fd5b826020860160208301376000602084830101528096505050505050611a6560208401611848565b90509250929050565b600060208284031215611a8057600080fd5b8135611492816117da565b600080600080600080600060c0888a031215611aa657600080fd5b873596506020880135611ab8816117da565b95506040880135611ac8816117da565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611af257600080fd5b611afe8a828b016117ff565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611bac60c083018486611b11565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611be9608083018688611b11565b905083604083015263ffffffff831660608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611c5d57611c5d611c07565b02949350505050565b600067ffffffffffffffff80841680611ca8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611cd757611cd7611c07565b01949350505050565b60008219821115611cf357611cf3611c07565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611d3957611d39611c07565b500390565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff8316602082015260606040820152600061090560608301846118c8565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611db660808301856118c8565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611e1260c08301846118c8565b9897505050505050505056fea164736f6c634300080f000a", + "nonce": "0x23", + "chainId": "0x2105" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x0bcf2a8c268fb4a2b146fff47e8eff72e479822673fbc3eeacd9b0d37dec698f", + "transactionType": "CREATE", + "contractName": "L2StandardBridge", + "contractAddress": "0xff312c3496f0848cd94d71dc06c434d487a46a10", + "function": null, + "arguments": null, + "transaction": { + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "gas": "0x301535", + "value": "0x0", + "input": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612ab380620000f46000396000f3fe6080604052600436106101125760003560e01c80635c975abb116100a5578063927ede2d11610074578063c4d66de811610059578063c4d66de8146103ee578063c89701a21461040e578063e11013dd1461043b57600080fd5b8063927ede2d146103b0578063a3a79548146103db57600080fd5b80635c975abb1461032e5780637f46ddb214610244578063870876231461034a5780638f601f661461036a57600080fd5b806336c717c1116100e157806336c717c1146102445780633cb747bf14610295578063540abf73146102c257806354fd4d50146102e257600080fd5b80630166a07a146101eb57806309fc88431461020b5780631635f5fd1461021e57806332b7006d1461023157600080fd5b366101e65761011f61044e565b6101b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b6101e473deaddeaddeaddeaddeaddeaddeaddeaddead000033333462030d4060405180602001604052806000815250610467565b005b600080fd5b3480156101f757600080fd5b506101e46102063660046124ab565b610542565b6101e4610219366004612557565b6108e4565b6101e461022c3660046125aa565b6109c0565b6101e461023f36600461261d565b610e12565b34801561025057600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102a157600080fd5b5060035461026b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ce57600080fd5b506101e46102dd366004612671565b610ef1565b3480156102ee57600080fd5b50604080518082018252600681527f312e31332e3000000000000000000000000000000000000000000000000000006020820152905161028c919061275e565b34801561033a57600080fd5b506040516000815260200161028c565b34801561035657600080fd5b506101e4610365366004612771565b610f36565b34801561037657600080fd5b506103a26103853660046127f4565b600260209081526000928352604080842090915290825290205481565b60405190815260200161028c565b3480156103bc57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff1661026b565b6101e46103e9366004612771565b61100f565b3480156103fa57600080fd5b506101e461040936600461282d565b611053565b34801561041a57600080fd5b5060045461026b9073ffffffffffffffffffffffffffffffffffffffff1681565b6101e461044936600461284a565b6111fc565b600033321480610462575061046233611245565b905090565b7fffffffffffffffffffffffff215221522152215221522152215221522153000073ffffffffffffffffffffffffffffffffffffffff8716016104b6576104b18585858585611288565b61053a565b60008673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052791906128ad565b905061053887828888888888611452565b505b505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610615575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156105d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fd91906128ad565b73ffffffffffffffffffffffffffffffffffffffff16145b6106c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101a7565b6106d08761180b565b1561081e576106df878761186d565b610791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101a7565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561080157600080fd5b505af1158015610815573d6000803e3d6000fd5b505050506108a0565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a168352929052205461085c9084906128f9565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556108a090858561198d565b610538878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a6192505050565b6108ec61044e565b610978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101a7565b6109bb3333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061128892505050565b505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610a93575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7b91906128ad565b73ffffffffffffffffffffffffffffffffffffffff16145b610b45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101a7565b823414610bd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e7420726571756972656400000000000060648201526084016101a7565b3073ffffffffffffffffffffffffffffffffffffffff851603610c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c66000000000000000000000000000000000000000000000000000000000060648201526084016101a7565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610d24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e67657200000000000000000000000000000000000000000000000060648201526084016101a7565b610d6685858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aef92505050565b6000610d83855a8660405180602001604052806000815250611b90565b90508061053a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c6564000000000000000000000000000000000000000000000000000000000060648201526084016101a7565b610e1a61044e565b610ea6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101a7565b610eea853333878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061046792505050565b5050505050565b61053887873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061145292505050565b610f3e61044e565b610fca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101a7565b61053a86863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061145292505050565b61053a863387878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061046792505050565b600054610100900460ff16158080156110735750600054600160ff909116105b8061108d5750303b15801561108d575060005460ff166001145b611119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016101a7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561117757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61119573420000000000000000000000000000000000000783611ba8565b80156111f857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b61123f3385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061128892505050565b50505050565b60008173ffffffffffffffffffffffffffffffffffffffff163b60170361128357604051602081016040526020600082853c5160e81c62ef01001490505b919050565b823414611317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c7565000060648201526084016101a7565b61132385858584611c92565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611386908b908b9086908a90602401612910565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261141992918890600401612959565b6000604051808303818588803b15801561143257600080fd5b505af1158015611446573d6000803e3d6000fd5b50505050505050505050565b34156114e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5374616e646172644272696467653a2063616e6e6f742073656e642076616c7560448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016101a7565b6114e98761180b565b15611637576114f8878761186d565b6115aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101a7565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561161a57600080fd5b505af115801561162e573d6000803e3d6000fd5b505050506116cb565b61165973ffffffffffffffffffffffffffffffffffffffff8816863086611d33565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a168352929052205461169790849061299e565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b6116d9878787878786611d91565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a000000000000000000000000000000000000000000000000000000009061173d908b908d908c908c908c908b906024016129b6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526117d092918790600401612959565b600060405180830381600087803b1580156117ea57600080fd5b505af11580156117fe573d6000803e3d6000fd5b5050505050505050505050565b6000611837827f1d1d8b6300000000000000000000000000000000000000000000000000000000611e1f565b806118675750611867827fec4fc8e300000000000000000000000000000000000000000000000000000000611e1f565b92915050565b6000611899837f1d1d8b6300000000000000000000000000000000000000000000000000000000611e1f565b15611942578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190d91906128ad565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611867565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118e9573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109bb9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611e42565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611ad993929190612a11565b60405180910390a461053a868686868686611f4e565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611b7c93929190612a11565b60405180910390a461123f84848484611fd6565b6000806000835160208501868989f195945050505050565b600054610100900460ff16611c3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016101a7565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611d1f93929190612a11565b60405180910390a461123f84848484612043565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261123f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016119df565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611e0993929190612a11565b60405180910390a461053a8686868686866120a2565b6000611e2a8361211a565b8015611e3b5750611e3b838361217e565b9392505050565b6000611ea4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661224d9092919063ffffffff16565b8051909150156109bb5780806020019051810190611ec29190612a4f565b6109bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101a7565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd868686604051611fc693929190612a11565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612035929190612a71565b60405180910390a350505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612035929190612a71565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf868686604051611fc693929190612a11565b6000612146827f01ffc9a70000000000000000000000000000000000000000000000000000000061217e565b80156118675750612177827fffffffff0000000000000000000000000000000000000000000000000000000061217e565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612236575060208210155b80156122425750600081115b979650505050505050565b606061225c8484600085612264565b949350505050565b6060824710156122f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101a7565b73ffffffffffffffffffffffffffffffffffffffff85163b612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101a7565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161239d9190612a8a565b60006040518083038185875af1925050503d80600081146123da576040519150601f19603f3d011682016040523d82523d6000602084013e6123df565b606091505b5091509150612242828286606083156123f9575081611e3b565b8251156124095782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101a7919061275e565b73ffffffffffffffffffffffffffffffffffffffff8116811461245f57600080fd5b50565b60008083601f84011261247457600080fd5b50813567ffffffffffffffff81111561248c57600080fd5b6020830191508360208285010111156124a457600080fd5b9250929050565b600080600080600080600060c0888a0312156124c657600080fd5b87356124d18161243d565b965060208801356124e18161243d565b955060408801356124f18161243d565b945060608801356125018161243d565b93506080880135925060a088013567ffffffffffffffff81111561252457600080fd5b6125308a828b01612462565b989b979a50959850939692959293505050565b803563ffffffff8116811461128357600080fd5b60008060006040848603121561256c57600080fd5b61257584612543565b9250602084013567ffffffffffffffff81111561259157600080fd5b61259d86828701612462565b9497909650939450505050565b6000806000806000608086880312156125c257600080fd5b85356125cd8161243d565b945060208601356125dd8161243d565b935060408601359250606086013567ffffffffffffffff81111561260057600080fd5b61260c88828901612462565b969995985093965092949392505050565b60008060008060006080868803121561263557600080fd5b85356126408161243d565b94506020860135935061265560408701612543565b9250606086013567ffffffffffffffff81111561260057600080fd5b600080600080600080600060c0888a03121561268c57600080fd5b87356126978161243d565b965060208801356126a78161243d565b955060408801356126b78161243d565b9450606088013593506126cc60808901612543565b925060a088013567ffffffffffffffff81111561252457600080fd5b60005b838110156127035781810151838201526020016126eb565b8381111561123f5750506000910152565b6000815180845261272c8160208601602086016126e8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611e3b6020830184612714565b60008060008060008060a0878903121561278a57600080fd5b86356127958161243d565b955060208701356127a58161243d565b9450604087013593506127ba60608801612543565b9250608087013567ffffffffffffffff8111156127d657600080fd5b6127e289828a01612462565b979a9699509497509295939492505050565b6000806040838503121561280757600080fd5b82356128128161243d565b915060208301356128228161243d565b809150509250929050565b60006020828403121561283f57600080fd5b8135611e3b8161243d565b6000806000806060858703121561286057600080fd5b843561286b8161243d565b935061287960208601612543565b9250604085013567ffffffffffffffff81111561289557600080fd5b6128a187828801612462565b95989497509550505050565b6000602082840312156128bf57600080fd5b8151611e3b8161243d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561290b5761290b6128ca565b500390565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261294f6080830184612714565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006129886060830185612714565b905063ffffffff83166040830152949350505050565b600082198211156129b1576129b16128ca565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612a0560c0830184612714565b98975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612a466060830184612714565b95945050505050565b600060208284031215612a6157600080fd5b81518015158114611e3b57600080fd5b82815260406020820152600061225c6040830184612714565b60008251612a9c8184602087016126e8565b919091019291505056fea164736f6c634300080f000a", + "nonce": "0x24", + "chainId": "0x2105" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x3aa8f42fef14effb7e6d3f6cc9c5edc904c812f92402e343d39ea43d28d3c3fc", + "transactionType": "CREATE", + "contractName": "L2ERC721Bridge", + "contractAddress": "0x6cf5489360c17e648d9009c74019699aa716d60c", + "function": null, + "arguments": null, + "transaction": { + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "gas": "0x19c679", + "value": "0x0", + "input": "0x608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61163a806100ed6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80637f46ddb211610076578063aa5574521161005b578063aa557452146101c9578063c4d66de8146101dc578063c89701a2146101ef57600080fd5b80637f46ddb21461018d578063927ede2d146101ab57600080fd5b806354fd4d50116100a757806354fd4d50146101225780635c975abb1461016b578063761f44931461017a57600080fd5b80633687011a146100c35780633cb747bf146100d8575b600080fd5b6100d66100d13660046112b8565b61020f565b005b6001546100f89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61015e6040518060400160405280600681526020017f312e31302e30000000000000000000000000000000000000000000000000000081525081565b60405161011991906113a6565b60405160008152602001610119565b6100d66101883660046113b9565b6102c0565b60025473ffffffffffffffffffffffffffffffffffffffff166100f8565b60015473ffffffffffffffffffffffffffffffffffffffff166100f8565b6100d66101d7366004611451565b6107de565b6100d66101ea3660046114c8565b61089a565b6002546100f89073ffffffffffffffffffffffffffffffffffffffff1681565b610217610a43565b6102a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102b88686333388888888610a5c565b505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331480156103955750600254600154604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691636e296e45916004808201926020929091908290030181865afa158015610359573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037d91906114e5565b73ffffffffffffffffffffffffffffffffffffffff16145b610421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f746865722062726964676500606482015260840161029f565b3073ffffffffffffffffffffffffffffffffffffffff8816036104c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c324552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c6600000000000000000000000000000000000000000000606482015260840161029f565b6104f0877faecafc2300000000000000000000000000000000000000000000000000000000610fb2565b61057c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324552433732314272696467653a206c6f63616c20746f6b656e20696e746560448201527f7266616365206973206e6f7420636f6d706c69616e7400000000000000000000606482015260840161029f565b8673ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105eb91906114e5565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146106cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4c324552433732314272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433732312060648201527f6c6f63616c20746f6b656e000000000000000000000000000000000000000000608482015260a40161029f565b6040517fa144819400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526024820185905288169063a144819490604401600060405180830381600087803b15801561073b57600080fd5b505af115801561074f573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac878787876040516107cd949392919061154b565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516610881576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f74206265206164647265737328302900000000000000000000000000000000606482015260840161029f565b6108918787338888888888610a5c565b50505050505050565b600054610100900460ff16158080156108ba5750600054600160ff909116105b806108d45750303b1580156108d4575060005460ff166001145b610960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161029f565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156109be57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109dc73420000000000000000000000000000000000000783610fd5565b8015610a3f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b600033321480610a575750610a57336110bf565b905090565b73ffffffffffffffffffffffffffffffffffffffff8716610aff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c324552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f742062652061646472657373283029000000000000000000000000000000606482015260840161029f565b6040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff891690636352211e90602401602060405180830381865afa158015610b6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8e91906114e5565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610c48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324552433732314272696467653a205769746864726177616c206973206e6f60448201527f74206265696e6720696e69746961746564206279204e4654206f776e65720000606482015260840161029f565b60008873ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb991906114e5565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c324552433732314272696467653a2072656d6f746520746f6b656e20646f6560448201527f73206e6f74206d6174636820676976656e2076616c7565000000000000000000606482015260840161029f565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018790528a1690639dc29fac90604401600060405180830381600087803b158015610de657600080fd5b505af1158015610dfa573d6000803e3d6000fd5b505050506000818a8989898888604051602401610e1d979695949392919061158b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f761f44930000000000000000000000000000000000000000000000000000000017905260015460025491517f3dbb202b00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff90811692633dbb202b92610ef292169085908a906004016115e8565b600060405180830381600087803b158015610f0c57600080fd5b505af1158015610f20573d6000803e3d6000fd5b505050508773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a58a8a8989604051610f9e949392919061154b565b60405180910390a450505050505050505050565b6000610fbd83611102565b8015610fce5750610fce8383611167565b9392505050565b600054610100900460ff1661106c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161029f565b6001805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560028054929093169116179055565b60008173ffffffffffffffffffffffffffffffffffffffff163b6017036110fd57604051602081016040526020600082853c5160e81c62ef01001490505b919050565b600061112e827f01ffc9a700000000000000000000000000000000000000000000000000000000611167565b8015611161575061115f827fffffffff00000000000000000000000000000000000000000000000000000000611167565b155b92915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d9150600051905082801561121f575060208210155b801561122b5750600081115b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461125857600080fd5b50565b803563ffffffff811681146110fd57600080fd5b60008083601f84011261128157600080fd5b50813567ffffffffffffffff81111561129957600080fd5b6020830191508360208285010111156112b157600080fd5b9250929050565b60008060008060008060a087890312156112d157600080fd5b86356112dc81611236565b955060208701356112ec81611236565b9450604087013593506113016060880161125b565b9250608087013567ffffffffffffffff81111561131d57600080fd5b61132989828a0161126f565b979a9699509497509295939492505050565b6000815180845260005b8181101561136157602081850181015186830182015201611345565b81811115611373576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610fce602083018461133b565b600080600080600080600060c0888a0312156113d457600080fd5b87356113df81611236565b965060208801356113ef81611236565b955060408801356113ff81611236565b9450606088013561140f81611236565b93506080880135925060a088013567ffffffffffffffff81111561143257600080fd5b61143e8a828b0161126f565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561146c57600080fd5b873561147781611236565b9650602088013561148781611236565b9550604088013561149781611236565b9450606088013593506114ac6080890161125b565b925060a088013567ffffffffffffffff81111561143257600080fd5b6000602082840312156114da57600080fd5b8135610fce81611236565b6000602082840312156114f757600080fd5b8151610fce81611236565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000611581606083018486611502565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a08301526115db60c083018486611502565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000611617606083018561133b565b905063ffffffff8316604083015294935050505056fea164736f6c634300080f000a", + "nonce": "0x25", + "chainId": "0x2105" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xc21be1faae3065e4eb0286856ec71cce172cc6fd170d7fa6d13da7c6f5845b18", + "transactionType": "CREATE", + "contractName": "LegacyMigrator", + "contractAddress": "0x690d24732fb1ed4869dca5cd2820fe54272aad09", + "function": null, + "arguments": null, + "transaction": { + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "gas": "0x3d7e4", + "value": "0x0", + "input": "0x60a06040523060805234801561001457600080fd5b5060805161028d61002f6000396000605c015261028d6000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c3fbb6fd14610030575b600080fd5b61004361003e3660046101d2565b610045565b005b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036100e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f64656c656761746563616c6c206f6e6c79000000000000000000000000000000604482015260640160405180910390fd5b60008080557f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc84905560405173ffffffffffffffffffffffffffffffffffffffff8516917fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b91a26000808473ffffffffffffffffffffffffffffffffffffffff168484604051610179929190610270565b600060405180830381855af49150503d80600081146101b4576040519150601f19603f3d011682016040523d82523d6000602084013e6101b9565b606091505b5091509150816101cb57805160208201fd5b5050505050565b6000806000604084860312156101e757600080fd5b833573ffffffffffffffffffffffffffffffffffffffff8116811461020b57600080fd5b9250602084013567ffffffffffffffff8082111561022857600080fd5b818601915086601f83011261023c57600080fd5b81358181111561024b57600080fd5b87602082850101111561025d57600080fd5b6020830194508093505050509250925092565b818382376000910190815291905056fea164736f6c634300080f000a", + "nonce": "0x26", + "chainId": "0x2105" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x2b82da1", + "logs": [ + { + "address": "0xfe016829cbd44b469a4bb76ed95343a9458dcba6", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0x30900929d72c863f2a86de3bc9e91662dcd00f13aceec8eaf8e13e2559daa6a3", + "blockNumber": "0x32b49d2", + "blockTimestamp": "0x6ae0f087", + "transactionHash": "0x622eec94fd64715562d4f5e10d10fb688878767fd5658684ffccfbcd172bf901", + "transactionIndex": "0x9f", + "logIndex": "0x49e", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x622eec94fd64715562d4f5e10d10fb688878767fd5658684ffccfbcd172bf901", + "transactionIndex": "0x9f", + "blockHash": "0x30900929d72c863f2a86de3bc9e91662dcd00f13aceec8eaf8e13e2559daa6a3", + "blockNumber": "0x32b49d2", + "gasUsed": "0x1a7b1f", + "effectiveGasPrice": "0x568f3a", + "blobGasUsed": "0x79430", + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "to": null, + "contractAddress": "0xfe016829cbd44b469a4bb76ed95343a9458dcba6", + "daFootprintGasScalar": "0x94", + "l1BaseFeeScalar": "0x8dd", + "l1BlobBaseFee": "0x596f2c", + "l1BlobBaseFeeScalar": "0x101c12", + "l1Fee": "0x85db4a22f", + "l1GasPrice": "0x76b1ba6", + "l1GasUsed": "0xd1c1" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x21d752e", + "logs": [ + { + "address": "0xff312c3496f0848cd94d71dc06c434d487a46a10", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xbd6821312dfd1fe1da5d2e7ff7a0589e1746b75da24f056195ed6ba3826c37a9", + "blockNumber": "0x32b49d5", + "blockTimestamp": "0x6ae0f08d", + "transactionHash": "0x0bcf2a8c268fb4a2b146fff47e8eff72e479822673fbc3eeacd9b0d37dec698f", + "transactionIndex": "0xc1", + "logIndex": "0x2ba", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000004000000000000000000000000000400000000000000000000000000000000000000000004000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x0bcf2a8c268fb4a2b146fff47e8eff72e479822673fbc3eeacd9b0d37dec698f", + "transactionIndex": "0xc1", + "blockHash": "0xbd6821312dfd1fe1da5d2e7ff7a0589e1746b75da24f056195ed6ba3826c37a9", + "blockNumber": "0x32b49d5", + "gasUsed": "0x24fc9f", + "effectiveGasPrice": "0x568f3a", + "blobGasUsed": "0x967e4", + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "to": null, + "contractAddress": "0xff312c3496f0848cd94d71dc06c434d487a46a10", + "daFootprintGasScalar": "0x94", + "l1BaseFeeScalar": "0x8dd", + "l1BlobBaseFee": "0x596f2c", + "l1BlobBaseFeeScalar": "0x101c12", + "l1Fee": "0xa6a7aa74e", + "l1GasPrice": "0x778b8cf", + "l1GasUsed": "0x1045d" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x9a282e", + "logs": [ + { + "address": "0x6cf5489360c17e648d9009c74019699aa716d60c", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xed05ce8ea31cdab02e0ba8a4079c2304ce3954a7d84e16c405570c62a86dd660", + "blockNumber": "0x32b49d9", + "blockTimestamp": "0x6ae0f095", + "transactionHash": "0x3aa8f42fef14effb7e6d3f6cc9c5edc904c812f92402e343d39ea43d28d3c3fc", + "transactionIndex": "0x2e", + "logIndex": "0xd4", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000800000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000001000000000000020000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x3aa8f42fef14effb7e6d3f6cc9c5edc904c812f92402e343d39ea43d28d3c3fc", + "transactionIndex": "0x2e", + "blockHash": "0xed05ce8ea31cdab02e0ba8a4079c2304ce3954a7d84e16c405570c62a86dd660", + "blockNumber": "0x32b49d9", + "gasUsed": "0x13d3c0", + "effectiveGasPrice": "0x568f3a", + "blobGasUsed": "0x5b29c", + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "to": null, + "contractAddress": "0x6cf5489360c17e648d9009c74019699aa716d60c", + "daFootprintGasScalar": "0x94", + "l1BaseFeeScalar": "0x8dd", + "l1BlobBaseFee": "0x596f2c", + "l1BlobBaseFeeScalar": "0x101c12", + "l1Fee": "0x64f6f2edd", + "l1GasPrice": "0x778b8cf", + "l1GasUsed": "0x9dbc" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x95a683", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xc21be1faae3065e4eb0286856ec71cce172cc6fd170d7fa6d13da7c6f5845b18", + "transactionIndex": "0x2a", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockNumber": "0x32b49dc", + "gasUsed": "0x2f4d7", + "effectiveGasPrice": "0x568f3a", + "blobGasUsed": "0x1173c", + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "to": null, + "contractAddress": "0x690d24732fb1ed4869dca5cd2820fe54272aad09", + "daFootprintGasScalar": "0x94", + "l1BaseFeeScalar": "0x8dd", + "l1BlobBaseFee": "0x5bce57", + "l1BlobBaseFeeScalar": "0x101c12", + "l1Fee": "0x43262cad", + "l1GasPrice": "0x8113d3b", + "l1GasUsed": "0x1e39" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1793126554950, + "chain": 8453, + "commit": "9639477" +} \ No newline at end of file diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/records/DeployDenimProofImpls.s.sol/1/run-1793126330612.json b/active/evm/tasks/2026-10-07-denim-upgrade/records/DeployDenimProofImpls.s.sol/1/run-1793126330612.json new file mode 100644 index 00000000..32bcad5a --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/records/DeployDenimProofImpls.s.sol/1/run-1793126330612.json @@ -0,0 +1,58 @@ +{ + "transactions": [ + { + "hash": "0xc2f3aec472499a87f0bc14bab6aefb22edeb8222167e072dbedd54361ca6f298", + "transactionType": "CREATE", + "contractName": "AggregateVerifier", + "contractAddress": "0xc08b8ffaf04abb1d7013b74a0e57eccbd7fa5a70", + "function": null, + "arguments": [ + "621", + "0x909f6cf47ed12f010A796527f562bFc26C7F4E72", + "0xd0D07924AdD740a87e41Ca8A0d4CBBf6b074EF71", + "0x1FbA0C57b07Af804A9717e51dec9CC27FBC12228", + "0xB88D95bDf6972508942d184866890c1834219B75", + "0x73181275ec86503b629510176b5bedec00309060b3f4ff5d8e55d9e83dad5cbd", + "(0x3d3713d31a8936563bc56791040067131bb3fa3c0ab8b5e65e9c4cc0755b5fdb, 0x00d5a43068d7a9d1eac440a790b776c749ae6516c43f1a572226190cef6fd45a)", + "0x1607709d90d40904f790574404e2ad614eac858f6162faa0ec34c6bf5e5f3c57", + "8453", + "(600, 30, 6000, 300)", + "(0x7480Afc8D99a5c645c247dB5A1e4a4f440e6e095, 0, 1686789347, 2)" + ], + "transaction": { + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "gas": "0x584cb5", + "value": "0x0", + "input": "0x6103006040523480156200001257600080fd5b50604051620057d2380380620057d2833981016040819052620000359162000455565b6200004082620001b5565b80606001516001600160401b03166000036200006f57604051637ccf8b6960e01b815260040160405180910390fd5b63ffffffff8b166102c0526001600160a01b038a1660808190526040805163f2b4e61760e01b8152905163f2b4e617916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000531565b6001600160a01b0390811660a05289811660c05288811660e05287811661012052610100879052855161014052602086810151610160526101808690526101a0859052828101516101c0526040808401516001600160401b039081166101e05260608086015190911661020052855161022052918501516102405284015161026052830151610280528151166102e05262000185620002b7565b620001929060206200056e565b6200019f90608e62000590565b6102a05250620005ef9950505050505050505050565b8051602082015160408301516060840151831580620001d2575082155b80620001e85750620001e58385620005c1565b15155b15620002165760405163462b853960e11b815260048101859052602481018490526044015b60405180910390fd5b81158062000222575080155b80620002385750620002358183620005c1565b15155b15620002625760405163462b853960e11b815260048101839052602481018290526044016200020d565b6000620002708486620005d8565b90506000620002808385620005d8565b9050808214620002ae576040516305345bb960e01b815260048101839052602481018290526044016200020d565b50505050505050565b60006102405161022051620002cd9190620005d8565b905090565b6001600160a01b0381168114620002e857600080fd5b50565b8051620002f881620002d2565b919050565b604051608081016001600160401b03811182821017156200032e57634e487b7160e01b600052604160045260246000fd5b60405290565b6000604082840312156200034757600080fd5b604080519081016001600160401b03811182821017156200037857634e487b7160e01b600052604160045260246000fd5b604052825181526020928301519281019290925250919050565b600060808284031215620003a557600080fd5b620003af620002fd565b90508151815260208201516020820152604082015160408201526060820151606082015292915050565b80516001600160401b0381168114620002f857600080fd5b6000608082840312156200040457600080fd5b6200040e620002fd565b905081516200041d81620002d2565b8152602082810151908201526200043760408301620003d9565b60408201526200044a60608301620003d9565b606082015292915050565b60008060008060008060008060008060006102408c8e0312156200047857600080fd5b8b5163ffffffff811681146200048d57600080fd5b60208d0151909b50620004a081620002d2565b60408d0151909a50620004b381620002d2565b9850620004c360608d01620002eb565b9750620004d360808d01620002eb565b965060a08c01519550620004eb8d60c08e0162000334565b94506101008c015193506101208c015192506200050d8d6101408e0162000392565b91506200051f8d6101c08e01620003f1565b90509295989b509295989b9093969950565b6000602082840312156200054457600080fd5b81516200055181620002d2565b9392505050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200058b576200058b62000558565b500290565b60008219821115620005a657620005a662000558565b500190565b634e487b7160e01b600052601260045260246000fd5b600082620005d357620005d3620005ab565b500690565b600082620005ea57620005ea620005ab565b500490565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516102a0516102c0516102e051614f9b6200083760003960008181610bd101528181611cce0152613382015260008181610c3f01528181611db00152612eaa015260006116cc0152600081816106650152613632015260008181610b31015261360f0152600081816108c1015281816124d201526135e8015260008181610b65015281816124f301526135c50152600081816103c2015281816135580152818161415f0152614211015260008181610a19015281816134be0152818161352701528181614183015261423d015260008181610dbf01528181611bb101528181611c06015281816134f90152818161358c0152614134015260006109b1015260008181610d6b015281816142740152614452015260008181610a4d01526145520152600081816109e50152614473015260008181610afd015281816127db015281816132db015261452101526000818161047801528181614295015261439901526000818161052801528181612879015281816131ec015261436a015260008181610cdf01528181610fd40152818161110901526120c00152600061097d01526000818161081f015281816117fe015281816119cb01528181611dd801528181612224015281816123750152818161245c01528181612f2301528181612ff4015281816130ac015281816136a10152818161375a0152818161381101526138ca0152614f9b6000f3fe6080604052600436106103ab5760003560e01c806370872aa5116101e7578063a9271eef1161010d578063c26783e9116100a0578063d28cb06f1161006f578063d28cb06f14610d59578063e41f96ad14610d8d578063f629dbb514610dad578063fa24f74314610de157600080fd5b8063c26783e914610ccd578063cf09e0d014610d01578063cfcf984b14610d22578063d1ee5e4b14610d4257600080fd5b8063b97cb80f116100dc578063b97cb80f14610c08578063bbdc02db14610c28578063bcef3b5514610c69578063bdb337d114610ca957600080fd5b8063a9271eef14610b53578063addecc0614610b87578063aef2f96e14610bbf578063b74df35a14610bf357600080fd5b806387d34f16116101855780639840fd84116101545780639840fd8414610a8557806399735e3214610aab5780639ded395214610aeb578063a734445914610b1f57600080fd5b806387d34f16146109d3578063895dbafe14610a07578063908cb80e14610a3b5780639730163d14610a6f57600080fd5b80637a6bc9e1116101c15780637a6bc9e11461092257806380f323a71461095557806382ff53a11461096b5780638417d3c21461099f57600080fd5b806370872aa5146108e357806374f8bf32146108f8578063786b844b1461090d57600080fd5b80632ddf7a1e116102d75780634e95eb581161026a578063609d333411610239578063609d3334146108435780636361506d1461085857806364d121361461089857806367f228bb146108af57600080fd5b80634e95eb581461079957806354fd4d50146107af57806357da950e146107f55780635c0cba331461081057600080fd5b80633fada3fd116102a65780633fada3fd146107125780634224b1e714610744578063423161821461075757806349edf35a1461077957600080fd5b80632ddf7a1e14610653578063324a13c914610687578063326ac3841461069d57806337b1b229146106d257600080fd5b80631f8375741161034f57806325fc2ace1161031e57806325fc2ace146105f25780632810e1d6146106075780632845e5bb1461061c57806328c802cd1461063d57600080fd5b80631f83757414610516578063200d2ed21461054a57806323edb2e014610585578063250e69bd146105b257600080fd5b806310fbee281161038b57806310fbee28146104a85780631333db2e146104bd57806319effeb4146104d45780631ee5d7c81461050157600080fd5b80622134cc146103b0578062821de3146104025780630183fd4414610466575b600080fd5b3480156103bc57600080fd5b506103e47f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561040e57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036074013560601c5b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103f9565b34801561047257600080fd5b5061049a7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016103f9565b3480156104b457600080fd5b5061049a600181565b3480156104c957600080fd5b506104d2610e0a565b005b3480156104e057600080fd5b506000546103e49068010000000000000000900467ffffffffffffffff1681565b34801561050d57600080fd5b50610441611268565b34801561052257600080fd5b506104417f000000000000000000000000000000000000000000000000000000000000000081565b34801561055657600080fd5b5060005461057890700100000000000000000000000000000000900460ff1681565b6040516103f99190614815565b34801561059157600080fd5b506003546104419073ffffffffffffffffffffffffffffffffffffffff1681565b3480156105be57600080fd5b506000546105e2907201000000000000000000000000000000000000900460ff1681565b60405190151581526020016103f9565b3480156105fe57600080fd5b5060015461049a565b34801561061357600080fd5b506105786112ac565b34801561062857600080fd5b506007546103e49067ffffffffffffffff1681565b34801561064957600080fd5b5061049a60085481565b34801561065f57600080fd5b5061049a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061049a60055481565b3480156106a957600080fd5b506106bd6106b836600461482f565b611624565b604080519283526020830191909152016103f9565b3480156106de57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610441565b34801561071e57600080fd5b506003546105e29074010000000000000000000000000000000000000000900460ff1681565b6104d261075236600461488a565b611641565b34801561076357600080fd5b5061076c612142565b6040516103f99190614942565b34801561078557600080fd5b5061049a61079436600461482f565b612161565b3480156107a557600080fd5b5061049a61010081565b3480156107bb57600080fd5b5060408051808201909152600581527f302e332e30000000000000000000000000000000000000000000000000000000602082015261076c565b34801561080157600080fd5b506001546002546106bd919082565b34801561081c57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610441565b34801561084f57600080fd5b5061076c6121f1565b34801561086457600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013561049a565b3480156108a457600080fd5b506103e46201518081565b3480156108bb57600080fd5b5061049a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156108ef57600080fd5b5060025461049a565b34801561090457600080fd5b50610441612216565b34801561091957600080fd5b506104d2612222565b34801561092e57600080fd5b506003546105e2907501000000000000000000000000000000000000000000900460ff1681565b34801561096157600080fd5b5061049a60045481565b34801561097757600080fd5b506104417f000000000000000000000000000000000000000000000000000000000000000081565b3480156109ab57600080fd5b5061049a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156109df57600080fd5b5061049a7f000000000000000000000000000000000000000000000000000000000000000081565b348015610a1357600080fd5b506103e47f000000000000000000000000000000000000000000000000000000000000000081565b348015610a4757600080fd5b5061049a7f000000000000000000000000000000000000000000000000000000000000000081565b348015610a7b57600080fd5b5061049a611fff81565b348015610a9157600080fd5b5061044171f90827f1c53a10cb7a02335b17532000293581565b348015610ab757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013561049a565b348015610af757600080fd5b506104417f000000000000000000000000000000000000000000000000000000000000000081565b348015610b2b57600080fd5b5061049a7f000000000000000000000000000000000000000000000000000000000000000081565b348015610b5f57600080fd5b5061049a7f000000000000000000000000000000000000000000000000000000000000000081565b348015610b9357600080fd5b50600754610bad9068010000000000000000900460ff1681565b60405160ff90911681526020016103f9565b348015610bcb57600080fd5b506104417f000000000000000000000000000000000000000000000000000000000000000081565b348015610bff57600080fd5b5061049a6124cb565b348015610c1457600080fd5b506104d2610c23366004614955565b612517565b348015610c3457600080fd5b5060405163ffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016103f9565b348015610c7557600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013561049a565b348015610cb557600080fd5b506007544267ffffffffffffffff90911611156105e2565b348015610cd957600080fd5b506104417f000000000000000000000000000000000000000000000000000000000000000081565b348015610d0d57600080fd5b506000546103e49067ffffffffffffffff1681565b348015610d2e57600080fd5b506104d2610d3d36600461488a565b612902565b348015610d4e57600080fd5b506103e46206978081565b348015610d6557600080fd5b5061049a7f000000000000000000000000000000000000000000000000000000000000000081565b348015610d9957600080fd5b506104d2610da8366004614955565b612ac3565b348015610db957600080fd5b5061049a7f000000000000000000000000000000000000000000000000000000000000000081565b348015610ded57600080fd5b50610df6612ea3565b6040516103f9939291906149a6565b905090565b600268929eee149b4bd212685403610e2a5763ab143c066000526004601cfd5b600268929eee149b4bd21268556003547501000000000000000000000000000000000000000000900460ff1615610e8d576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075467ffffffffffffffff90811614610f025760005468010000000000000000900467ffffffffffffffff1667ffffffffffffffff16600003610efd576040517fc105260a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f5f565b60005467ffffffffffffffff16610f1c9062127500614a03565b67ffffffffffffffff16421015610f5f576040517f04643c3900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035474010000000000000000000000000000000000000000900460ff1661107757600354600480546040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384169281019290925260248201527f000000000000000000000000000000000000000000000000000000000000000090911690637eee288d90604401600060405180830381600087803b15801561101a57600080fd5b505af115801561102e573d6000803e3d6000fd5b5050600380547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055506112599050565b6003805475010000000000000000000000000000000000000000007fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff821617909155600480546040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384169281019290925260248201527f00000000000000000000000000000000000000000000000000000000000000009091169063f3fef3a390604401600060405180830381600087803b15801561114f57600080fd5b505af1158015611163573d6000803e3d6000fd5b50506003546004546040516000945073ffffffffffffffffffffffffffffffffffffffff9092169250908381818185875af1925050503d80600081146111c5576040519150601f19603f3d011682016040523d82523d6000602084013e6111ca565b606091505b5050905080611205576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460045460405190815273ffffffffffffffffffffffffffffffffffffffff909116907f87e12c2565042763daa6bf5842ed2b6447f17f7e28f9a4905fe3959581396ead9060200160405180910390a2505b600168929eee149b4bd2126855565b6000600681805b6001811115611280576112806147e6565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff16919050565b600080600054700100000000000000000000000000000000900460ff1660028111156112da576112da6147e6565b14611311576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061131b612f0a565b90506000816002811115611331576113316147e6565b03611368576040517f92c506ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600181600281111561137c5761137c6147e6565b036113c157600080547fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff16700100000000000000000000000000000000179055611575565b6113c961319f565b156113ed575050600054700100000000000000000000000000000000900460ff1690565b6007544267ffffffffffffffff9091161115611435576040517f04643c3900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075460016801000000000000000090910460ff161015611482576040517f344de4bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005541561153957600080547fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167001000000000000000000000000000000001781556001905260066020527f3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a3154600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055611575565b600080547fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167002000000000000000000000000000000001790555b600080547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16680100000000000000004267ffffffffffffffff160217908190556040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da60916115fd9170010000000000000000000000000000000090910460ff1690614815565b60405180910390a15050600054700100000000000000000000000000000000900460ff1690565b6000806116388361163361337d565b6135b7565b91509150915091565b60005471010000000000000000000000000000000000900460ff1615611693576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602060016116a38483614a2f565b6116ad9190614a47565b6116b79190614a8d565b6116c2906020614aa1565b90506000816116f27f00000000000000000000000000000000000000000000000000000000000000006040614a2f565b6116fc9190614a2f565b905080361461171357639824bdab6000526004601cfd5b61174a367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b61176160016117576124cb565b6107949190614a47565b146117e75761177360016117576124cb565b6117a7367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b6040517ff33fa6cf000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036074013560601c146119c957367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036074013560601c61188e81613659565b6118c4576040517f346119f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052806119418373ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561191d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117479190614ade565b81526020018273ffffffffffffffffffffffffffffffffffffffff166399735e326040518163ffffffff1660e01b8152600401602060405180830381865afa158015611991573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b59190614ade565b905280516001556020015160025550611a64565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663664ed8306040518163ffffffff1660e01b81526004016040805180830381865afa158015611a33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a579190614b75565b8051600155602001516002555b6000611a6e61337d565b90506000611a806001800154836135b7565b50600254909150611a92908290614a2f565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013514611b3c57600254611ad3908290614a2f565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356040517f087b2d76000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016117de565b600080547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff1671010000000000000000000000000000000000178155611bad60547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b90507f0000000000000000000000000000000000000000000000000000000000000000811015611c32576040517fa70efcf7000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000060248201526044016117de565b6000611c3e82856139c8565b9050428167ffffffffffffffff161115611c96576040517f3680a67800000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201524260248201526044016117de565b6040517fa2e62b5a00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2e62b5a90602401602060405180830381865afa158015611d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4e9190614ade565b600855600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff16179055604080517f3c9f397c00000000000000000000000000000000000000000000000000000000815290517f000000000000000000000000000000000000000000000000000000000000000063ffffffff16917f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1691633c9f397c916004808201926020929091908290030181865afa158015611e39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5d9190614bc4565b600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1663ffffffff92909216929092147201000000000000000000000000000000000000021781556007805467ffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090911617905588888281611eec57611eec614bea565b919091013560f81c90506001811115611f0757611f076147e6565b90506000611f19602160018b8d614c19565b611f2291614c43565b90506000611f34604160218c8e614c19565b611f3d91614c43565b9050611f498282613a65565b612000611f598b6041818f614c19565b85367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c60015487905b600254611fc5367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360540135611ffb612142565b613cbd565b61203783367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c613d8f565b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033560601c179055346004818155604080517fd0e30db000000000000000000000000000000000000000000000000000000000815290517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169363d0e30db093909280820192600092909182900301818588803b15801561211c57600080fd5b505af1158015612130573d6000803e3d6000fd5b50505050505050505050505050505050565b6060610e0560886121516124cb565b61215c906020614aa1565b613e99565b600061216b6124cb565b82106121a3576040517fa6c661fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121eb6121b1836020614aa1565b6121bc906088614a2f565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003013590565b92915050565b6060610e0560546122006124cb565b61220b906020614aa1565b61215c906034614a2f565b6000600681600161126f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561228d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b19190614c7f565b156122e8576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005468010000000000000000900467ffffffffffffffff1667ffffffffffffffff16600003612344576040517fc105260a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0314d2b30000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690630314d2b390602401602060405180830381865afa1580156123d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f59190614c7f565b90508061242e576040517f4851bd9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f17cf21a90000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906317cf21a990602401600060405180830381600087803b1580156124b557600080fd5b505af19250505080156124c6575060015b505b50565b6000610e057f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614a8d565b60008054700100000000000000000000000000000000900460ff166002811115612543576125436147e6565b1461257a576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008484600081811061258f5761258f614bea565b919091013560f81c905060018111156125aa576125aa6147e6565b905060006006818360018111156125c3576125c36147e6565b60018111156125d4576125d46147e6565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff160361263457806040517f25822d380000000000000000000000000000000000000000000000000000000081526004016117de9190614ca1565b600554156126ec57600160055461264b9190614a47565b8314612683576040517fa6c661fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61268c83612161565b821461269c57816117a784612161565b60018160018111156126b0576126b06147e6565b146126e7576040517f69ed70ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126f6565b6126f68383613eeb565b600080600061270486613f6c565b9194509250905061277c61271b886001818c614c19565b8633612751367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b88888c898e60405160200161276891815260200190565b604051602081830303815290604052613cbd565b61278584613fd9565b604080518781526020810187905233917f5a8d9d181e6a59fe5477a50721401b6332a810b9183e15ac62d386379a05a717910160405180910390a260018460018111156127d4576127d46147e6565b0361285e577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ece20f366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561284157600080fd5b505af1158015612855573d6000803e3d6000fd5b505050506128f8565b6000846001811115612872576128726147e6565b036128f8577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ece20f366040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156128df57600080fd5b505af11580156128f3573d6000803e3d6000fd5b505050505b5050505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561292e5761292e6147e6565b14612965576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007544267ffffffffffffffff909116116129ac576040517fdf469ccb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828260008181106129c1576129c1614bea565b919091013560f81c905060018111156129dc576129dc6147e6565b905060006006818360018111156129f5576129f56147e6565b6001811115612a0657612a066147e6565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff1614612a6657806040517f7141297a0000000000000000000000000000000000000000000000000000000081526004016117de9190614ca1565b612ab4612a768360018187614c19565b8333612aac367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b600154611f8e565b612abe8133613d8f565b505050565b60008054700100000000000000000000000000000000900460ff166002811115612aef57612aef6147e6565b14612b26576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b2f30613659565b612b65576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001612b6f612f0a565b6002811115612b8057612b806147e6565b03612bb7576040517f346119f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85473ffffffffffffffffffffffffffffffffffffffff16612c315760006040517f25822d380000000000000000000000000000000000000000000000000000000081526004016117de9190614ca1565b600160005260066020527f3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a315473ffffffffffffffffffffffffffffffffffffffff1615612cad5760016040517f7141297a0000000000000000000000000000000000000000000000000000000081526004016117de9190614ca1565b600084846000818110612cc257612cc2614bea565b919091013560f81c90506001811115612cdd57612cdd6147e6565b90506001816001811115612cf357612cf36147e6565b14612d2a576040517f69ed70ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612d348383613eeb565b6000806000612d4286613f6c565b91945092509050612d5961271b886001818c614c19565b3360066000866001811115612d7057612d706147e6565b6001811115612d8157612d816147e6565b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760088282829054906101000a900460ff16612dec9190614cb5565b92506101000a81548160ff021916908360ff1602179055506206978067ffffffffffffffff1642612e1d9190614a2f565b600780547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055612e61866001614a2f565b60055560405186815233907f7a180232c19fd38c83e493856a42688c477bae7e82039103b2c1ea6a6162e5299060200160405180910390a25050505050505050565b60008060607f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135612eff6121f1565b925092509250909192565b600073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036074013560601c14613199576000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036074013560601c6040517f34a346ea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906334a346ea90602401602060405180830381865afa15801561303d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130619190614c7f565b8061311757506040517f5958a19300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690635958a19390602401602060405180830381865afa1580156130f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131179190614c7f565b1561312457600191505090565b8073ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561316f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131939190614cda565b91505090565b50600290565b600080805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85473ffffffffffffffffffffffffffffffffffffffff161580159061327957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9df65eb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613255573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132799190614c7f565b1561328e576132886000613fd9565b50600190565b600160005260066020527f3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a315473ffffffffffffffffffffffffffffffffffffffff161580159061336857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9df65eb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133689190614c7f565b15613377576132886001613fd9565b50600090565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166326fadbe26040518163ffffffff1660e01b8152600401600060405180830381865afa1580156133eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526134319190810190614cfb565b9050600d815111613463577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91505090565b600081600d8151811061347857613478614bea565b602002602001015190508067ffffffffffffffff166000036134bc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9250505090565b7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff168167ffffffffffffffff161161351f577f00000000000000000000000000000000000000000000000000000000000000009250505090565b61358661354c7f000000000000000000000000000000000000000000000000000000000000000083614db2565b67ffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1661410b565b6135b0907f0000000000000000000000000000000000000000000000000000000000000000614a2f565b9250505090565b6000808284101561360c57507f000000000000000000000000000000000000000000000000000000000000000090507f0000000000000000000000000000000000000000000000000000000000000000613652565b507f000000000000000000000000000000000000000000000000000000000000000090507f00000000000000000000000000000000000000000000000000000000000000005b9250929050565b6040517fee658e4500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063ee658e4590602401602060405180830381865afa1580156136ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061370e9190614c7f565b80156137c557506040517f04e50fed00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f000000000000000000000000000000000000000000000000000000000000000016906304e50fed90602401602060405180830381865afa1580156137a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c59190614c7f565b801561387e57506040517f34a346ea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f000000000000000000000000000000000000000000000000000000000000000016906334a346ea90602401602060405180830381865afa158015613858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061387c9190614c7f565b155b801561393757506040517f5958a19300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f00000000000000000000000000000000000000000000000000000000000000001690635958a19390602401602060405180830381865afa158015613911573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139359190614c7f565b155b80156121eb575060018273ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561398b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139af9190614cda565b60028111156139c0576139c06147e6565b141592915050565b6000818310156139e2576139db8361412c565b90506121eb565b600060056139f08486614a47565b6139fa9190614a8d565b613a038461412c565b67ffffffffffffffff16613a179190614a2f565b905067ffffffffffffffff811115613a5e576040517fa1d6b347000000000000000000000000000000000000000000000000000000008152600481018590526024016117de565b9392505050565b438110613aa7576040517f25bfb0a4000000000000000000000000000000000000000000000000000000008152600481018290524360248201526044016117de565b600080613ab48343614a47565b90506101008111613ac85782409150613c34565b611fff8111613bf95760008071f90827f1c53a10cb7a02335b17532000293573ffffffffffffffffffffffffffffffffffffffff1685604051602001613b1091815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052613b4891614ddb565b600060405180830381855afa9150503d8060008114613b83576040519150601f19603f3d011682016040523d82523d6000602084013e613b88565b606091505b5091509150811580613b9c57508051602014155b15613bdc576040517f0f0b8f81000000000000000000000000000000000000000000000000000000008152600481018690524360248201526044016117de565b80806020019051810190613bf09190614ade565b93505050613c34565b6040517f0f0b8f81000000000000000000000000000000000000000000000000000000008152600481018490524360248201526044016117de565b81613c74576040517f0f0b8f81000000000000000000000000000000000000000000000000000000008152600481018490524360248201526044016117de565b838214613cb7576040517f80b1ae5100000000000000000000000000000000000000000000000000000000815260048101859052602481018390526044016117de565b50505050565b6001891015613cf8576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000886001811115613d0c57613d0c6147e6565b03613d2757613d228a8a89898989898989614269565b613d83565b6001886001811115613d3b57613d3b6147e6565b03613d5157613d228a8a89898989898989614447565b6040517f69ed70ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050505050565b8060066000846001811115613da657613da66147e6565b6001811115613db757613db76147e6565b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760088282829054906101000a900460ff16613e229190614cb5565b92506101000a81548160ff021916908360ff160217905550613e426145f3565b816001811115613e5457613e546147e6565b60405173ffffffffffffffffffffffffffffffffffffffff8316907f62f393acfb3d3425116fe9be7a6509a4b652bda54fdac2df2b7273135ecd58e790600090a35050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b613ef36124cb565b8210613f2b576040517fa6c661fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80613f3583612161565b036124c6576040517fbbcafae600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008080808415613f8a57613f85610794600187614a47565b613f8e565b6001545b90506000613f9f6001800154611624565b915060009050613faf8288614aa1565b600254613fbc9190614a2f565b90506000613fca8383614a03565b93989197509295509350505050565b60066000826001811115613fef57613fef6147e6565b6001811115614000576140006147e6565b8152602081019190915260400160002080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055600181600181111561404a5761404a6147e6565b036140555760006005555b60075468010000000000000000900460ff166000036140a0576040517f344de4bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff6801000000000000000080840482169290920116027fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff9091161790556124c86146db565b600081614120576365244e4e6000526004601cfd5b50808206151591040190565b6000806141597f000000000000000000000000000000000000000000000000000000000000000084614a47565b905060007f00000000000000000000000000000000000000000000000000000000000000006141b07f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff614db2565b6141ba9190614df7565b67ffffffffffffffff16905080821115614203576040517fa1d6b347000000000000000000000000000000000000000000000000000000008152600481018590526024016117de565b61423767ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001683614aa1565b614261907f0000000000000000000000000000000000000000000000000000000000000000614a03565b949350505050565b6000878787878787877f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006008546040516020016142d09a99989796959493929190614e1e565b6040516020818303038152906040528051906020012090506000888b8b6040516020016142ff93929190614ecc565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fab750e75000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ab750e75906143c39084907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f0b565b602060405180830381865afa1580156143e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144049190614c7f565b61443a576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050505050565b6000878787878787877f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006008546040516020016144ae9a99989796959493929190614e1e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905280516020909101207fab750e75000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ab750e759061457c908d908d907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f30565b602060405180830381865afa158015614599573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145bd9190614c7f565b613d83576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006145fd614793565b90507fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000167ffffffffffffffff8216016146655750600780547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff179055565b60006146718242614a03565b60075490915061469e9067ffffffffffffffff808416911667ffffffffffffffff16808218908211021890565b600780547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff929092169190911790555050565b60006146e5614793565b90507fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000167ffffffffffffffff82160161474d5750600780547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff179055565b6147578142614a03565b600780547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff9290921691909117905550565b60075460009060026801000000000000000090910460ff16106147b857506201518090565b60075468010000000000000000900460ff166001036147d957506206978090565b5067ffffffffffffffff90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310614829576148296147e6565b91905290565b60006020828403121561484157600080fd5b5035919050565b60008083601f84011261485a57600080fd5b50813567ffffffffffffffff81111561487257600080fd5b60208301915083602082850101111561365257600080fd5b6000806020838503121561489d57600080fd5b823567ffffffffffffffff8111156148b457600080fd5b6148c085828601614848565b90969095509350505050565b60005b838110156148e75781810151838201526020016148cf565b83811115613cb75750506000910152565b600081518084526149108160208601602086016148cc565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613a5e60208301846148f8565b6000806000806060858703121561496b57600080fd5b843567ffffffffffffffff81111561498257600080fd5b61498e87828801614848565b90989097506020870135966040013595509350505050565b63ffffffff841681528260208201526060604082015260006149cb60608301846148f8565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516808303821115614a2657614a266149d4565b01949350505050565b60008219821115614a4257614a426149d4565b500190565b600082821015614a5957614a596149d4565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a9c57614a9c614a5e565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ad957614ad96149d4565b500290565b600060208284031215614af057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614b6d57614b6d614af7565b604052919050565b600060408284031215614b8757600080fd5b6040516040810181811067ffffffffffffffff82111715614baa57614baa614af7565b604052825181526020928301519281019290925250919050565b600060208284031215614bd657600080fd5b815163ffffffff81168114613a5e57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008085851115614c2957600080fd5b83861115614c3657600080fd5b5050820193919092039150565b803560208310156121eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b600060208284031215614c9157600080fd5b81518015158114613a5e57600080fd5b6020810160028310614829576148296147e6565b600060ff821660ff84168060ff03821115614cd257614cd26149d4565b019392505050565b600060208284031215614cec57600080fd5b815160038110613a5e57600080fd5b60006020808385031215614d0e57600080fd5b825167ffffffffffffffff80821115614d2657600080fd5b818501915085601f830112614d3a57600080fd5b815181811115614d4c57614d4c614af7565b8060051b614d5b858201614b26565b9182528381018501918581019089841115614d7557600080fd5b948601945b83861015614da557855192508483168314614d955760008081fd5b8282529486019490860190614d7a565b9998505050505050505050565b600067ffffffffffffffff83811690831681811015614dd357614dd36149d4565b039392505050565b60008251614ded8184602087016148cc565b9190910192915050565b600067ffffffffffffffff80841680614e1257614e12614a5e565b92169190910492915050565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008b60601b16815289601482015288603482015260007fffffffffffffffff000000000000000000000000000000000000000000000000808a60c01b16605484015288605c840152808860c01b16607c840152508551614ea5816084850160208a016148cc565b608492019182019490945260a481019290925260c482015260e40198975050505050505050565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008460601b168152818360148301376000910160140190815292915050565b606081526000614f1e60608301866148f8565b60208301949094525060400152919050565b6060815283606082015283856080830137600060808583010152600060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f87011683010190508360208301528260408301529594505050505056fea164736f6c634300080f000a000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000909f6cf47ed12f010a796527f562bfc26c7f4e72000000000000000000000000d0d07924add740a87e41ca8a0d4cbbf6b074ef710000000000000000000000001fba0c57b07af804a9717e51dec9cc27fbc12228000000000000000000000000b88d95bdf6972508942d184866890c1834219b7573181275ec86503b629510176b5bedec00309060b3f4ff5d8e55d9e83dad5cbd3d3713d31a8936563bc56791040067131bb3fa3c0ab8b5e65e9c4cc0755b5fdb00d5a43068d7a9d1eac440a790b776c749ae6516c43f1a572226190cef6fd45a1607709d90d40904f790574404e2ad614eac858f6162faa0ec34c6bf5e5f3c5700000000000000000000000000000000000000000000000000000000000021050000000000000000000000000000000000000000000000000000000000000258000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000001770000000000000000000000000000000000000000000000000000000000000012c0000000000000000000000007480afc8d99a5c645c247db5a1e4a4f440e6e095000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000648a5ce30000000000000000000000000000000000000000000000000000000000000002", + "nonce": "0x5e", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x24d9f81", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xc2f3aec472499a87f0bc14bab6aefb22edeb8222167e072dbedd54361ca6f298", + "transactionIndex": "0xbc", + "blockHash": "0x8f95af0914de2bce3310c6f6508af7eee3445c47651a1abee0811233c2d80a0e", + "blockNumber": "0x1911747", + "gasUsed": "0x43ec3d", + "effectiveGasPrice": "0x7157a85", + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "to": null, + "contractAddress": "0xc08b8ffaf04abb1d7013b74a0e57eccbd7fa5a70" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1793126330612, + "chain": 1, + "commit": "9639477" +} \ No newline at end of file diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/records/DeployFactory.s.sol/8453/run-1793126519425.json b/active/evm/tasks/2026-10-07-denim-upgrade/records/DeployFactory.s.sol/8453/run-1793126519425.json new file mode 100644 index 00000000..fe9b4874 --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/records/DeployFactory.s.sol/8453/run-1793126519425.json @@ -0,0 +1,114 @@ +{ + "transactions": [ + { + "hash": "0x9e96bd3fd4e2c204d601b51dce0fd81a1051216e003af10d5589c11ed31a1f1f", + "transactionType": "CREATE", + "contractName": "OptimismMintableERC721Factory", + "contractAddress": "0x6e4f4f3e193880339c79605f88a2cd15370c8e02", + "function": null, + "arguments": [ + "0x4200000000000000000000000000000000000014", + "1" + ], + "transaction": { + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "gas": "0x39443b", + "value": "0x0", + "input": "0x60c060405234801561001057600080fd5b5060405161345438038061345483398101604081905261002f91610045565b6001600160a01b0390911660805260a05261007f565b6000806040838503121561005857600080fd5b82516001600160a01b038116811461006f57600080fd5b6020939093015192949293505050565b60805160a0516133946100c06000396000818161011e01528181610151015261032a0152600081816101b5015281816101e0015261030901526133946000f3fe60806040523480156200001157600080fd5b5060043610620000875760003560e01c8063d23822421162000062578063d2382242146200014f578063d97df6521462000176578063e78cea9214620001b3578063ee9a31a214620001da57600080fd5b806354fd4d50146200008c5780635572acae14620000e15780637d1d0c5b1462000118575b600080fd5b620000c96040518060400160405280600581526020017f312e342e3200000000000000000000000000000000000000000000000000000081525081565b604051620000d891906200049b565b60405180910390f35b62000107620000f2366004620004e1565b60006020819052908152604090205460ff1681565b6040519015158152602001620000d8565b620001407f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001620000d8565b7f000000000000000000000000000000000000000000000000000000000000000062000140565b6200018d62000187366004620005e1565b62000202565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620000d8565b7f00000000000000000000000000000000000000000000000000000000000000006200018d565b6200018d7f000000000000000000000000000000000000000000000000000000000000000081565b600073ffffffffffffffffffffffffffffffffffffffff8416620002d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f4f7074696d69736d4d696e7461626c65455243373231466163746f72793a204c908201527f3120746f6b656e20616464726573732063616e6e6f742062652061646472657360648201527f7328302900000000000000000000000000000000000000000000000000000000608482015260a40160405180910390fd5b6000848484604051602001620002ec939291906200065e565b6040516020818303038152906040528051906020012090506000817f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008888886040516200035a906200041f565b6200036a959493929190620006ad565b8190604051809103906000f59050801580156200038b573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff8181166000818152602081815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590513381529394509189169290917fe72783bb8e0ca31286b85278da59684dd814df9762a52f0837f89edd1483b299910160405180910390a395945050505050565b612c79806200070f83390190565b6000815180845260005b81811015620004555760208185018101518683018201520162000437565b8181111562000468576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000620004b060208301846200042d565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114620004dc57600080fd5b919050565b600060208284031215620004f457600080fd5b620004b082620004b7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126200054057600080fd5b813567ffffffffffffffff808211156200055e576200055e620004ff565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715620005a757620005a7620004ff565b81604052838152866020858801011115620005c157600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215620005f757600080fd5b6200060284620004b7565b9250602084013567ffffffffffffffff808211156200062057600080fd5b6200062e878388016200052e565b935060408601359150808211156200064557600080fd5b5062000654868287016200052e565b9150509250925092565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006200068f60608301856200042d565b8281036040840152620006a381856200042d565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835286602084015280861660408401525060a06060830152620006ee60a08301856200042d565b82810360808401526200070281856200042d565b9897505050505050505056fe60e06040523480156200001157600080fd5b5060405162002c7938038062002c7983398101604081905262000034916200062d565b8181600062000044838262000756565b50600162000053828262000756565b5050506001600160a01b038516620000d85760405162461bcd60e51b815260206004820152603360248201527f4f7074696d69736d4d696e7461626c654552433732313a20627269646765206360448201527f616e6e6f7420626520616464726573732830290000000000000000000000000060648201526084015b60405180910390fd5b83600003620001505760405162461bcd60e51b815260206004820152603660248201527f4f7074696d69736d4d696e7461626c654552433732313a2072656d6f7465206360448201527f6861696e2069642063616e6e6f74206265207a65726f000000000000000000006064820152608401620000cf565b6001600160a01b038316620001ce5760405162461bcd60e51b815260206004820152603960248201527f4f7074696d69736d4d696e7461626c654552433732313a2072656d6f7465207460448201527f6f6b656e2063616e6e6f742062652061646472657373283029000000000000006064820152608401620000cf565b60808490526001600160a01b0383811660a081905290861660c0526200020290601462000256602090811b62000d3317901c565b62000218856200041660201b62000f5c1760201c565b6040516020016200022b92919062000822565b604051602081830303815290604052600a90816200024a919062000756565b50505050505062000993565b6060600062000267836002620008ac565b62000274906002620008ce565b6001600160401b038111156200028e576200028e62000553565b6040519080825280601f01601f191660200182016040528015620002b9576020820181803683370190505b509050600360fc1b81600081518110620002d757620002d7620008e9565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110620003095762000309620008e9565b60200101906001600160f81b031916908160001a90535060006200032f846002620008ac565b6200033c906001620008ce565b90505b6001811115620003be576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110620003745762000374620008e9565b1a60f81b8282815181106200038d576200038d620008e9565b60200101906001600160f81b031916908160001a90535060049490941c93620003b681620008ff565b90506200033f565b5083156200040f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401620000cf565b9392505050565b6060816000036200043e5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156200046e5780620004558162000919565b9150620004669050600a836200094b565b915062000442565b6000816001600160401b038111156200048b576200048b62000553565b6040519080825280601f01601f191660200182016040528015620004b6576020820181803683370190505b5090505b84156200052e57620004ce60018362000962565b9150620004dd600a866200097c565b620004ea906030620008ce565b60f81b818381518110620005025762000502620008e9565b60200101906001600160f81b031916908160001a90535062000526600a866200094b565b9450620004ba565b949350505050565b80516001600160a01b03811681146200054e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620005865781810151838201526020016200056c565b8381111562000596576000848401525b50505050565b600082601f830112620005ae57600080fd5b81516001600160401b0380821115620005cb57620005cb62000553565b604051601f8301601f19908116603f01168101908282118183101715620005f657620005f662000553565b816040528381528660208588010111156200061057600080fd5b6200062384602083016020890162000569565b9695505050505050565b600080600080600060a086880312156200064657600080fd5b620006518662000536565b945060208601519350620006686040870162000536565b60608701519093506001600160401b03808211156200068657600080fd5b6200069489838a016200059c565b93506080880151915080821115620006ab57600080fd5b50620006ba888289016200059c565b9150509295509295909350565b600181811c90821680620006dc57607f821691505b602082108103620006fd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200075157600081815260208120601f850160051c810160208610156200072c5750805b601f850160051c820191505b818110156200074d5782815560010162000738565b5050505b505050565b81516001600160401b0381111562000772576200077262000553565b6200078a81620007838454620006c7565b8462000703565b602080601f831160018114620007c25760008415620007a95750858301515b600019600386901b1c1916600185901b1785556200074d565b600085815260208120601f198616915b82811015620007f357888601518255948401946001909101908401620007d2565b5085821015620008125787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6832ba3432b932bab69d60b91b8152600083516200084881600985016020880162000569565b600160fe1b60099184019182015283516200086b81600a84016020880162000569565b712f746f6b656e5552493f75696e743235363d60701b600a9290910191820152601c01949350505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620008c957620008c962000896565b500290565b60008219821115620008e457620008e462000896565b500190565b634e487b7160e01b600052603260045260246000fd5b60008162000911576200091162000896565b506000190190565b6000600182016200092e576200092e62000896565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826200095d576200095d62000935565b500490565b60008282101562000977576200097762000896565b500390565b6000826200098e576200098e62000935565b500690565b60805160a05160c051612293620009e6600039600081816103d501528181610460015281816109dc0152610aca0152600081816101e001526103af01526000818161031c01526103fb01526122936000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80637d1d0c5b116100ee578063c87b56dd11610097578063e78cea9211610071578063e78cea92146103d3578063e9518196146103f9578063e985e9c51461041f578063ee9a31a21461045b57600080fd5b8063c87b56dd14610392578063d547cfb7146103a5578063d6c0b2c4146103ad57600080fd5b8063a1448194116100c8578063a144819414610359578063a22cb4651461036c578063b88d4fde1461037f57600080fd5b80637d1d0c5b1461031757806395d89b411461033e5780639dc29fac1461034657600080fd5b806323b872dd1161015b5780634f6ccce7116101355780634f6ccce7146102a257806354fd4d50146102b55780636352211e146102f157806370a082311461030457600080fd5b806323b872dd146102695780632f745c591461027c57806342842e0e1461028f57600080fd5b8063081812fc1161018c578063081812fc1461022f578063095ea7b31461024257806318160ddd1461025757600080fd5b806301ffc9a7146101b3578063033964be146101db57806306fdde031461021a575b600080fd5b6101c66101c1366004611d90565b610482565b60405190151581526020015b60405180910390f35b6102027f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101d2565b6102226104e0565b6040516101d29190611e05565b61020261023d366004611e18565b610572565b610255610250366004611e4d565b610599565b005b6008545b6040519081526020016101d2565b610255610277366004611e77565b6106cf565b61025b61028a366004611e4d565b610756565b61025561029d366004611e77565b6107fe565b61025b6102b0366004611e18565b610819565b6102226040518060400160405280600581526020017f312e332e3200000000000000000000000000000000000000000000000000000081525081565b6102026102ff366004611e18565b6108bd565b61025b610312366004611eb3565b610928565b61025b7f000000000000000000000000000000000000000000000000000000000000000081565b6102226109c2565b610255610354366004611e4d565b6109d1565b610255610367366004611e4d565b610abf565b61025561037a366004611ece565b610ba2565b61025561038d366004611f39565b610bb1565b6102226103a0366004611e18565b610c3f565b610222610ca5565b7f0000000000000000000000000000000000000000000000000000000000000000610202565b7f0000000000000000000000000000000000000000000000000000000000000000610202565b7f000000000000000000000000000000000000000000000000000000000000000061025b565b6101c661042d366004612015565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6102027f000000000000000000000000000000000000000000000000000000000000000081565b60007faecafc23000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083168114806104d957506104d983611099565b9392505050565b6060600080546104ef90612048565b80601f016020809104026020016040519081016040528092919081815260200182805461051b90612048565b80156105685780601f1061053d57610100808354040283529160200191610568565b820191906000526020600020905b81548152906001019060200180831161054b57829003601f168201915b5050505050905090565b600061057d826110ef565b506000908152600460205260409020546001600160a01b031690565b60006105a4826108bd565b9050806001600160a01b0316836001600160a01b0316036106325760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b038216148061064e575061064e813361042d565b6106c05760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610629565b6106ca8383611156565b505050565b6106d933826111dc565b61074b5760405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f7665640000000000000000000000000000000000006064820152608401610629565b6106ca83838361125a565b600061076183610928565b82106107d55760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610629565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6106ca83838360405180602001604052806000815250610bb1565b600061082460085490565b82106108985760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610629565b600882815481106108ab576108ab61209b565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806109225760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610629565b92915050565b60006001600160a01b0382166109a65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610629565b506001600160a01b031660009081526003602052604090205490565b6060600180546104ef90612048565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a6f5760405162461bcd60e51b815260206004820152603a60248201527f4f7074696d69736d4d696e7461626c654552433732313a206f6e6c792062726960448201527f6467652063616e2063616c6c20746869732066756e6374696f6e0000000000006064820152608401610629565b610a788161144a565b816001600160a01b03167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca582604051610ab391815260200190565b60405180910390a25050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b5d5760405162461bcd60e51b815260206004820152603a60248201527f4f7074696d69736d4d696e7461626c654552433732313a206f6e6c792062726960448201527f6467652063616e2063616c6c20746869732066756e6374696f6e0000000000006064820152608401610629565b610b678282611509565b816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688582604051610ab391815260200190565b610bad338383611523565b5050565b610bbb33836111dc565b610c2d5760405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f7665640000000000000000000000000000000000006064820152608401610629565b610c398484848461160f565b50505050565b6060610c4a826110ef565b6000610c54611698565b90506000815111610c7457604051806020016040528060008152506104d9565b80610c7e84610f5c565b604051602001610c8f9291906120ca565b6040516020818303038152906040529392505050565b600a8054610cb290612048565b80601f0160208091040260200160405190810160405280929190818152602001828054610cde90612048565b8015610d2b5780601f10610d0057610100808354040283529160200191610d2b565b820191906000526020600020905b815481529060010190602001808311610d0e57829003601f168201915b505050505081565b60606000610d42836002612128565b610d4d906002612147565b67ffffffffffffffff811115610d6557610d65611f0a565b6040519080825280601f01601f191660200182016040528015610d8f576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110610dc657610dc661209b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110610e2957610e2961209b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000610e65846002612128565b610e70906001612147565b90505b6001811115610f0d577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110610eb157610eb161209b565b1a60f81b828281518110610ec757610ec761209b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93610f068161215f565b9050610e73565b5083156104d95760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610629565b606081600003610f9f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610fc95780610fb381612176565b9150610fc29050600a836121bf565b9150610fa3565b60008167ffffffffffffffff811115610fe457610fe4611f0a565b6040519080825280601f01601f19166020018201604052801561100e576020820181803683370190505b5090505b8415611091576110236001836121d3565b9150611030600a866121ea565b61103b906030612147565b60f81b8183815181106110505761105061209b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061108a600a866121bf565b9450611012565b949350505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806109225750610922826116a7565b6000818152600260205260409020546001600160a01b03166111535760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610629565b50565b600081815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03841690811790915581906111a3826108bd565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806111e8836108bd565b9050806001600160a01b0316846001600160a01b0316148061122f57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806110915750836001600160a01b031661124884610572565b6001600160a01b031614949350505050565b826001600160a01b031661126d826108bd565b6001600160a01b0316146112e95760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610629565b6001600160a01b0382166113645760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b61136f83838361178a565b61137a600082611156565b6001600160a01b03831660009081526003602052604081208054600192906113a39084906121d3565b90915550506001600160a01b03821660009081526003602052604081208054600192906113d1908490612147565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000611455826108bd565b90506114638160008461178a565b61146e600083611156565b6001600160a01b03811660009081526003602052604081208054600192906114979084906121d3565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b610bad828260405180602001604052806000815250611842565b816001600160a01b0316836001600160a01b0316036115845760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610629565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61161a84848461125a565b611626848484846118cb565b610c395760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610629565b6060600a80546104ef90612048565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061173a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061092257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610922565b6001600160a01b0383166117e5576117e081600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611808565b816001600160a01b0316836001600160a01b031614611808576118088382611a6c565b6001600160a01b03821661181f576106ca81611b09565b826001600160a01b0316826001600160a01b0316146106ca576106ca8282611bb8565b61184c8383611bfc565b61185960008484846118cb565b6106ca5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610629565b60006001600160a01b0384163b15611a61576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a02906119289033908990889088906004016121fe565b6020604051808303816000875af1925050508015611963575060408051601f3d908101601f191682019092526119609181019061223a565b60015b611a16573d808015611991576040519150601f19603f3d011682016040523d82523d6000602084013e611996565b606091505b508051600003611a0e5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610629565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611091565b506001949350505050565b60006001611a7984610928565b611a8391906121d3565b600083815260076020526040902054909150808214611ad6576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611b1b906001906121d3565b60008381526009602052604081205460088054939450909284908110611b4357611b4361209b565b906000526020600020015490508060088381548110611b6457611b6461209b565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611b9c57611b9c612257565b6001900381819060005260206000200160009055905550505050565b6000611bc383610928565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611c525760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610629565b6000818152600260205260409020546001600160a01b031615611cb75760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610629565b611cc36000838361178a565b6001600160a01b0382166000908152600360205260408120805460019290611cec908490612147565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461115357600080fd5b600060208284031215611da257600080fd5b81356104d981611d62565b60005b83811015611dc8578181015183820152602001611db0565b83811115610c395750506000910152565b60008151808452611df1816020860160208601611dad565b601f01601f19169290920160200192915050565b6020815260006104d96020830184611dd9565b600060208284031215611e2a57600080fd5b5035919050565b80356001600160a01b0381168114611e4857600080fd5b919050565b60008060408385031215611e6057600080fd5b611e6983611e31565b946020939093013593505050565b600080600060608486031215611e8c57600080fd5b611e9584611e31565b9250611ea360208501611e31565b9150604084013590509250925092565b600060208284031215611ec557600080fd5b6104d982611e31565b60008060408385031215611ee157600080fd5b611eea83611e31565b915060208301358015158114611eff57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b611f5885611e31565b9350611f6660208601611e31565b925060408501359150606085013567ffffffffffffffff80821115611f8a57600080fd5b818701915087601f830112611f9e57600080fd5b813581811115611fb057611fb0611f0a565b604051601f8201601f19908116603f01168101908382118183101715611fd857611fd8611f0a565b816040528281528a6020848701011115611ff157600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561202857600080fd5b61203183611e31565b915061203f60208401611e31565b90509250929050565b600181811c9082168061205c57607f821691505b602082108103612095577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600083516120dc818460208801611dad565b8351908301906120f0818360208801611dad565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000816000190483118215151615612142576121426120f9565b500290565b6000821982111561215a5761215a6120f9565b500190565b60008161216e5761216e6120f9565b506000190190565b60006000198203612189576121896120f9565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121ce576121ce612190565b500490565b6000828210156121e5576121e56120f9565b500390565b6000826121f9576121f9612190565b500690565b60006001600160a01b038087168352808616602084015250836040830152608060608301526122306080830184611dd9565b9695505050505050565b60006020828403121561224c57600080fd5b81516104d981611d62565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c634300080f000aa164736f6c634300080f000a00000000000000000000000042000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x21", + "chainId": "0x2105" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x213ca78ae3a657ef84e4aa7371c1cb1c82f9d7ef8b4cea8173588c7432137943", + "transactionType": "CREATE", + "contractName": "OptimismMintableERC20Factory", + "contractAddress": "0x87481a9cbf0aabf9a5f92838f51d9ca635a33878", + "function": null, + "arguments": null, + "transaction": { + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "gas": "0x2c1769", + "value": "0x0", + "input": "0x608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61270c806100ed6000396000f3fe60806040523480156200001157600080fd5b5060043610620000935760003560e01c8063c4d66de81162000062578063c4d66de81462000175578063ce5ac90f146200018e578063e78cea9214620001a5578063ee9a31a214620001c657600080fd5b8063316b3739146200009857806354fd4d5014620000fb578063896f93d114620001475780638cf0629c146200015e575b600080fd5b620000d1620000a936600462000636565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b620001386040518060400160405280600681526020017f312e31302e32000000000000000000000000000000000000000000000000000081525081565b604051620000f29190620006c9565b620000d162000158366004620007c0565b620001e5565b620000d16200016f3660046200083d565b620001fc565b6200018c6200018636600462000636565b6200041b565b005b620000d16200019f366004620007c0565b620005ed565b600154620000d19073ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff16620000d1565b6000620001f4848484620005ed565b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff8516620002a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d4d696e7461626c654552433230466163746f72793a206d7560448201527f73742070726f766964652072656d6f746520746f6b656e20616464726573730060648201526084015b60405180910390fd5b600085858585604051602001620002c29493929190620008d4565b604051602081830303815290604052805190602001209050600081600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16888888886040516200031290620005fe565b620003229594939291906200092e565b8190604051809103906000f590508015801562000343573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff81811660008181526002602052604080822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016948d1694851790555193945090927fceeb8e7d520d7f3b65fc11a262b91066940193b05d4f93df07cfdced0eb551cf9190a360405133815273ffffffffffffffffffffffffffffffffffffffff80891691908316907f52fe89dd5930f343d25650b62fd367bae47088bcddffd2a88350a6ecdd620cdb9060200160405180910390a39695505050505050565b600054610100900460ff16158080156200043c5750600054600160ff909116105b80620004585750303b15801562000458575060005460ff166001145b620004e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200029e565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200054557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015620005e957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6000620001f48484846012620001fc565b611d6c806200099483390190565b803573ffffffffffffffffffffffffffffffffffffffff811681146200063157600080fd5b919050565b6000602082840312156200064957600080fd5b62000654826200060c565b9392505050565b6000815180845260005b81811015620006835760208185018101518683018201520162000665565b8181111562000696576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006200065460208301846200065b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126200071f57600080fd5b813567ffffffffffffffff808211156200073d576200073d620006de565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715620007865762000786620006de565b81604052838152866020858801011115620007a057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215620007d657600080fd5b620007e1846200060c565b9250602084013567ffffffffffffffff80821115620007ff57600080fd5b6200080d878388016200070d565b935060408601359150808211156200082457600080fd5b5062000833868287016200070d565b9150509250925092565b600080600080608085870312156200085457600080fd5b6200085f856200060c565b9350602085013567ffffffffffffffff808211156200087d57600080fd5b6200088b888389016200070d565b94506040870135915080821115620008a257600080fd5b50620008b1878288016200070d565b925050606085013560ff81168114620008c957600080fd5b939692955090935050565b73ffffffffffffffffffffffffffffffffffffffff851681526080602082015260006200090560808301866200065b565b82810360408401526200091981866200065b565b91505060ff8316606083015295945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a060408301526200096960a08301866200065b565b82810360608401526200097d81866200065b565b91505060ff83166080830152969550505050505056fe6101a06040523480156200001257600080fd5b5060405162001d6c38038062001d6c833981016040819052620000359162000215565b6040805180820190915260018152603160f81b6020820152839081908185600362000061838262000350565b50600462000070828262000350565b5050825160208085019190912083518483012060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81880181905281830187905260608201869052608082019490945230818401528151808203909301835260c0019052805194019390932091935091906080523060c05261012052505050506001600160a01b0394851661014052509390921661016052505060ff16610180526200041c565b80516001600160a01b03811681146200014357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200017057600080fd5b81516001600160401b03808211156200018d576200018d62000148565b604051601f8301601f19908116603f01168101908282118183101715620001b857620001b862000148565b81604052838152602092508683858801011115620001d557600080fd5b600091505b83821015620001f95785820183015181830184015290820190620001da565b838211156200020b5760008385830101525b9695505050505050565b600080600080600060a086880312156200022e57600080fd5b62000239866200012b565b945062000249602087016200012b565b60408701519094506001600160401b03808211156200026757600080fd5b6200027589838a016200015e565b945060608801519150808211156200028c57600080fd5b506200029b888289016200015e565b925050608086015160ff81168114620002b357600080fd5b809150509295509295909350565b600181811c90821680620002d657607f821691505b602082108103620002f757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200034b57600081815260208120601f850160051c81016020861015620003265750805b601f850160051c820191505b81811015620003475782815560010162000332565b5050505b505050565b81516001600160401b038111156200036c576200036c62000148565b62000384816200037d8454620002c1565b84620002fd565b602080601f831160018114620003bc5760008415620003a35750858301515b600019600386901b1c1916600185901b17855562000347565b600085815260208120601f198616915b82811015620003ed57888601518255948401946001909101908401620003cc565b50858210156200040c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516101405161016051610180516118c3620004a9600039600061026301526000818161038d015281816104020152818161062101526107420152600081816101d501526103b301526000610f3801526000610f8701526000610f6201526000610ebb01526000610ee501526000610f0f01526118c36000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c806370a08231116100ee578063ae1f6aaf11610097578063d6c0b2c411610071578063d6c0b2c4146103b1578063dd62ed3e146103ea578063e78cea921461038b578063ee9a31a2146103fd57600080fd5b8063ae1f6aaf1461038b578063c01e1bd6146103b1578063d505accf146103d757600080fd5b80639dc29fac116100c85780639dc29fac14610352578063a457c2d714610365578063a9059cbb1461037857600080fd5b806370a082311461030e5780637ecebe001461033757806395d89b411461034a57600080fd5b8063313ce5671161015057806340c10f191161012a57806340c10f19146102a857806354fd4d50146102bd5780636afdd850146102f957600080fd5b8063313ce5671461025c5780633644e5151461028d578063395093511461029557600080fd5b8063095ea7b311610181578063095ea7b31461022457806318160ddd1461023757806323b872dd1461024957600080fd5b806301ffc9a7146101a8578063033964be146101d057806306fdde031461020f575b600080fd5b6101bb6101b63660046115e4565b610424565b60405190151581526020015b60405180910390f35b6101f77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c7565b610217610515565b6040516101c79190611626565b6101bb6102323660046116b5565b6105a7565b6002545b6040519081526020016101c7565b6101bb6102573660046116df565b6105c1565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101c7565b61023b6105e5565b6101bb6102a33660046116b5565b6105f4565b6102bb6102b63660046116b5565b610616565b005b6102176040518060400160405280600581526020017f312e342e3100000000000000000000000000000000000000000000000000000081525081565b6e22d473030f116ddee9f6b43ac78ba36101f7565b61023b61031c36600461171b565b6001600160a01b031660009081526020819052604090205490565b61023b61034536600461171b565b61070a565b610217610728565b6102bb6103603660046116b5565b610737565b6101bb6103733660046116b5565b61081a565b6101bb6103863660046116b5565b6108ad565b7f00000000000000000000000000000000000000000000000000000000000000006101f7565b7f00000000000000000000000000000000000000000000000000000000000000006101f7565b6102bb6103e5366004611736565b6108bb565b61023b6103f83660046117a9565b610a1f565b6101f77f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f1d1d8b63000000000000000000000000000000000000000000000000000000007fec4fc8e3000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000085168314806104dd57507fffffffff00000000000000000000000000000000000000000000000000000000858116908316145b8061050c57507fffffffff00000000000000000000000000000000000000000000000000000000858116908216145b95945050505050565b606060038054610524906117dc565b80601f0160208091040260200160405190810160405280929190818152602001828054610550906117dc565b801561059d5780601f106105725761010080835404028352916020019161059d565b820191906000526020600020905b81548152906001019060200180831161058057829003601f168201915b5050505050905090565b6000336105b5818585610aa6565b60019150505b92915050565b6000336105cf858285610bff565b6105da858585610c97565b506001949350505050565b60006105ef610eae565b905090565b6000336105b58185856106078383610a1f565b6106119190611858565b610aa6565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106b95760405162461bcd60e51b815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e00000000000000000000000060648201526084015b60405180910390fd5b6106c38282610fd5565b816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040516106fe91815260200190565b60405180910390a25050565b6001600160a01b0381166000908152600560205260408120546105bb565b606060048054610524906117dc565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107d55760405162461bcd60e51b815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e00000000000000000000000060648201526084016106b0565b6107df82826110b4565b816001600160a01b03167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040516106fe91815260200190565b600033816108288286610a1f565b9050838110156108a05760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016106b0565b6105da8286868403610aa6565b6000336105b5818585610c97565b8342111561090b5760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016106b0565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861093a8c611231565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061099582611259565b905060006109a5828787876112c2565b9050896001600160a01b0316816001600160a01b031614610a085760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016106b0565b610a138a8a8a610aa6565b50505050505050505050565b60007fffffffffffffffffffffffffffffffffffdd2b8cfcf0ee922116094bc538745d6001600160a01b03831601610a7857507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105bb565b6001600160a01b038084166000908152600160209081526040808320938616835292905220545b9392505050565b6001600160a01b038316610b215760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106b0565b6001600160a01b038216610b9d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016106b0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000610c0b8484610a1f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c915781811015610c845760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106b0565b610c918484848403610aa6565b50505050565b6001600160a01b038316610d135760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106b0565b6001600160a01b038216610d8f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016106b0565b6001600160a01b03831660009081526020819052604090205481811015610e1e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016106b0565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610e55908490611858565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ea191815260200190565b60405180910390a3610c91565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610f0757507f000000000000000000000000000000000000000000000000000000000000000046145b15610f3157507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6001600160a01b03821661102b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106b0565b806002600082825461103d9190611858565b90915550506001600160a01b0382166000908152602081905260408120805483929061106a908490611858565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166111305760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016106b0565b6001600160a01b038216600090815260208190526040902054818110156111bf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016106b0565b6001600160a01b03831660009081526020819052604081208383039055600280548492906111ee908490611870565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610bf2565b6001600160a01b03811660009081526005602052604090208054600181018255905b50919050565b60006105bb611266610eae565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006112d3878787876112ea565b915091506112e0816113f5565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561132157506000905060036113ec565b8460ff16601b1415801561133957508460ff16601c14155b1561134a57506000905060046113ec565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561139e573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b0381166113e5576000600192509250506113ec565b9150600090505b94509492505050565b600081600481111561140957611409611887565b036114115750565b600181600481111561142557611425611887565b036114725760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106b0565b600281600481111561148657611486611887565b036114d35760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106b0565b60038160048111156114e7576114e7611887565b0361155a5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016106b0565b600481600481111561156e5761156e611887565b036115e15760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016106b0565b50565b6000602082840312156115f657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610a9f57600080fd5b600060208083528351808285015260005b8181101561165357858101830151858201604001528201611637565b81811115611665576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b80356001600160a01b03811681146116b057600080fd5b919050565b600080604083850312156116c857600080fd5b6116d183611699565b946020939093013593505050565b6000806000606084860312156116f457600080fd5b6116fd84611699565b925061170b60208501611699565b9150604084013590509250925092565b60006020828403121561172d57600080fd5b610a9f82611699565b600080600080600080600060e0888a03121561175157600080fd5b61175a88611699565b965061176860208901611699565b95506040880135945060608801359350608088013560ff8116811461178c57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156117bc57600080fd5b6117c583611699565b91506117d360208401611699565b90509250929050565b600181811c908216806117f057607f821691505b602082108103611253577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561186b5761186b611829565b500190565b60008282101561188257611882611829565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000aa164736f6c634300080f000a", + "nonce": "0x22", + "chainId": "0x2105" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xd0969b", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x9e96bd3fd4e2c204d601b51dce0fd81a1051216e003af10d5589c11ed31a1f1f", + "transactionIndex": "0x3f", + "blockHash": "0xf4b36d50510a588f19fb4eaf859a7c8147bb2244c8aad45bcf08fc4061a72e58", + "blockNumber": "0x32b49c7", + "gasUsed": "0x2c0d1a", + "effectiveGasPrice": "0x5b8d80", + "blobGasUsed": "0xe6b54", + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "to": null, + "contractAddress": "0x6e4f4f3e193880339c79605f88a2cd15370c8e02", + "daFootprintGasScalar": "0x94", + "l1BaseFeeScalar": "0x8dd", + "l1BlobBaseFee": "0x56cc73", + "l1BlobBaseFeeScalar": "0x101c12", + "l1Fee": "0xf5780980e", + "l1GasPrice": "0x71541cd", + "l1GasUsed": "0x18f11" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x10d884e", + "logs": [ + { + "address": "0x87481a9cbf0aabf9a5f92838f51d9ca635a33878", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xde416b130bac17c683d6c53b19fefbfad6434dd554d518b3df2b47dd36d01adb", + "blockNumber": "0x32b49ca", + "blockTimestamp": "0x6ae0f077", + "transactionHash": "0x213ca78ae3a657ef84e4aa7371c1cb1c82f9d7ef8b4cea8173588c7432137943", + "transactionIndex": "0x48", + "logIndex": "0x18d", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000040000000040000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x213ca78ae3a657ef84e4aa7371c1cb1c82f9d7ef8b4cea8173588c7432137943", + "transactionIndex": "0x48", + "blockHash": "0xde416b130bac17c683d6c53b19fefbfad6434dd554d518b3df2b47dd36d01adb", + "blockNumber": "0x32b49ca", + "gasUsed": "0x21eaa0", + "effectiveGasPrice": "0x5b8d80", + "blobGasUsed": "0xb2ee0", + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "to": null, + "contractAddress": "0x87481a9cbf0aabf9a5f92838f51d9ca635a33878", + "daFootprintGasScalar": "0x94", + "l1BaseFeeScalar": "0x8dd", + "l1BlobBaseFee": "0x586fc8", + "l1BlobBaseFeeScalar": "0x101c12", + "l1Fee": "0xc3d6c6707", + "l1GasPrice": "0x7613581", + "l1GasUsed": "0x1358f" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1793126519425, + "chain": 8453, + "commit": "9639477" +} \ No newline at end of file diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/records/DeployFeeVaultImpls.s.sol/8453/run-1793126466487.json b/active/evm/tasks/2026-10-07-denim-upgrade/records/DeployFeeVaultImpls.s.sol/8453/run-1793126466487.json new file mode 100644 index 00000000..5ce5bceb --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/records/DeployFeeVaultImpls.s.sol/8453/run-1793126466487.json @@ -0,0 +1,183 @@ +{ + "transactions": [ + { + "hash": "0x9cb2fc979fd90d0ec36c60b6de5e9ee57fdf244cd26d07655af54f69618f0c23", + "transactionType": "CREATE", + "contractName": "SequencerFeeVault", + "contractAddress": "0x31574645d1cc22778e10b394bf3713bea4aa2b68", + "function": null, + "arguments": null, + "transaction": { + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "gas": "0x12ba83", + "value": "0x0", + "input": "0x6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610fbf806100d65f395ff3fe6080604052600436106100f2575f3560e01c80638312f14911610087578063d0e12f9011610057578063d0e12f90146102e9578063d3e5792b14610318578063d4ff9218146100fd578063dad544e01461032c575f80fd5b80638312f1491461028257806384411d651461029757806385b5b14d146102ab578063b49dc741146102ca575f80fd5b80633e47158c116100c25780633e47158c146101af57806354fd4d50146101c357806366d003ac1461021857806382356d8a14610244575f80fd5b80630d9019e1146100fd578063307f29621461014d5780633bbed4a01461016e5780633ccfd60b1461018d575f80fd5b366100f957005b5f80fd5b348015610108575f80fd5b5060025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610158575f80fd5b5061016c610167366004610d6d565b610340565b005b348015610179575f80fd5b5061016c610188366004610daa565b6103e6565b348015610198575f80fd5b506101a161046d565b604051908152602001610144565b3480156101ba575f80fd5b5061012361077b565b3480156101ce575f80fd5b5061020b6040518060400160405280600581526020017f312e362e3000000000000000000000000000000000000000000000000000000081525081565b6040516101449190610dc5565b348015610223575f80fd5b506002546101239073ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f575f80fd5b506002546102759074010000000000000000000000000000000000000000900460ff1681565b6040516101449190610e7e565b34801561028d575f80fd5b506101a160015481565b3480156102a2575f80fd5b506101a15f5481565b3480156102b6575f80fd5b5061016c6102c5366004610e92565b610981565b3480156102d5575f80fd5b5061016c6102e4366004610ea9565b6109c7565b3480156102f4575f80fd5b5060025474010000000000000000000000000000000000000000900460ff16610275565b348015610323575f80fd5b506001546101a1565b348015610337575f80fd5b50610123610be3565b610348610c5d565b600280547401000000000000000000000000000000000000000080820460ff1692849290917fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909116908360018111156103a4576103a4610e18565b02179055507ff2ec44eb1c3b3acd547b76333eb2c4b27eee311860c57a9fdb04c95f62398fc881836040516103da929190610ee4565b60405180910390a15050565b6103ee610c5d565b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f62e69886a5df0ba8ffcacbfc1388754e7abd9bde24b036354c561f1acd4e459391016103da565b5f60015447101561052b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b479050805f8082825461053e9190610f2c565b90915550506002546040805183815273ffffffffffffffffffffffffffffffffffffffff909216602083018190523383830152905190917fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba919081900360600190a16002546040517f38e04cbeb8c10f8f568618aa75be0f10b6729b8b4237743b4de20cbcde2839ee916105f39185918591339174010000000000000000000000000000000000000000900460ff1690610f3f565b60405180910390a1600160025474010000000000000000000000000000000000000000900460ff16600181111561062c5761062c610e18565b036106d0575f61063c8284610cb5565b9050806106cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4665655661756c743a206661696c656420746f2073656e642045544820746f2060448201527f4c322066656520726563697069656e74000000000000000000000000000000006064820152608401610522565b505090565b6040517fc2b3e5ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015262061a806024820152606060448201525f60648201527342000000000000000000000000000000000000169063c2b3e5ac9084906084015f604051808303818588803b158015610760575f80fd5b505af1158015610772573d5f803e3d5ffd5b50505050505090565b5f806107a57fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff8116156107c857919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000081525051600261080b9190610f80565b604080513060208201525f918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790610865906060015b604051602081830303815290604052805190602001205490565b1461089c576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513060208201526001918101919091525f906108bd9060600161084b565b905073ffffffffffffffffffffffffffffffffffffffff81161561094f578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610924573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109489190610f97565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610989610c5d565b600180549082905560408051828152602081018490527f895a067c78583e800418fabf3da26a9496aab2ff3429cebdf7fefa642b2e420391016103da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f81158015610a115750825b90505f8267ffffffffffffffff166001148015610a2d5750303b155b905081158015610a3b575080155b15610a72576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610ad35784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610adb610cc8565b6002805473ffffffffffffffffffffffffffffffffffffffff8a167fffffffffffffffffffffffff000000000000000000000000000000000000000082168117835560018a81558993927fffffffffffffffffffffff000000000000000000000000000000000000000000169091179074010000000000000000000000000000000000000000908490811115610b7357610b73610e18565b02179055508315610bd95784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b5f610bec61077b565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c589190610f97565b905090565b33610c66610be3565b73ffffffffffffffffffffffffffffffffffffffff1614610cb3576040517f7f12c64b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f610cc1835a84610d49565b9392505050565b33610cd161077b565b73ffffffffffffffffffffffffffffffffffffffff1614158015610d12575033610cf9610be3565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610cb3576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f805f858888f1949350505050565b803560028110610d68575f80fd5b919050565b5f60208284031215610d7d575f80fd5b610cc182610d5a565b73ffffffffffffffffffffffffffffffffffffffff81168114610da7575f80fd5b50565b5f60208284031215610dba575f80fd5b8135610cc181610d86565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60028110610e7a577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9052565b60208101610e8c8284610e45565b92915050565b5f60208284031215610ea2575f80fd5b5035919050565b5f805f60608486031215610ebb575f80fd5b8335610ec681610d86565b925060208401359150610edb60408501610d5a565b90509250925092565b60408101610ef28285610e45565b610cc16020830184610e45565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610e8c57610e8c610eff565b84815273ffffffffffffffffffffffffffffffffffffffff84811660208301528316604082015260808101610f776060830184610e45565b95945050505050565b8082028115828204841417610e8c57610e8c610eff565b5f60208284031215610fa7575f80fd5b8151610cc181610d8656fea164736f6c6343000819000a", + "nonce": "0x1e", + "chainId": "0x2105" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xd466d251d8552bf250a4f2aacbb2a441a8bbe08677b85daec02adc61d3794b15", + "transactionType": "CREATE", + "contractName": "BaseFeeVault", + "contractAddress": "0x113b0749737b06d94267fe59e935d38e13849def", + "function": null, + "arguments": null, + "transaction": { + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "gas": "0x12ae53", + "value": "0x0", + "input": "0x6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610fb4806100d65f395ff3fe6080604052600436106100e7575f3560e01c806382356d8a11610087578063b49dc74111610057578063b49dc741146102bf578063d0e12f90146102de578063d3e5792b1461030d578063dad544e014610321575f80fd5b806382356d8a146102395780638312f1491461027757806384411d651461028c57806385b5b14d146102a0575f80fd5b80633ccfd60b116100c25780633ccfd60b146101825780633e47158c146101a457806354fd4d50146101b857806366d003ac1461020d575f80fd5b80630d9019e1146100f2578063307f2962146101425780633bbed4a014610163575f80fd5b366100ee57005b5f80fd5b3480156100fd575f80fd5b5060025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561014d575f80fd5b5061016161015c366004610d62565b610335565b005b34801561016e575f80fd5b5061016161017d366004610d9f565b6103db565b34801561018d575f80fd5b50610196610462565b604051908152602001610139565b3480156101af575f80fd5b50610118610770565b3480156101c3575f80fd5b506102006040518060400160405280600581526020017f312e362e3000000000000000000000000000000000000000000000000000000081525081565b6040516101399190610dba565b348015610218575f80fd5b506002546101189073ffffffffffffffffffffffffffffffffffffffff1681565b348015610244575f80fd5b5060025461026a9074010000000000000000000000000000000000000000900460ff1681565b6040516101399190610e73565b348015610282575f80fd5b5061019660015481565b348015610297575f80fd5b506101965f5481565b3480156102ab575f80fd5b506101616102ba366004610e87565b610976565b3480156102ca575f80fd5b506101616102d9366004610e9e565b6109bc565b3480156102e9575f80fd5b5060025474010000000000000000000000000000000000000000900460ff1661026a565b348015610318575f80fd5b50600154610196565b34801561032c575f80fd5b50610118610bd8565b61033d610c52565b600280547401000000000000000000000000000000000000000080820460ff1692849290917fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091169083600181111561039957610399610e0d565b02179055507ff2ec44eb1c3b3acd547b76333eb2c4b27eee311860c57a9fdb04c95f62398fc881836040516103cf929190610ed9565b60405180910390a15050565b6103e3610c52565b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f62e69886a5df0ba8ffcacbfc1388754e7abd9bde24b036354c561f1acd4e459391016103cf565b5f600154471015610520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b479050805f808282546105339190610f21565b90915550506002546040805183815273ffffffffffffffffffffffffffffffffffffffff909216602083018190523383830152905190917fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba919081900360600190a16002546040517f38e04cbeb8c10f8f568618aa75be0f10b6729b8b4237743b4de20cbcde2839ee916105e89185918591339174010000000000000000000000000000000000000000900460ff1690610f34565b60405180910390a1600160025474010000000000000000000000000000000000000000900460ff16600181111561062157610621610e0d565b036106c5575f6106318284610caa565b9050806106c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4665655661756c743a206661696c656420746f2073656e642045544820746f2060448201527f4c322066656520726563697069656e74000000000000000000000000000000006064820152608401610517565b505090565b6040517fc2b3e5ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015262061a806024820152606060448201525f60648201527342000000000000000000000000000000000000169063c2b3e5ac9084906084015f604051808303818588803b158015610755575f80fd5b505af1158015610767573d5f803e3d5ffd5b50505050505090565b5f8061079a7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff8116156107bd57919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000008152505160026108009190610f75565b604080513060208201525f918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000919091179061085a906060015b604051602081830303815290604052805190602001205490565b14610891576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513060208201526001918101919091525f906108b290606001610840565b905073ffffffffffffffffffffffffffffffffffffffff811615610944578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093d9190610f8c565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e610c52565b600180549082905560408051828152602081018490527f895a067c78583e800418fabf3da26a9496aab2ff3429cebdf7fefa642b2e420391016103cf565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f81158015610a065750825b90505f8267ffffffffffffffff166001148015610a225750303b155b905081158015610a30575080155b15610a67576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610ac85784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610ad0610cbd565b6002805473ffffffffffffffffffffffffffffffffffffffff8a167fffffffffffffffffffffffff000000000000000000000000000000000000000082168117835560018a81558993927fffffffffffffffffffffff000000000000000000000000000000000000000000169091179074010000000000000000000000000000000000000000908490811115610b6857610b68610e0d565b02179055508315610bce5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b5f610be1610770565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c29573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c4d9190610f8c565b905090565b33610c5b610bd8565b73ffffffffffffffffffffffffffffffffffffffff1614610ca8576040517f7f12c64b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f610cb6835a84610d3e565b9392505050565b33610cc6610770565b73ffffffffffffffffffffffffffffffffffffffff1614158015610d07575033610cee610bd8565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610ca8576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f805f858888f1949350505050565b803560028110610d5d575f80fd5b919050565b5f60208284031215610d72575f80fd5b610cb682610d4f565b73ffffffffffffffffffffffffffffffffffffffff81168114610d9c575f80fd5b50565b5f60208284031215610daf575f80fd5b8135610cb681610d7b565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60028110610e6f577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9052565b60208101610e818284610e3a565b92915050565b5f60208284031215610e97575f80fd5b5035919050565b5f805f60608486031215610eb0575f80fd5b8335610ebb81610d7b565b925060208401359150610ed060408501610d4f565b90509250925092565b60408101610ee78285610e3a565b610cb66020830184610e3a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610e8157610e81610ef4565b84815273ffffffffffffffffffffffffffffffffffffffff84811660208301528316604082015260808101610f6c6060830184610e3a565b95945050505050565b8082028115828204841417610e8157610e81610ef4565b5f60208284031215610f9c575f80fd5b8151610cb681610d7b56fea164736f6c6343000819000a", + "nonce": "0x1f", + "chainId": "0x2105" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xd4e92bd81134a31d6e216a28485ee8bd5e5a829a7e6818225f3b7b2689431f22", + "transactionType": "CREATE", + "contractName": "BaseFeeVault", + "contractAddress": "0x93759dee9d2100ca0a0e3ea10a0e5cc5f07b229b", + "function": null, + "arguments": null, + "transaction": { + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "gas": "0x12ae53", + "value": "0x0", + "input": "0x6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610fb4806100d65f395ff3fe6080604052600436106100e7575f3560e01c806382356d8a11610087578063b49dc74111610057578063b49dc741146102bf578063d0e12f90146102de578063d3e5792b1461030d578063dad544e014610321575f80fd5b806382356d8a146102395780638312f1491461027757806384411d651461028c57806385b5b14d146102a0575f80fd5b80633ccfd60b116100c25780633ccfd60b146101825780633e47158c146101a457806354fd4d50146101b857806366d003ac1461020d575f80fd5b80630d9019e1146100f2578063307f2962146101425780633bbed4a014610163575f80fd5b366100ee57005b5f80fd5b3480156100fd575f80fd5b5060025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561014d575f80fd5b5061016161015c366004610d62565b610335565b005b34801561016e575f80fd5b5061016161017d366004610d9f565b6103db565b34801561018d575f80fd5b50610196610462565b604051908152602001610139565b3480156101af575f80fd5b50610118610770565b3480156101c3575f80fd5b506102006040518060400160405280600581526020017f312e362e3000000000000000000000000000000000000000000000000000000081525081565b6040516101399190610dba565b348015610218575f80fd5b506002546101189073ffffffffffffffffffffffffffffffffffffffff1681565b348015610244575f80fd5b5060025461026a9074010000000000000000000000000000000000000000900460ff1681565b6040516101399190610e73565b348015610282575f80fd5b5061019660015481565b348015610297575f80fd5b506101965f5481565b3480156102ab575f80fd5b506101616102ba366004610e87565b610976565b3480156102ca575f80fd5b506101616102d9366004610e9e565b6109bc565b3480156102e9575f80fd5b5060025474010000000000000000000000000000000000000000900460ff1661026a565b348015610318575f80fd5b50600154610196565b34801561032c575f80fd5b50610118610bd8565b61033d610c52565b600280547401000000000000000000000000000000000000000080820460ff1692849290917fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091169083600181111561039957610399610e0d565b02179055507ff2ec44eb1c3b3acd547b76333eb2c4b27eee311860c57a9fdb04c95f62398fc881836040516103cf929190610ed9565b60405180910390a15050565b6103e3610c52565b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f62e69886a5df0ba8ffcacbfc1388754e7abd9bde24b036354c561f1acd4e459391016103cf565b5f600154471015610520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b479050805f808282546105339190610f21565b90915550506002546040805183815273ffffffffffffffffffffffffffffffffffffffff909216602083018190523383830152905190917fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba919081900360600190a16002546040517f38e04cbeb8c10f8f568618aa75be0f10b6729b8b4237743b4de20cbcde2839ee916105e89185918591339174010000000000000000000000000000000000000000900460ff1690610f34565b60405180910390a1600160025474010000000000000000000000000000000000000000900460ff16600181111561062157610621610e0d565b036106c5575f6106318284610caa565b9050806106c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4665655661756c743a206661696c656420746f2073656e642045544820746f2060448201527f4c322066656520726563697069656e74000000000000000000000000000000006064820152608401610517565b505090565b6040517fc2b3e5ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015262061a806024820152606060448201525f60648201527342000000000000000000000000000000000000169063c2b3e5ac9084906084015f604051808303818588803b158015610755575f80fd5b505af1158015610767573d5f803e3d5ffd5b50505050505090565b5f8061079a7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff8116156107bd57919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000008152505160026108009190610f75565b604080513060208201525f918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000919091179061085a906060015b604051602081830303815290604052805190602001205490565b14610891576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513060208201526001918101919091525f906108b290606001610840565b905073ffffffffffffffffffffffffffffffffffffffff811615610944578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093d9190610f8c565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e610c52565b600180549082905560408051828152602081018490527f895a067c78583e800418fabf3da26a9496aab2ff3429cebdf7fefa642b2e420391016103cf565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f81158015610a065750825b90505f8267ffffffffffffffff166001148015610a225750303b155b905081158015610a30575080155b15610a67576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610ac85784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610ad0610cbd565b6002805473ffffffffffffffffffffffffffffffffffffffff8a167fffffffffffffffffffffffff000000000000000000000000000000000000000082168117835560018a81558993927fffffffffffffffffffffff000000000000000000000000000000000000000000169091179074010000000000000000000000000000000000000000908490811115610b6857610b68610e0d565b02179055508315610bce5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b5f610be1610770565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c29573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c4d9190610f8c565b905090565b33610c5b610bd8565b73ffffffffffffffffffffffffffffffffffffffff1614610ca8576040517f7f12c64b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f610cb6835a84610d3e565b9392505050565b33610cc6610770565b73ffffffffffffffffffffffffffffffffffffffff1614158015610d07575033610cee610bd8565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610ca8576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f805f858888f1949350505050565b803560028110610d5d575f80fd5b919050565b5f60208284031215610d72575f80fd5b610cb682610d4f565b73ffffffffffffffffffffffffffffffffffffffff81168114610d9c575f80fd5b50565b5f60208284031215610daf575f80fd5b8135610cb681610d7b565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60028110610e6f577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9052565b60208101610e818284610e3a565b92915050565b5f60208284031215610e97575f80fd5b5035919050565b5f805f60608486031215610eb0575f80fd5b8335610ebb81610d7b565b925060208401359150610ed060408501610d4f565b90509250925092565b60408101610ee78285610e3a565b610cb66020830184610e3a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610e8157610e81610ef4565b84815273ffffffffffffffffffffffffffffffffffffffff84811660208301528316604082015260808101610f6c6060830184610e3a565b95945050505050565b8082028115828204841417610e8157610e81610ef4565b5f60208284031215610f9c575f80fd5b8151610cb681610d7b56fea164736f6c6343000819000a", + "nonce": "0x20", + "chainId": "0x2105" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x208647b", + "logs": [ + { + "address": "0x31574645d1cc22778e10b394bf3713bea4aa2b68", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x659e93dc0945969c8dd3cc343fe35f8c37277505b21e8a6647773c61851a6d6d", + "blockNumber": "0x32b49a9", + "blockTimestamp": "0x6ae0f035", + "transactionHash": "0x9cb2fc979fd90d0ec36c60b6de5e9ee57fdf244cd26d07655af54f69618f0c23", + "transactionIndex": "0x95", + "logIndex": "0x2dd", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000400000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x9cb2fc979fd90d0ec36c60b6de5e9ee57fdf244cd26d07655af54f69618f0c23", + "transactionIndex": "0x95", + "blockHash": "0x659e93dc0945969c8dd3cc343fe35f8c37277505b21e8a6647773c61851a6d6d", + "blockNumber": "0x32b49a9", + "gasUsed": "0xe6816", + "effectiveGasPrice": "0x53f3b9", + "blobGasUsed": "0x4d408", + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "to": null, + "contractAddress": "0x31574645d1cc22778e10b394bf3713bea4aa2b68", + "daFootprintGasScalar": "0x94", + "l1BaseFeeScalar": "0x8dd", + "l1BlobBaseFee": "0x5bce59", + "l1BlobBaseFeeScalar": "0x101c12", + "l1Fee": "0x5157cda6b", + "l1GasPrice": "0x656688a", + "l1GasUsed": "0x85a2" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x237c550", + "logs": [ + { + "address": "0x113b0749737b06d94267fe59e935d38e13849def", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0xaf0bf5207727c7da1b52503872898aad5f2417660340d000f633e6f5b9ab3bba", + "blockNumber": "0x32b49ad", + "blockTimestamp": "0x6ae0f03d", + "transactionHash": "0xd466d251d8552bf250a4f2aacbb2a441a8bbe08677b85daec02adc61d3794b15", + "transactionIndex": "0xa3", + "logIndex": "0x2c2", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xd466d251d8552bf250a4f2aacbb2a441a8bbe08677b85daec02adc61d3794b15", + "transactionIndex": "0xa3", + "blockHash": "0xaf0bf5207727c7da1b52503872898aad5f2417660340d000f633e6f5b9ab3bba", + "blockNumber": "0x32b49ad", + "gasUsed": "0xe5eb6", + "effectiveGasPrice": "0x53f3b9", + "blobGasUsed": "0x4d374", + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "to": null, + "contractAddress": "0x113b0749737b06d94267fe59e935d38e13849def", + "daFootprintGasScalar": "0x94", + "l1BaseFeeScalar": "0x8dd", + "l1BlobBaseFee": "0x5cd778", + "l1BlobBaseFeeScalar": "0x101c12", + "l1Fee": "0x4eb195303", + "l1GasPrice": "0x5ae1ed2", + "l1GasUsed": "0x8595" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x18f281e", + "logs": [ + { + "address": "0x93759dee9d2100ca0a0e3ea10a0e5cc5f07b229b", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockNumber": "0x32b49b0", + "blockTimestamp": "0x6ae0f043", + "transactionHash": "0xd4e92bd81134a31d6e216a28485ee8bd5e5a829a7e6818225f3b7b2689431f22", + "transactionIndex": "0x86", + "logIndex": "0x22e", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000010000000000000000000000000000000000000000000000800000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xd4e92bd81134a31d6e216a28485ee8bd5e5a829a7e6818225f3b7b2689431f22", + "transactionIndex": "0x86", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockNumber": "0x32b49b0", + "gasUsed": "0xe5eb6", + "effectiveGasPrice": "0x53f3b9", + "blobGasUsed": "0x4d374", + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "to": null, + "contractAddress": "0x93759dee9d2100ca0a0e3ea10a0e5cc5f07b229b", + "daFootprintGasScalar": "0x94", + "l1BaseFeeScalar": "0x8dd", + "l1BlobBaseFee": "0x512622", + "l1BlobBaseFeeScalar": "0x101c12", + "l1Fee": "0x34a4de62", + "l1GasPrice": "0x5485277", + "l1GasUsed": "0x8595" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1793126466487, + "chain": 8453, + "commit": "9639477" +} \ No newline at end of file diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/records/DeployL2PredeployImpls.s.sol/8453/run-1793126439373.json b/active/evm/tasks/2026-10-07-denim-upgrade/records/DeployL2PredeployImpls.s.sol/8453/run-1793126439373.json new file mode 100644 index 00000000..a4d39ea5 --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/records/DeployL2PredeployImpls.s.sol/8453/run-1793126439373.json @@ -0,0 +1,96 @@ +{ + "transactions": [ + { + "hash": "0x1664e01098d54b24ed34c589bb9de6ba226aed57c2d75599afe62cead55fc52f", + "transactionType": "CREATE", + "contractName": "L2ToL1MessagePasser", + "contractAddress": "0xf729d45aa58a015835a745474d4bd18551c3a92c", + "function": null, + "arguments": null, + "transaction": { + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "gas": "0x87538", + "value": "0x0", + "input": "0x608060405234801561001057600080fd5b506106c9806100206000396000f3fe6080604052600436106100695760003560e01c806382e3702d1161004357806382e3702d14610120578063c2b3e5ac14610160578063ecc704281461017357600080fd5b80633f827a5a1461009257806344df8e70146100bf57806354fd4d50146100d457600080fd5b3661008d5761008b33620186a0604051806020016040528060008152506101d8565b005b600080fd5b34801561009e57600080fd5b506100a7600181565b60405161ffff90911681526020015b60405180910390f35b3480156100cb57600080fd5b5061008b61039c565b3480156100e057600080fd5b50604080518082018252600581527f312e322e30000000000000000000000000000000000000000000000000000000602082015290516100b691906104c7565b34801561012c57600080fd5b5061015061013b3660046104e1565b60006020819052908152604090205460ff1681565b60405190151581526020016100b6565b61008b61016e366004610529565b6101d8565b34801561017f57600080fd5b506101ca6001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016100b6565b600061026e6040518060c001604052806102326001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b815233602082015273ffffffffffffffffffffffffffffffffffffffff871660408201523460608201526080810186905260a0018490526103d4565b600081815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055905073ffffffffffffffffffffffffffffffffffffffff8416336103096001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b7f02a52367d10742d8032712c1bb8e0144ff1ec5ffda1ed7d70bb05a27449550543487878760405161033e949392919061062d565b60405180910390a45050600180547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082168301167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b476103a681610421565b60405181907f7967de617a5ac1cc7eba2d6f37570a0135afa950d8bb77cdd35f0d0b4e85a16f90600090a250565b80516020808301516040808501516060860151608087015160a0880151935160009761040497909695910161065d565b604051602081830303815290604052805190602001209050919050565b8060405161042e90610450565b6040518091039082f090508015801561044b573d6000803e3d6000fd5b505050565b6008806106b583390190565b6000815180845260005b8181101561048257602081850181015186830182015201610466565b81811115610494576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006104da602083018461045c565b9392505050565b6000602082840312156104f357600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561053e57600080fd5b833573ffffffffffffffffffffffffffffffffffffffff8116811461056257600080fd5b925060208401359150604084013567ffffffffffffffff8082111561058657600080fd5b818601915086601f83011261059a57600080fd5b8135818111156105ac576105ac6104fa565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156105f2576105f26104fa565b8160405282815289602084870101111561060b57600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b84815283602082015260806040820152600061064c608083018561045c565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526106a860c083018461045c565b9897505050505050505056fe608060405230fffea164736f6c634300080f000a", + "nonce": "0x1c", + "chainId": "0x2105" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x28fac8944aa8a0d6ad5f4e924b2e24da69a40d1d0f7426c52bafc7ad6fbf6caa", + "transactionType": "CREATE", + "contractName": "L1Block", + "contractAddress": "0x8bde8f549f56d405f07e1aa15df9e1fc69839881", + "function": null, + "arguments": null, + "transaction": { + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "gas": "0x8c7c1", + "value": "0x0", + "input": "0x608060405234801561001057600080fd5b50610715806100206000396000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806364ca23ef116100e3578063c59859181161008c578063e81b2c6d11610066578063e81b2c6d146103f0578063f8206140146103f9578063fe3d57101461040257600080fd5b8063c598591814610375578063d844471514610395578063e591b282146103ce57600080fd5b80638b239f73116100bd5780638b239f73146103435780639e8c49661461034c578063b80777ea1461035557600080fd5b806364ca23ef146102ff57806368d5dca6146103135780638381f58a1461032f57600080fd5b80634397dfef1161014557806354fd4d501161011f57806354fd4d501461027b578063550fcdc9146102bd5780635cf24969146102f657600080fd5b80634397dfef1461021a578063440a5e20146102425780634d5d9a2a1461024a57600080fd5b806316d3bc7f1161017657806316d3bc7f146101d657806321326849146102035780633db6be2b1461021257600080fd5b8063015d8eb91461019d578063098999be146101b257806309bd5a60146101ba575b600080fd5b6101b06101ab366004610623565b610433565b005b6101b0610572565b6101c360025481565b6040519081526020015b60405180910390f35b6008546101ea9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101cd565b604051600081526020016101cd565b6101b0610585565b6040805173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee815260126020820152016101cd565b6101b06105af565b6008546102669068010000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016101cd565b60408051808201909152600581527f312e382e3000000000000000000000000000000000000000000000000000000060208201525b6040516101cd9190610695565b60408051808201909152600381527f455448000000000000000000000000000000000000000000000000000000000060208201526102b0565b6101c360015481565b6003546101ea9067ffffffffffffffff1681565b6003546102669068010000000000000000900463ffffffff1681565b6000546101ea9067ffffffffffffffff1681565b6101c360055481565b6101c360065481565b6000546101ea9068010000000000000000900467ffffffffffffffff1681565b600354610266906c01000000000000000000000000900463ffffffff1681565b60408051808201909152600581527f457468657200000000000000000000000000000000000000000000000000000060208201526102b0565b60405173deaddeaddeaddeaddeaddeaddeaddeaddead000181526020016101cd565b6101c360045481565b6101c360075481565b600854610420906c01000000000000000000000000900461ffff1681565b60405161ffff90911681526020016101cd565b3373deaddeaddeaddeaddeaddeaddeaddeaddead0001146104da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4c31426c6f636b3a206f6e6c7920746865206465706f7369746f72206163636f60448201527f756e742063616e20736574204c3120626c6f636b2076616c7565730000000000606482015260840160405180910390fd5b6000805467ffffffffffffffff98891668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116998916999099179890981790975560019490945560029290925560038054919094167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009190911617909255600491909155600555600655565b61057a6105af565b60a43560a01c600855565b61058d6105af565b6dffff00000000000000000000000060b03560901c1660a43560a01c17600855565b73deaddeaddeaddeaddeaddeaddeaddeaddead00013381146105d957633cc50b456000526004601cfd5b60043560801c60035560143560801c60005560243560015560443560075560643560025560843560045550565b803567ffffffffffffffff8116811461061e57600080fd5b919050565b600080600080600080600080610100898b03121561064057600080fd5b61064989610606565b975061065760208a01610606565b9650604089013595506060890135945061067360808a01610606565b979a969950949793969560a0850135955060c08501359460e001359350915050565b600060208083528351808285015260005b818110156106c2578581018301518582016040015282016106a6565b818111156106d4576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea164736f6c634300080f000a", + "nonce": "0x1d", + "chainId": "0x2105" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x22fa6b0", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x1664e01098d54b24ed34c589bb9de6ba226aed57c2d75599afe62cead55fc52f", + "transactionIndex": "0xb3", + "blockHash": "0x95c6edd2cdff7d5a2e530c7a377c0476898cd3d3163e192e1be48a7353478919", + "blockNumber": "0x32b499e", + "gasUsed": "0x6818e", + "effectiveGasPrice": "0x53ec66", + "blobGasUsed": "0x24f6c", + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "to": null, + "contractAddress": "0xf729d45aa58a015835a745474d4bd18551c3a92c", + "daFootprintGasScalar": "0x94", + "l1BaseFeeScalar": "0x8dd", + "l1BlobBaseFee": "0x66b443", + "l1BlobBaseFeeScalar": "0x101c12", + "l1Fee": "0x289583388", + "l1GasPrice": "0x5cd0859", + "l1GasUsed": "0x3fff" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xbd02e1", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x28fac8944aa8a0d6ad5f4e924b2e24da69a40d1d0f7426c52bafc7ad6fbf6caa", + "transactionIndex": "0x48", + "blockHash": "0xf8a20f043eaaa03c67e9b9d1322137bbab7bf09a3431322c8cdfc7e8ea64efa6", + "blockNumber": "0x32b49a2", + "gasUsed": "0x6c10b", + "effectiveGasPrice": "0x53ec66", + "blobGasUsed": "0x26a04", + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "to": null, + "contractAddress": "0x8bde8f549f56d405f07e1aa15df9e1fc69839881", + "daFootprintGasScalar": "0x94", + "l1BaseFeeScalar": "0x8dd", + "l1BlobBaseFee": "0x66b443", + "l1BlobBaseFeeScalar": "0x101c12", + "l1Fee": "0x2a6853b59", + "l1GasPrice": "0x5cd0859", + "l1GasUsed": "0x42df" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1793126439373, + "chain": 8453, + "commit": "9639477" +} \ No newline at end of file diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/records/DeployOperatorFeeVault.s.sol/8453/run-1793126574963.json b/active/evm/tasks/2026-10-07-denim-upgrade/records/DeployOperatorFeeVault.s.sol/8453/run-1793126574963.json new file mode 100644 index 00000000..dfec44c7 --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/records/DeployOperatorFeeVault.s.sol/8453/run-1793126574963.json @@ -0,0 +1,69 @@ +{ + "transactions": [ + { + "hash": "0xdb5bb94ca52481e71c19aafeef112b3800b857973b046b6964951e31a0dba062", + "transactionType": "CREATE", + "contractName": "OperatorFeeVault", + "contractAddress": "0x47b6c3e3c3d8144c83910d26e3b517df4f6058c7", + "function": null, + "arguments": null, + "transaction": { + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "gas": "0x12ae53", + "value": "0x0", + "input": "0x6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610fb4806100d65f395ff3fe6080604052600436106100e7575f3560e01c806382356d8a11610087578063b49dc74111610057578063b49dc741146102bf578063d0e12f90146102de578063d3e5792b1461030d578063dad544e014610321575f80fd5b806382356d8a146102395780638312f1491461027757806384411d651461028c57806385b5b14d146102a0575f80fd5b80633ccfd60b116100c25780633ccfd60b146101825780633e47158c146101a457806354fd4d50146101b857806366d003ac1461020d575f80fd5b80630d9019e1146100f2578063307f2962146101425780633bbed4a014610163575f80fd5b366100ee57005b5f80fd5b3480156100fd575f80fd5b5060025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561014d575f80fd5b5061016161015c366004610d62565b610335565b005b34801561016e575f80fd5b5061016161017d366004610d9f565b6103db565b34801561018d575f80fd5b50610196610462565b604051908152602001610139565b3480156101af575f80fd5b50610118610770565b3480156101c3575f80fd5b506102006040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516101399190610dba565b348015610218575f80fd5b506002546101189073ffffffffffffffffffffffffffffffffffffffff1681565b348015610244575f80fd5b5060025461026a9074010000000000000000000000000000000000000000900460ff1681565b6040516101399190610e73565b348015610282575f80fd5b5061019660015481565b348015610297575f80fd5b506101965f5481565b3480156102ab575f80fd5b506101616102ba366004610e87565b610976565b3480156102ca575f80fd5b506101616102d9366004610e9e565b6109bc565b3480156102e9575f80fd5b5060025474010000000000000000000000000000000000000000900460ff1661026a565b348015610318575f80fd5b50600154610196565b34801561032c575f80fd5b50610118610bd8565b61033d610c52565b600280547401000000000000000000000000000000000000000080820460ff1692849290917fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091169083600181111561039957610399610e0d565b02179055507ff2ec44eb1c3b3acd547b76333eb2c4b27eee311860c57a9fdb04c95f62398fc881836040516103cf929190610ed9565b60405180910390a15050565b6103e3610c52565b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f62e69886a5df0ba8ffcacbfc1388754e7abd9bde24b036354c561f1acd4e459391016103cf565b5f600154471015610520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b479050805f808282546105339190610f21565b90915550506002546040805183815273ffffffffffffffffffffffffffffffffffffffff909216602083018190523383830152905190917fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba919081900360600190a16002546040517f38e04cbeb8c10f8f568618aa75be0f10b6729b8b4237743b4de20cbcde2839ee916105e89185918591339174010000000000000000000000000000000000000000900460ff1690610f34565b60405180910390a1600160025474010000000000000000000000000000000000000000900460ff16600181111561062157610621610e0d565b036106c5575f6106318284610caa565b9050806106c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4665655661756c743a206661696c656420746f2073656e642045544820746f2060448201527f4c322066656520726563697069656e74000000000000000000000000000000006064820152608401610517565b505090565b6040517fc2b3e5ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015262061a806024820152606060448201525f60648201527342000000000000000000000000000000000000169063c2b3e5ac9084906084015f604051808303818588803b158015610755575f80fd5b505af1158015610767573d5f803e3d5ffd5b50505050505090565b5f8061079a7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff8116156107bd57919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000008152505160026108009190610f75565b604080513060208201525f918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000919091179061085a906060015b604051602081830303815290604052805190602001205490565b14610891576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513060208201526001918101919091525f906108b290606001610840565b905073ffffffffffffffffffffffffffffffffffffffff811615610944578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093d9190610f8c565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e610c52565b600180549082905560408051828152602081018490527f895a067c78583e800418fabf3da26a9496aab2ff3429cebdf7fefa642b2e420391016103cf565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f81158015610a065750825b90505f8267ffffffffffffffff166001148015610a225750303b155b905081158015610a30575080155b15610a67576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610ac85784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610ad0610cbd565b6002805473ffffffffffffffffffffffffffffffffffffffff8a167fffffffffffffffffffffffff000000000000000000000000000000000000000082168117835560018a81558993927fffffffffffffffffffffff000000000000000000000000000000000000000000169091179074010000000000000000000000000000000000000000908490811115610b6857610b68610e0d565b02179055508315610bce5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b5f610be1610770565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c29573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c4d9190610f8c565b905090565b33610c5b610bd8565b73ffffffffffffffffffffffffffffffffffffffff1614610ca8576040517f7f12c64b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f610cb6835a84610d3e565b9392505050565b33610cc6610770565b73ffffffffffffffffffffffffffffffffffffffff1614158015610d07575033610cee610bd8565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610ca8576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f805f858888f1949350505050565b803560028110610d5d575f80fd5b919050565b5f60208284031215610d72575f80fd5b610cb682610d4f565b73ffffffffffffffffffffffffffffffffffffffff81168114610d9c575f80fd5b50565b5f60208284031215610daf575f80fd5b8135610cb681610d7b565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60028110610e6f577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9052565b60208101610e818284610e3a565b92915050565b5f60208284031215610e97575f80fd5b5035919050565b5f805f60608486031215610eb0575f80fd5b8335610ebb81610d7b565b925060208401359150610ed060408501610d4f565b90509250925092565b60408101610ee78285610e3a565b610cb66020830184610e3a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610e8157610e81610ef4565b84815273ffffffffffffffffffffffffffffffffffffffff84811660208301528316604082015260808101610f6c6060830184610e3a565b95945050505050565b8082028115828204841417610e8157610e81610ef4565b5f60208284031215610f9c575f80fd5b8151610cb681610d7b56fea164736f6c6343000819000a", + "nonce": "0x27", + "chainId": "0x2105" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x16dbb03", + "logs": [ + { + "address": "0x47b6c3e3c3d8144c83910d26e3b517df4f6058c7", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockNumber": "0x32b49e6", + "blockTimestamp": "0x6ae0f0af", + "transactionHash": "0xdb5bb94ca52481e71c19aafeef112b3800b857973b046b6964951e31a0dba062", + "transactionIndex": "0x30", + "logIndex": "0x266", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800004100000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xdb5bb94ca52481e71c19aafeef112b3800b857973b046b6964951e31a0dba062", + "transactionIndex": "0x30", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockNumber": "0x32b49e6", + "gasUsed": "0xe5eb6", + "effectiveGasPrice": "0x5499fa", + "blobGasUsed": "0x4d374", + "from": "0x644e3dedb0e4f83bfcf8f9992964d240224b74dc", + "to": null, + "contractAddress": "0x47b6c3e3c3d8144c83910d26e3b517df4f6058c7", + "daFootprintGasScalar": "0x94", + "l1BaseFeeScalar": "0x8dd", + "l1BlobBaseFee": "0x6060fc", + "l1BlobBaseFeeScalar": "0x101c12", + "l1Fee": "0x44c2336c", + "l1GasPrice": "0x7fdbfd9", + "l1GasUsed": "0x8595" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1793126574963, + "chain": 8453, + "commit": "9639477" +} \ No newline at end of file From df6985065124c53f64251132e9ba32700c1798c5 Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Tue, 27 Oct 2026 16:19:52 -0400 Subject: [PATCH 12/16] chore(mainnet): add Denim validation files --- .../mainnet/validations/base-signer.json | 150 ++++++++++++++++++ .../validations/security-council-signer.json | 150 ++++++++++++++++++ .../2026-10-07-denim-upgrade/status.json | 4 +- 3 files changed, 302 insertions(+), 2 deletions(-) create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/validations/base-signer.json create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/validations/security-council-signer.json diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/validations/base-signer.json b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/validations/base-signer.json new file mode 100644 index 00000000..ce38b01f --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/validations/base-signer.json @@ -0,0 +1,150 @@ +{ + "cmd": "DISPUTE_GAME_FACTORY_PROXY=0x43edB88C4B80fDD2AdFF2412A7BebF9dF42cB40e GAME_TYPE=621 OLD_AGGREGATE_VERIFIER=0xeF9eCeA15265321753047EBF7D54C858D53cB94f FAST_BLOCK_INTERVAL=6000 FAST_INTERMEDIATE_BLOCK_INTERVAL=300 AGGREGATE_VERIFIER_TEE_IMAGE_HASH=0x73181275ec86503b629510176b5bedec00309060b3f4ff5d8e55d9e83dad5cbd AGGREGATE_VERIFIER_ZK_RANGE_HASH=0x3d3713d31a8936563bc56791040067131bb3fa3c0ab8b5e65e9c4cc0755b5fdb AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH=0x00d5a43068d7a9d1eac440a790b776c749ae6516c43f1a572226190cef6fd45a PROXY_ADMIN_OWNER=0x7bB41C3008B3f03FE483B28b8DB90e19Cf07595c L1_PROXY_ADMIN=0x0475cBCAebd9CE8AfA5025828d5b98DFb67E059E NEW_AGGREGATE_VERIFIER=0xc08b8fFAF04Abb1d7013B74a0E57Eccbd7fa5A70 PROTOCOL_VERSIONS_DENIM_ACTIVATION_TIMESTAMP=1793901600 PROTOCOL_VERSIONS_CURRENT_MINIMUM_PROTOCOL_VERSION=79228162588051313896972091392 PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION=79228162606498057966386675712 OPTIMISM_PORTAL=0x49048044D57e1C92A77f79988d21Fa8fAF74E97e L2_RPC_URL=https://mainnet.base.org L2_TO_L1_MESSAGE_PASSER_IMPL=0xF729d45aA58A015835A745474D4bd18551C3A92c L1_BLOCK_IMPL=0x8BDE8F549F56D405f07e1aA15Df9e1FC69839881 SEQUENCER_FEE_VAULT_IMPL=0x31574645D1Cc22778e10b394BF3713beA4aa2B68 BASE_FEE_VAULT_IMPL=0x113B0749737B06D94267fe59e935D38e13849deF L1_FEE_VAULT_IMPL=0x93759deE9D2100Ca0a0e3EA10A0e5Cc5f07b229B FEE_VAULT_RECIPIENT=0x09C7bAD99688a55a2e83644BFAed09e62bDcCcBA FEE_VAULT_MIN_WITHDRAWAL_AMOUNT=2000000000000000000 FEE_VAULT_WITHDRAWAL_NETWORK=1 CB_MULTISIG=0x9855054731540A48b28990B63DcF4f33d8AE46A1 BASE_SECURITY_COUNCIL=0x20AcF55A3DCfe07fC4cecaCFa1628F788EC8A4Dd FACTORY_BRIDGE=0x4200000000000000000000000000000000000014 REMOTE_CHAIN_ID=1 L1_CROSS_DOMAIN_MESSENGER=0x866E82a600A1414e583f7F13623F1aC5d58b0Afa L1_STANDARD_BRIDGE=0x3154Cf16ccdb4C6d922629664174b904d80F2C35 L1_ERC721_BRIDGE=0x608d94945A64503E642E6370Ec598e519a2C1E53 ERC20_FACTORY_BRIDGE=0x4200000000000000000000000000000000000010 OPERATOR_FEE_VAULT_RECIPIENT=0x4200000000000000000000000000000000000019 OPERATOR_FEE_VAULT_MIN_WITHDRAWAL_AMOUNT=0 OPERATOR_FEE_VAULT_WITHDRAWAL_NETWORK=1 ERC721_FACTORY_IMPL=0x6e4f4f3E193880339c79605F88a2CD15370C8e02 OPERATOR_FEE_VAULT_IMPL=0x47B6C3e3C3d8144c83910D26E3b517DF4f6058c7 SCHEMA_REGISTRY_IMPL=0xA88AB4351cC11acd42Ca148cd98Cfd91294Aa7BD EAS_IMPL=0xb6288DE3f61E3aCfAf4f1b0923656e2ab78C1Ad4 MESSENGER_IMPL=0xFe016829CbD44B469a4Bb76Ed95343A9458DCbA6 BRIDGE_IMPL=0xff312C3496f0848CD94d71dC06C434D487A46a10 ERC20_FACTORY_IMPL=0x87481a9CBf0aABf9a5f92838F51D9Ca635a33878 ERC721_BRIDGE_IMPL=0x6cf5489360C17e648d9009c74019699aa716d60c LEGACY_MIGRATOR=0x690D24732FB1Ed4869dCA5Cd2820FE54272aad09 mise exec -- forge script --rpc-url https://eth-mainnet.public.blastapi.io tasks/2026-10-07-denim-upgrade/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol:ExecuteDenimUpgradeWithAllL2Predeploys --sig sign(address[]) [0x9855054731540A48b28990B63DcF4f33d8AE46A1] --sender 0xf9e320f3dA12E68af219d9E2A490Dd649f6B177c", + "ledgerId": 0, + "rpcUrl": "https://eth-mainnet.public.blastapi.io", + "expectedDomainAndMessageHashes": { + "address": "0x7bB41C3008B3f03FE483B28b8DB90e19Cf07595c", + "domainHash": "0x88aac3dc27cc1618ec43a87b3df21482acd24d172027ba3fbb5a5e625d895a0b", + "messageHash": "0xb0feaf90bb247427955bfaf940077bde2fe6de051702dd52f41c5de191f04bf9" + }, + "stateOverrides": [ + { + "name": "Proxy Admin Owner - Mainnet", + "address": "0x7bB41C3008B3f03FE483B28b8DB90e19Cf07595c", + "overrides": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Override the threshold to 1 so the transaction simulation can occur.", + "allowDifference": false + } + ] + }, + { + "name": "CB Coordinator Safe - Mainnet", + "address": "0x9855054731540A48b28990B63DcF4f33d8AE46A1", + "overrides": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Override the threshold to 1 so the transaction simulation can occur.", + "allowDifference": false + }, + { + "key": "0xfd68571aabccc3eea9bebf2e664e5900363357741825db14ca8c17360a69eb68", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Simulates an approval from msg.sender in order for the task simulation to succeed.", + "allowDifference": false + } + ] + } + ], + "stateChanges": [ + { + "name": "Dispute Game Factory Proxy - Mainnet", + "address": "0x43edB88C4B80fDD2AdFF2412A7BebF9dF42cB40e", + "changes": [ + { + "key": "0x32912047a4c082de3e601c4b381c2aa6252270818a4be33442b17fb41b6cf7d6", + "before": "0x000000000000000000000000ef9ecea15265321753047ebf7d54c858d53cb94f", + "after": "0x000000000000000000000000c08b8ffaf04abb1d7013b74a0e57eccbd7fa5a70", + "description": "Updates gameImpls[621] from 0xeF9eCeA15265321753047EBF7D54C858D53cB94f (version 0.2.0) to 0xc08b8fFAF04Abb1d7013B74a0E57Eccbd7fa5A70 (version 0.3.0), which switches the proposal intervals from 600/30 to 6000/300 blocks at Denim. Existing games are unchanged.", + "allowDifference": false + } + ] + }, + { + "name": "OptimismPortal - Mainnet", + "address": "0x49048044D57e1C92A77f79988d21Fa8fAF74E97e", + "changes": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "before": "0x0000000001911912000000000004bdd00000000000000000000000003b9aca00", + "after": "0x000000000191192000000000003b82600000000000000000000000003b9aca00", + "description": "Updates the ResourceMetering parameters (prevBlockNum, prevBoughtGas, prevBaseFee) after the thirteen L2 ProxyAdmin upgrade deposits. The values depend on the L1 block at simulation time, so a signer's own run can differ.", + "allowDifference": true + } + ] + }, + { + "name": "ProtocolVersions - Mainnet", + "address": "0x7480Afc8D99a5c645c247dB5A1e4a4f440e6e095", + "changes": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "before": "0x000000000000000000000000000000000000000000000000000000000000000d", + "after": "0x000000000000000000000000000000000000000000000000000000000000000e", + "description": "Sets the _timestamps array length from 13 to 14, registering Denim as upgrade id 13.", + "allowDifference": false + }, + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "before": "0x000000000000000000000000000000000000000000000000000000000000000e", + "after": "0x000000000000000000000000000000000000000000000000000000000000000f", + "description": "Sets the _upgradeScheduleId array length from 14 to 15: one more hash-chain link for the new upgrade.", + "allowDifference": false + }, + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "before": "0x0000000000000000000000000000000000000001000000040000000200000000", + "after": "0x0000000000000000000000000000000000000001000000050000000100000000", + "description": "Raises minimumProtocolVersion from v1.4.2 to v1.5.1 (0x00000001_00000005_00000001_00000000).", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5adc", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0xa7e0db8fbcc1f948bc5fdb3c8957f40a430e1b24942b3635543abb4d6934b68d", + "description": "_upgradeScheduleId[14]: hash-chain link committing to upgrade id 13 (denim) at 1793901600. As the tail of the chain, this is the registry's new scheduleId.", + "allowDifference": false + }, + { + "key": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf9", + "before": "0x000000000000000000000000000000000000000000000000000000006abd4e20", + "after": "0x00000000000000000000000000000000000000006aecc420000000006abd4e20", + "description": "_timestamps[12..15] packed: the previous last entry stays at 1790791200 and denim (id 13) is scheduled for 1793901600, which is 2026-11-05 18:00:00 UTC.", + "allowDifference": false + } + ] + }, + { + "name": "Proxy Admin Owner - Mainnet", + "address": "0x7bB41C3008B3f03FE483B28b8DB90e19Cf07595c", + "changes": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "before": "0x0000000000000000000000000000000000000000000000000000000000000016", + "after": "0x0000000000000000000000000000000000000000000000000000000000000017", + "description": "Increments the nonce", + "allowDifference": false + }, + { + "key": "0x4fd11b9b29a86d9e5f49a5b513fe0991eb063937fa9bc604e5c828313f1b4132", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Records the nested Safe approval of the Denim upgrade transaction hash from the Coinbase coordinator Safe.", + "allowDifference": false + } + ] + }, + { + "name": "CB Coordinator Safe - Mainnet", + "address": "0x9855054731540A48b28990B63DcF4f33d8AE46A1", + "changes": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "before": "0x0000000000000000000000000000000000000000000000000000000000000024", + "after": "0x0000000000000000000000000000000000000000000000000000000000000025", + "description": "Increments the nonce", + "allowDifference": false + } + ] + } + ], + "balanceChanges": [], + "taskOriginConfig": { + "taskCreator": { + "commonName": "jack.chuma@coinbase.com" + } + } +} diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/validations/security-council-signer.json b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/validations/security-council-signer.json new file mode 100644 index 00000000..072a1527 --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/config/mainnet/validations/security-council-signer.json @@ -0,0 +1,150 @@ +{ + "cmd": "DISPUTE_GAME_FACTORY_PROXY=0x43edB88C4B80fDD2AdFF2412A7BebF9dF42cB40e GAME_TYPE=621 OLD_AGGREGATE_VERIFIER=0xeF9eCeA15265321753047EBF7D54C858D53cB94f FAST_BLOCK_INTERVAL=6000 FAST_INTERMEDIATE_BLOCK_INTERVAL=300 AGGREGATE_VERIFIER_TEE_IMAGE_HASH=0x73181275ec86503b629510176b5bedec00309060b3f4ff5d8e55d9e83dad5cbd AGGREGATE_VERIFIER_ZK_RANGE_HASH=0x3d3713d31a8936563bc56791040067131bb3fa3c0ab8b5e65e9c4cc0755b5fdb AGGREGATE_VERIFIER_ZK_AGGREGATE_HASH=0x00d5a43068d7a9d1eac440a790b776c749ae6516c43f1a572226190cef6fd45a PROXY_ADMIN_OWNER=0x7bB41C3008B3f03FE483B28b8DB90e19Cf07595c L1_PROXY_ADMIN=0x0475cBCAebd9CE8AfA5025828d5b98DFb67E059E NEW_AGGREGATE_VERIFIER=0xc08b8fFAF04Abb1d7013B74a0E57Eccbd7fa5A70 PROTOCOL_VERSIONS_DENIM_ACTIVATION_TIMESTAMP=1793901600 PROTOCOL_VERSIONS_CURRENT_MINIMUM_PROTOCOL_VERSION=79228162588051313896972091392 PROTOCOL_VERSIONS_MINIMUM_PROTOCOL_VERSION=79228162606498057966386675712 OPTIMISM_PORTAL=0x49048044D57e1C92A77f79988d21Fa8fAF74E97e L2_RPC_URL=https://mainnet.base.org L2_TO_L1_MESSAGE_PASSER_IMPL=0xF729d45aA58A015835A745474D4bd18551C3A92c L1_BLOCK_IMPL=0x8BDE8F549F56D405f07e1aA15Df9e1FC69839881 SEQUENCER_FEE_VAULT_IMPL=0x31574645D1Cc22778e10b394BF3713beA4aa2B68 BASE_FEE_VAULT_IMPL=0x113B0749737B06D94267fe59e935D38e13849deF L1_FEE_VAULT_IMPL=0x93759deE9D2100Ca0a0e3EA10A0e5Cc5f07b229B FEE_VAULT_RECIPIENT=0x09C7bAD99688a55a2e83644BFAed09e62bDcCcBA FEE_VAULT_MIN_WITHDRAWAL_AMOUNT=2000000000000000000 FEE_VAULT_WITHDRAWAL_NETWORK=1 CB_MULTISIG=0x9855054731540A48b28990B63DcF4f33d8AE46A1 BASE_SECURITY_COUNCIL=0x20AcF55A3DCfe07fC4cecaCFa1628F788EC8A4Dd FACTORY_BRIDGE=0x4200000000000000000000000000000000000014 REMOTE_CHAIN_ID=1 L1_CROSS_DOMAIN_MESSENGER=0x866E82a600A1414e583f7F13623F1aC5d58b0Afa L1_STANDARD_BRIDGE=0x3154Cf16ccdb4C6d922629664174b904d80F2C35 L1_ERC721_BRIDGE=0x608d94945A64503E642E6370Ec598e519a2C1E53 ERC20_FACTORY_BRIDGE=0x4200000000000000000000000000000000000010 OPERATOR_FEE_VAULT_RECIPIENT=0x4200000000000000000000000000000000000019 OPERATOR_FEE_VAULT_MIN_WITHDRAWAL_AMOUNT=0 OPERATOR_FEE_VAULT_WITHDRAWAL_NETWORK=1 ERC721_FACTORY_IMPL=0x6e4f4f3E193880339c79605F88a2CD15370C8e02 OPERATOR_FEE_VAULT_IMPL=0x47B6C3e3C3d8144c83910D26E3b517DF4f6058c7 SCHEMA_REGISTRY_IMPL=0xA88AB4351cC11acd42Ca148cd98Cfd91294Aa7BD EAS_IMPL=0xb6288DE3f61E3aCfAf4f1b0923656e2ab78C1Ad4 MESSENGER_IMPL=0xFe016829CbD44B469a4Bb76Ed95343A9458DCbA6 BRIDGE_IMPL=0xff312C3496f0848CD94d71dC06C434D487A46a10 ERC20_FACTORY_IMPL=0x87481a9CBf0aABf9a5f92838F51D9Ca635a33878 ERC721_BRIDGE_IMPL=0x6cf5489360C17e648d9009c74019699aa716d60c LEGACY_MIGRATOR=0x690D24732FB1Ed4869dCA5Cd2820FE54272aad09 mise exec -- forge script --rpc-url https://eth-mainnet.public.blastapi.io tasks/2026-10-07-denim-upgrade/script/ExecuteDenimUpgradeWithAllL2Predeploys.s.sol:ExecuteDenimUpgradeWithAllL2Predeploys --sig sign(address[]) [0x20AcF55A3DCfe07fC4cecaCFa1628F788EC8A4Dd] --sender 0xbDE1845c879942fC326F247Ad708677733Dd5594", + "ledgerId": 0, + "rpcUrl": "https://eth-mainnet.public.blastapi.io", + "expectedDomainAndMessageHashes": { + "address": "0x7bB41C3008B3f03FE483B28b8DB90e19Cf07595c", + "domainHash": "0x1fbfdc61ceb715f63cb17c56922b88c3a980f1d83873df2b9325a579753e8aa3", + "messageHash": "0x4498374f3aced6c1801775fa49772e2c01f7bad0e75c3a0d9a58e51c63f27d91" + }, + "stateOverrides": [ + { + "name": "Security Council Safe - Mainnet", + "address": "0x20AcF55A3DCfe07fC4cecaCFa1628F788EC8A4Dd", + "overrides": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Override the threshold to 1 so the transaction simulation can occur.", + "allowDifference": false + }, + { + "key": "0x9866bfd07f84880c8bba704bfcefea74108e7b260e885b4e537602ea59038bb6", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Simulates an approval from msg.sender in order for the task simulation to succeed.", + "allowDifference": false + } + ] + }, + { + "name": "Proxy Admin Owner - Mainnet", + "address": "0x7bB41C3008B3f03FE483B28b8DB90e19Cf07595c", + "overrides": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Override the threshold to 1 so the transaction simulation can occur.", + "allowDifference": false + } + ] + } + ], + "stateChanges": [ + { + "name": "Security Council Safe - Mainnet", + "address": "0x20AcF55A3DCfe07fC4cecaCFa1628F788EC8A4Dd", + "changes": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "before": "0x0000000000000000000000000000000000000000000000000000000000000010", + "after": "0x0000000000000000000000000000000000000000000000000000000000000011", + "description": "Increments the nonce", + "allowDifference": false + } + ] + }, + { + "name": "Dispute Game Factory Proxy - Mainnet", + "address": "0x43edB88C4B80fDD2AdFF2412A7BebF9dF42cB40e", + "changes": [ + { + "key": "0x32912047a4c082de3e601c4b381c2aa6252270818a4be33442b17fb41b6cf7d6", + "before": "0x000000000000000000000000ef9ecea15265321753047ebf7d54c858d53cb94f", + "after": "0x000000000000000000000000c08b8ffaf04abb1d7013b74a0e57eccbd7fa5a70", + "description": "Updates gameImpls[621] from 0xeF9eCeA15265321753047EBF7D54C858D53cB94f (version 0.2.0) to 0xc08b8fFAF04Abb1d7013B74a0E57Eccbd7fa5A70 (version 0.3.0), which switches the proposal intervals from 600/30 to 6000/300 blocks at Denim. Existing games are unchanged.", + "allowDifference": false + } + ] + }, + { + "name": "OptimismPortal - Mainnet", + "address": "0x49048044D57e1C92A77f79988d21Fa8fAF74E97e", + "changes": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "before": "0x0000000001911934000000000007df760000000000000000000000003b9aca00", + "after": "0x000000000191193400000000004361d60000000000000000000000003b9aca00", + "description": "Updates the ResourceMetering parameters (prevBlockNum, prevBoughtGas, prevBaseFee) after the thirteen L2 ProxyAdmin upgrade deposits. The values depend on the L1 block at simulation time, so a signer's own run can differ.", + "allowDifference": true + } + ] + }, + { + "name": "ProtocolVersions - Mainnet", + "address": "0x7480Afc8D99a5c645c247dB5A1e4a4f440e6e095", + "changes": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "before": "0x000000000000000000000000000000000000000000000000000000000000000d", + "after": "0x000000000000000000000000000000000000000000000000000000000000000e", + "description": "Sets the _timestamps array length from 13 to 14, registering Denim as upgrade id 13.", + "allowDifference": false + }, + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "before": "0x000000000000000000000000000000000000000000000000000000000000000e", + "after": "0x000000000000000000000000000000000000000000000000000000000000000f", + "description": "Sets the _upgradeScheduleId array length from 14 to 15: one more hash-chain link for the new upgrade.", + "allowDifference": false + }, + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "before": "0x0000000000000000000000000000000000000001000000040000000200000000", + "after": "0x0000000000000000000000000000000000000001000000050000000100000000", + "description": "Raises minimumProtocolVersion from v1.4.2 to v1.5.1 (0x00000001_00000005_00000001_00000000).", + "allowDifference": false + }, + { + "key": "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5adc", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0xa7e0db8fbcc1f948bc5fdb3c8957f40a430e1b24942b3635543abb4d6934b68d", + "description": "_upgradeScheduleId[14]: hash-chain link committing to upgrade id 13 (denim) at 1793901600. As the tail of the chain, this is the registry's new scheduleId.", + "allowDifference": false + }, + { + "key": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf9", + "before": "0x000000000000000000000000000000000000000000000000000000006abd4e20", + "after": "0x00000000000000000000000000000000000000006aecc420000000006abd4e20", + "description": "_timestamps[12..15] packed: the previous last entry stays at 1790791200 and denim (id 13) is scheduled for 1793901600, which is 2026-11-05 18:00:00 UTC.", + "allowDifference": false + } + ] + }, + { + "name": "Proxy Admin Owner - Mainnet", + "address": "0x7bB41C3008B3f03FE483B28b8DB90e19Cf07595c", + "changes": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "before": "0x0000000000000000000000000000000000000000000000000000000000000016", + "after": "0x0000000000000000000000000000000000000000000000000000000000000017", + "description": "Increments the nonce", + "allowDifference": false + }, + { + "key": "0x74886423be1a3fa02fbeab0f8200d18b985684cc89c90fbf9a58228c7ac73330", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Records the nested Safe approval of the Denim upgrade transaction hash from the Security Council Safe.", + "allowDifference": false + } + ] + } + ], + "balanceChanges": [], + "taskOriginConfig": { + "taskCreator": { + "commonName": "jack.chuma@coinbase.com" + } + } +} diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/status.json b/active/evm/tasks/2026-10-07-denim-upgrade/status.json index 50134fe1..46759d15 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/status.json +++ b/active/evm/tasks/2026-10-07-denim-upgrade/status.json @@ -2,7 +2,7 @@ "schema_version": 1, "task": "2026-10-07-denim-upgrade", "kind": "active", - "last_updated": "2026-10-22T20:22:28Z", + "last_updated": "2026-10-27T20:19:52Z", "networks": { "sepolia": { "step": "executed", @@ -28,7 +28,7 @@ "executed_tx": "0x9468085edf0a0d5e3dbeea7ab84f13400a496aafc6c21ca8420e4f136c106034" }, "mainnet": { - "step": "authoring", + "step": "review", "pr": "https://github.com/base/contract-deployments/pull/827", "blocksec_ticket": null, "signatures": { From 9eb2b0b24b13fac7f729952eef5dc4e97d12a404 Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Tue, 27 Oct 2026 17:02:21 -0400 Subject: [PATCH 13/16] chore(mainnet): record Denim BlockSec ticket --- active/evm/tasks/2026-10-07-denim-upgrade/status.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/status.json b/active/evm/tasks/2026-10-07-denim-upgrade/status.json index 46759d15..732f98d3 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/status.json +++ b/active/evm/tasks/2026-10-07-denim-upgrade/status.json @@ -2,7 +2,7 @@ "schema_version": 1, "task": "2026-10-07-denim-upgrade", "kind": "active", - "last_updated": "2026-10-27T20:19:52Z", + "last_updated": "2026-10-27T21:02:20Z", "networks": { "sepolia": { "step": "executed", @@ -30,7 +30,7 @@ "mainnet": { "step": "review", "pr": "https://github.com/base/contract-deployments/pull/827", - "blocksec_ticket": null, + "blocksec_ticket": "BLOCKSEC-5463", "signatures": { "base": { "collected": 0, From 23599a68a94035023b3676c0727301f6db1a49fd Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Tue, 27 Oct 2026 17:02:38 -0400 Subject: [PATCH 14/16] chore(mainnet): use the BlockSec ticket URL in status --- active/evm/tasks/2026-10-07-denim-upgrade/status.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/status.json b/active/evm/tasks/2026-10-07-denim-upgrade/status.json index 732f98d3..f2d89c76 100644 --- a/active/evm/tasks/2026-10-07-denim-upgrade/status.json +++ b/active/evm/tasks/2026-10-07-denim-upgrade/status.json @@ -30,7 +30,7 @@ "mainnet": { "step": "review", "pr": "https://github.com/base/contract-deployments/pull/827", - "blocksec_ticket": "BLOCKSEC-5463", + "blocksec_ticket": "https://jira.coinbase-corp.com/servicedesk/customer/portal/92/BLOCKSEC-5463", "signatures": { "base": { "collected": 0, From 17f199912b00ee9b8675f7b8ad7d0b70fa7a434f Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Thu, 29 Oct 2026 11:46:40 -0400 Subject: [PATCH 15/16] chore(mainnet): add Denim task origin signatures Co-authored-by: Toshi --- .../mainnet/base-facilitator-signature.json | 35 +++++++++++++++++++ .../signatures/mainnet/creator-signature.json | 35 +++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/signatures/mainnet/base-facilitator-signature.json create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/signatures/mainnet/creator-signature.json diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/signatures/mainnet/base-facilitator-signature.json b/active/evm/tasks/2026-10-07-denim-upgrade/signatures/mainnet/base-facilitator-signature.json new file mode 100644 index 00000000..f570ba07 --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/signatures/mainnet/base-facilitator-signature.json @@ -0,0 +1,35 @@ +{ + "mediaType": "application/vnd.dev.sigstore.bundle+json;version=0.2", + "verificationMaterial": { + "x509CertificateChain": { + "certificates": [ + { + "rawBytes": "MIIEODCCAiCgAwIBAgIUA6Bps5geUEuunZQT8KTCwm75u/8wDQYJKoZIhvcNAQENBQAwgY8xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzERMA8GA1UEChMIQ29pbmJhc2UxETAPBgNVBAsTCFNlY3VyaXR5MTUwMwYDVQQDEyx1cy1lYXN0LTEucHJvZHVjdGlvbi5pbmZyYXN0cnVjdHVyZS5jYmhxLm5ldDAeFw0yNjEwMjkxNDM4MjhaFw0yNjEwMzAxNDM4MjhaMFoxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzERMA8GA1UEChMIQ29pbmJhc2UxEzARBgNVBAsTCnByb2R1Y3Rpb24wdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATxehIVAujNj0d/uldiExvAHwhPIh2+1gx2MDS0H8U2IMoYhESggw9E3TkLQDqdmaAyhU5gltaw0CWPNEAA6/TePFw8mozLiI6XZQg7fSJfvVQEqTYOIiJEN2wTvu3cs9mjbjBsMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAfBgNVHSMEGDAWgBREEB8LA73HIP4RqjY0dal0pWtLqTAkBgNVHREEHTAbhhlsZGFwOi8vL2Jhc2UtZmFjaWxpdGF0b3JzMA0GCSqGSIb3DQEBDQUAA4ICAQAwm9NHGXWVLl/X+Ej4kAsPr4wSnZrzZXFs5lC+Idaed7xDg5lUG43LLlrvimdFErGOTu1Y92WeRelTd1EYywRZTga/2ANCS/DIquDZHREyI/vCmk17Q6ZhaHHITowIyztGDymCfEkcxdy7zVZG0Ce1nd2+z/2iO+G6N2qIcLFxgKe25iacIX6vxHxEVX/jvGvAi3A7OqJHWJpwREhxS0KgB/6aQlwJmz8bDij+HHMvrvVG4d/k2t3/9o9YbHM7tVH5BiowRuJOureb1Yro031oSJlsrkIysp8K7c9tt/iW3T2AOBa19kP0PPKL4L4azYJlP83TAbxT9cfyaNPh9/5/IzoLx7z1YhTJzaWEDMfbPox9Hk0DmfHD1ZfR1Jj5ydUOW20RdzcB155GJOzPAQKMsrUHJ7w0SsOrcxKUHXslyY5bwAFv/10upW68EtPZRWmBzq+S9vm7NGUyk+DI8D/1ktkmy+55CEGWWtq8LBq1mSlGPH6+sZPJ2UxMG/OCP2CSIp26b7xj/HzMZUxyHh0YQwCVN/diENT1MV/N8cNDnEgrUeehWQIZckL6k16m7FWQLGTxH6BrqOwY0DFE3odeBXLgaZhQW0iG6d89sWMqturK8xcun3sjk71ejpw/8oOT5TARAFfQQg/qGtKjGBKQTSzzzLG5B9RaHhyzbWNRwA==" + }, + { + "rawBytes": "MIIGOjCCBCKgAwIBAgIQKV+GB0AKx2oUPKrKUblYzjANBgkqhkiG9w0BAQ0FADB/MQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xFTATBgNVBAoMDENvaW5iYXNlIExMQzEOMAwGA1UECwwFSW5mcmExJDAiBgNVBAMMG2NiLnByb2R1Y3Rpb24tdXNlMS5jYmhxLm5ldDAeFw0yNjEwMjAxNzUwNDdaFw0yNzAxMjgxODUwNDdaMIGPMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xETAPBgNVBAoTCENvaW5iYXNlMREwDwYDVQQLEwhTZWN1cml0eTE1MDMGA1UEAxMsdXMtZWFzdC0xLnByb2R1Y3Rpb24uaW5mcmFzdHJ1Y3R1cmUuY2JocS5uZXQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCUudD9LxgY2Fi6NL4+PODj4tzyGQzqHgVooyuPA6M4RxfVLtrje1zbjBvPj0ym/2ZJ3B9/jCTREKKOMywJwMMEBmGfNoOjDWV0bJ+ltDbcVThiTk7ktsDx4BRS/aOec1AQQVx67RmanezA0H9L0j7nAlPRyWkjpw/pRUHsORj8HM5ciX05svvNaoif32MHM56Zyj7z8wDVRwJrCD5l36WJV3KGf28I1KP+gtkLCraBLPMTqf+0V9bn2bUMHUlMRvcjflu9og1TkIoN3omVIbAdgEQY4VdVs2Eo42dYjmsejVaO/6cpKPJDP0yJsptm5xds1k6bkSa8guZel/9M9lHHYCDW7du7+26wRAFd+3qG1OSKxS/MI3d2s4lljYG4jK/8TfZVW0z7xkjBCYMDP/igPJe7701qKD70sTrKF44YWhvsqNQGv3VJHuZKQfYnpinecIAvd0KJ9mNYNUPyC9jE+PCK/PJBSLnFeTWYwtlwr4VYagx6tOzn9u+Coek5AOs9sRx1Cd4Si5+Jq+v0Q/nhaycLQoOBW2rDmh+c0eSg8t064ASC6ZyGJ6ukzIrlCDQXCFMfA0DYT+kdpBi9bsUJu+T3c7l5YHHopDJkoOZddmCmP2BSWXmHHJtOMHjcfvU6IEyMeOsGEQM6PUzZop6EvQsPTtD4K1mrkkknTr0w9wIDAQABo4GgMIGdMDcGA1UdEQQwMC6CLHVzLWVhc3QtMS5wcm9kdWN0aW9uLmluZnJhc3RydWN0dXJlLmNiaHEubmV0MBIGA1UdEwEB/wQIMAYBAf8CAQAwHwYDVR0jBBgwFoAUoDYj+uc8N+rzXBs400Ai1dAqEhYwHQYDVR0OBBYEFEQQHwsDvccg/hGqNjR1qXSla0upMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQ0FAAOCAgEAfVEhLNhbsx52vC5Ha8dt6168f2CtoyMCObVT1aQ+9Qhyro9YjYUGjPj5BE4EcLFfZlwFCRgGHkl1dWE4o9rqj+NlPotPVLbZwhY2ZYZycYFLenZd3WTinJyeXourQ3m9edrFIqXuMkvYcXvRdcUhIWIcFyCi+WVt5kEPvGXasmOU+2lIawAs8OTMcuII68LMZfiWbwbUkiUB6KsXU0pmv9JCPldMSkasCcDk1XeCRIEUAN/4ASqZatiOB6I+bXrdspeYZ4hTH22NhnoO6E/boyanoJHjV47YOOg0wT+JOFZsrKbosRKH/NbI46Lnfvemu5UVqqnmzMA519vFz6RPY4fmdE0dHT+jNIG97N62TsHDXUahIBnh8nYF5P9cbiRWQmVYeiNuEaljF1MtgNDyZcYSG3SaMbC4dKQgwEyVAbjL5/OIZhHlpxvKzgWyS8q4dzIhnEMEFzJm80vtMD8+oN1Eh27MnpKiaNYA41wmgOKq9HEMbNb6YDoUZi5VNose9RCoJfQlZER6GxXpKfkOW/E+VJvJrDtLruVCZHeFdrVHolBaDAfYW8iYfg4iNuUVnaJDM5nIhbVHtYPymz0NlPx8r4QcU20mYjHHeexrid9Rq63/UEW0FcWT9IKla/pf5k9RLPiDX5i3s2wyLIW7y/oI1uDLWMeq7Njgi6g3A3w=" + }, + { + "rawBytes": "MIIGMjCCBBqgAwIBAgIUNtuh8wFw/jnlkGdEz7zTllqXWkkwDQYJKoZIhvcNAQENBQAwgZMxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEVMBMGA1UECgwMQ29pbmJhc2UgTExDMQ4wDAYDVQQLDAVJbmZyYTEVMBMGA1UEAwwMQ0ItUk9PVC1DT1JFMSEwHwYJKoZIhvcNAQkBFhJpbmZyYUBjb2luYmFzZS5jb20wHhcNMjIwODIzMTUxNjM4WhcNMzIwODIwMTUxNjM4WjB/MQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xFTATBgNVBAoMDENvaW5iYXNlIExMQzEOMAwGA1UECwwFSW5mcmExJDAiBgNVBAMMG2NiLnByb2R1Y3Rpb24tdXNlMS5jYmhxLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTirwztk1a7TaEKiuT6EXOA8YNfMyBg2SgOG7GoGCHH7hzQlWAgAjQer+NOT8GOuGrCsQwnLvRA05aPcO+mHW7WwKQjmdvXOTqQdYkkJDgn63Qriz/zUaTUAQNsW7yNWXq1GGzO4nXTVsLduA7fO73+4kRH+tFccDolSukl0vtq3UdojSafnKPgv9dWz7hrsp8bBneWgqnUJuHGCigC1dNpHFFvLhamLagcIvr9UKI0VTMJIaCFX5RwaeKaxXpkDrQJxCXMlWh3/AUr45YtqKNzcprYQXTTLuCyyJugeyz4eY+cKbev9d9YylnkZtbUZ/mnOVmYYH2xZsTatEYwhYBEcGP+jjuKleetvLY4+3lZ4n0+MqtD+CyF3NOZMuDGiyKMuxGRVz7nmYDt1gzAcHiOp1rLmuJijxJmbq6Iy6HNHwPIv8LDvWf5pL0rYsqD2ZMO3Otxux8oz9+ecMzxUmgvm+esKIiedJL9L7g40FP49Q+3t1rNFJwXaWYOWhampcaDKhK5Y9geyNEY5PY4LYRo8oGHdzafsXP4HS6nr1EDbhfyT513oNTS6Ev/7HoPr5p2u6r429Tp5S0LlzcrHs5J90/dzS8KtboYakRLdMkC8QbKHt4bTJDgn7nNMyVZ41dCfHt8hB6wiMKDOkRkVHOMbEwg/vNbRDHzmOJTy8+pAgMBAAGjgZAwgY0wHQYDVR0OBBYEFKA2I/rnPDfq81wbONNAItXQKhIWMB8GA1UdIwQYMBaAFPX8720NI8obSJZdXzJyl8Cr0y9ZMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgGGMCcGA1UdJQQgMB4GCCsGAQUFBwMDBggrBgEFBQcDAgYIKwYBBQUHAwEwDQYJKoZIhvcNAQENBQADggIBAJG6oiAnJjCq4QLNutZatz6paDds4S5zAGlq+m530bzIuD4M8qzA5DKbcGkBol45noX/vIxuF68s22pB3NST26Ha3uDUTN+Vu2G1wTXIRscW2VmmMj+GNHZknZRzK1Hm2beZ7RlPra1B4ojyK7JAdLrBzFSGVnISGRHVaLy/6Q1MViufF0XfMD7ueH1LP0UbXWwbsTJcdF7SeSguU7dg+hFCHbiU82w5hLpTNY329wWvTzwAoLpBqqIfy4kSS6SNnOHaEtRRa+UmTNMxZDVXw5TMq4sDLuAUnwOTi29wkrf4kgbyn/MiyDTd2caEpXJhm+t4Cox7Tt/A/IHOeLuzeVPBl5JDWpPJNIExPqef5km77eKF2FLO7TQnFnUp0v2dzWGSscNmuSPHGUmKR8nJ7VVCbUtrCN8Rssyr7Hu0dvxYf9E/Sv1uD0g7rAepNgNRH6tuzjhhvL26J7TSaxNLSl6wM9YEnvbXQk7cAhg9L/DwfeAM7cb6gO9Y8i6wNqi/Tk4uq9Q+LgTsnxymdrhpwxH7sU/fwwbMcKA385oXaEpxezdOZ4hFtJw9nCwqGf+gQB6CJ/nd7K7VUUxFsA7ztAdwtKgymDRhsKJpOjQPcm3qv2qhh8LOKO2K5u/bwv1mxLul3/wxIi4PAnyU+EtrH6dU6YrlVeqWP/6JEY55hK3+" + }, + { + "rawBytes": "MIIGHjCCBAagAwIBAgIUOe6oERfHQQKHTQSpiAvABT6OjW0wDQYJKoZIhvcNAQENBQAwgZMxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEVMBMGA1UECgwMQ29pbmJhc2UgTExDMQ4wDAYDVQQLDAVJbmZyYTEVMBMGA1UEAwwMQ0ItUk9PVC1DT1JFMSEwHwYJKoZIhvcNAQkBFhJpbmZyYUBjb2luYmFzZS5jb20wIBcNMjIwODIzMTUxNjA1WhgPMjA1MjA4MTUxNTE2MDVaMIGTMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xFTATBgNVBAoMDENvaW5iYXNlIExMQzEOMAwGA1UECwwFSW5mcmExFTATBgNVBAMMDENCLVJPT1QtQ09SRTEhMB8GCSqGSIb3DQEJARYSaW5mcmFAY29pbmJhc2UuY29tMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsVDJrM5nGmY4ygEKnoYmU/AjgYZrnkG7Fwo8FVblMA3WQRgTy9qZXtl2d5WWs/rdmh6AvvqtmirtqkTiI/RxzIMTRawMmeHrRBDbLqxNPBHK5liurkTqSyntMeY1Tba6xu+FxFolbL2EKeAKrbr7/0pVDvE7485mVhb8SaJubRFPkaX3DVDfjG7Jii5Jtz1qvV0SpV3+DwoE8BLaJp9ZcqnKpOdcPAaFLjXQAtEZnRNoAG0O/F0FgTWZd+G8X5rw4Ssc0bd7BvchIfErMtgewBhbCIYlFYv1ygH0HJ3qp1KmLWXEuypCUP2gQaSzJNzBq+afNQafS4WQSaovGtQtpHJbZglJjikPvTZEGSVpdcu8kUeqFbCB3sagjR723q6/gEakl3XiBfi2JHoCxRdA8X6hba2ixRNpC5zpk11G9Jqqp6p2MxFT3Onui70fzU801VGxwPmgMWFigHRFWblaMBCB5iQJr9DsIKLgYR7HNpT/Pzmxph2iYBeS3bWhSobWEnfjIG5mei0bIKRXxtsffqKRc3GVfvhvewFv4pYLGTpaAVA5B5gjpNlv0DjfCzz1SHm8Z8i4ZynPv02NA6qASsuvcC2j4XFobF1RXMsVjExVWnZSi7RvwFyzdLS/oMByPS85lzqyOv1BX+lyL56Ir586x5CcemE5p0KxLy762A0CAwEAAaNmMGQwHQYDVR0OBBYEFPX8720NI8obSJZdXzJyl8Cr0y9ZMB8GA1UdIwQYMBaAFPX8720NI8obSJZdXzJyl8Cr0y9ZMBIGA1UdEwEB/wQIMAYBAf8CAQIwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBDQUAA4ICAQBsvc8vzBTavudnrxt4lCMflvjs0krwzf77T08qaQLFfGBtpPt98WNJU5jOvObgxr5abpE7wtInZ6z08UsfU9l1g+nVoAlWa5AYheBp4UmM3AecRaDjJT6H/WK8ckVsyfLopDtVR4dmRdCghoIKDTzSPK4n3Fqs6VtxcTOcYbG9e8XoQD/mGH/ruR89AV7fdKaSobrfRSHwBK3kFg8Yn8PdgWFIDXeQj9gE+Ym2YQD2r7jcWpo8Umns03GrJrkiMH5VdAGJ7WqLF3EFF30RvlSQxCiaOByf+J0NW4gwKZ8+vK/AKhO2rviiHJDiafLbqmI3XSTGplfDGyz2nveW/0gZA4t2vFJHCX3TIEPwuLamZLgDMqTktv0fvu4sXrPJORawO8KDAvicSB0h6bU6+p9/djcrj3CA6bQiDA5VB3qEpGFCRLf/Ds9yOq1H0b/pQ6vKb1OCL+cUKGs8QU8jt0rsdF/fUwwVMA3JUeh7tGcnqoh9u4TjFX1835sVSN2oynuOJJ10kRmvKy5rpZKvaq0NlQzIulFHrTfpKdCO9cQUFYk0D1WS8IRWypT2m/V/qo3kU3hkDJuL2eyF0nSLuQ7/3JnhNXL1Yuj+gs2eIYSMFfi3kerWmet/aEzkTlgVoARwSZATP1t+a6DRZjTTDoqXixSZTr+PfpstDvtB8zgwWA==" + } + ] + }, + "timestampVerificationData": { + "rfc3161Timestamps": [ + { + "signedTimestamp": "MIICyjADAgEAMIICwQYJKoZIhvcNAQcCoIICsjCCAq4CAQMxDTALBglghkgBZQMEAgEwgbcGCyqGSIb3DQEJEAEEoIGnBIGkMIGhAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgAwzKF49B8ZcQBGX9NIn1DKwK2bE4Yjg+36PBKQv1VoUCFCNCrHmycw/AMq3pJZv1qVN+XEDNGA8yMDI2MTAyOTE0MzgyOVowAwIBAaAypDAwLjEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MRUwEwYDVQQDEwxzaWdzdG9yZS10c2GgADGCAdwwggHYAgEBMFEwOTEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MSAwHgYDVQQDExdzaWdzdG9yZS10c2Etc2VsZnNpZ25lZAIUOhNULwyQYe68wUMvy4qOiyojiwwwCwYJYIZIAWUDBAIBoIH8MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjYxMDI5MTQzODI5WjAvBgkqhkiG9w0BCQQxIgQgKHjhzEElq9AkUQaa8cSBrgHh4k852FgmduVR0oYr+mkwgY4GCyqGSIb3DQEJEAIvMX8wfTB7MHkEIIX5J7wHq2LKw7RDVsEO/IGyxog/2nq55thw2dE6zQW3MFUwPaQ7MDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAoGCCqGSM49BAMCBGgwZgIxALwkXPb2rTDpELk4KmFeqUPngDFeWM0kvF2fp735VYc2zTJh24scoyzn+4+Fp1vYSgIxAJGzbUWNwbBoGxnItJEj6A/EroDIRg9h2H9Km+ZH8P5lydh/iBMhYev8eF+Kgs9onw==" + } + ] + } + }, + "messageSignature": { + "messageDigest": { + "algorithm": "SHA2_384", + "digest": "NLah4ynM9fmK3Lg17WbD9/esCpjw23p2gCXQzrGpQmIcRE7te2SPiyPTgN9WpSqa" + }, + "signature": "MGYCMQDhzNvK21Q5qc11hUBEUn69UNIQXKppO1fuj9R7tSWCU0c6WTiLvZlRl4vyVTldJs8CMQD6C/wIh99CNOt7uNMeXpVCrNvwMOyfRiNecVyLPfuvB6/STT2iWnPSn15bZ3hk6kY=" + } +} diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/signatures/mainnet/creator-signature.json b/active/evm/tasks/2026-10-07-denim-upgrade/signatures/mainnet/creator-signature.json new file mode 100644 index 00000000..1a01a7c9 --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/signatures/mainnet/creator-signature.json @@ -0,0 +1,35 @@ +{ + "mediaType": "application/vnd.dev.sigstore.bundle+json;version=0.2", + "verificationMaterial": { + "x509CertificateChain": { + "certificates": [ + { + "rawBytes": "MIIEPjCCAiagAwIBAgIUXgjc+4QA4K3JPZCZD1BykCtt6WswDQYJKoZIhvcNAQENBQAwgY8xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzERMA8GA1UEChMIQ29pbmJhc2UxETAPBgNVBAsTCFNlY3VyaXR5MTUwMwYDVQQDEyx1cy1lYXN0LTEucHJvZHVjdGlvbi5pbmZyYXN0cnVjdHVyZS5jYmhxLm5ldDAeFw0yNjEwMjkxNTQ1NDlaFw0yNjEwMzAxNTQ1NDlaMFoxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzERMA8GA1UEChMIQ29pbmJhc2UxEzARBgNVBAsTCnByb2R1Y3Rpb24wdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAR9Yd4Z8mbCDRS6Yvrp55BRjzkJTsEYn+cjuMR9TIepF2wN277ccaXfQUM5fzkrmmIHXrTwuNcIj9HvkVBxB3kg3DyM8RLkQ7af7563n6+LM+GlVjVd3oGPYI2SzOz8GzWjdDByMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAfBgNVHSMEGDAWgBREEB8LA73HIP4RqjY0dal0pWtLqTAqBgNVHREEIzAhhh91c2VyOi8vL2phY2suY2h1bWFAY29pbmJhc2UuY29tMA0GCSqGSIb3DQEBDQUAA4ICAQAliuSk4v4ZrihwMOLu5go3iGhf2fuOMzwBuAdB3ZOZsPGYbvHBDPCQG1M8Q69IvXvei0uf9XwhG1fOQz5pOjeHmmaH3/ezJK//fCXASqRm0p0X7VoHY6l65lAbWGaOxIK3n9svKS2Zbt8xE8f/GtCpgGITkEqtCnqft2onOeuH+nduKbFpvHdwhGB3rv7M9gVf6QGbM4U4muilhYyP3LIpGxTxQOflf8t8a321U1AGEU0nQRInY8vt3KGvyJ9yqFdavWYK1FjJmdoEwSx50Do09axyni0F31vqOY3RnooZ4jpGSGRyTXDcHpwbfCv6I7+2kgCJRrEtgsvYmNTDxKSIkBETzCcyHfyJ8se5CAk80807lAMc2PrxsNuW1O1A5Gq8vkvlSFR2AlkAjDKhOiEpwU3Se9rqlY1vhWLJdu9/qxwhDi63SGTYm84hDX4RpaxFW5V16ZPRcI5kVieW835nmLhB8GgEBEuI2MF3oVvHrjfpyOKtkgA30p53hzZDPNwsObw9Wc4973ioIxEJqhGRZxzCGsAk2rqn1GGRcem/y8rAVeNUOyQtL9fwLdBZ84CJ+kCK7G1LymXkzLpoIepuUINlI7kVBx3mo0vJxEK5ZOZU4sv0My286u7YvGZ5QmmJRQsE/BKHV4v2mExQ6UnNRld0GoRhauSIecBhYgpRWQ==" + }, + { + "rawBytes": "MIIGOjCCBCKgAwIBAgIQKV+GB0AKx2oUPKrKUblYzjANBgkqhkiG9w0BAQ0FADB/MQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xFTATBgNVBAoMDENvaW5iYXNlIExMQzEOMAwGA1UECwwFSW5mcmExJDAiBgNVBAMMG2NiLnByb2R1Y3Rpb24tdXNlMS5jYmhxLm5ldDAeFw0yNjEwMjAxNzUwNDdaFw0yNzAxMjgxODUwNDdaMIGPMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xETAPBgNVBAoTCENvaW5iYXNlMREwDwYDVQQLEwhTZWN1cml0eTE1MDMGA1UEAxMsdXMtZWFzdC0xLnByb2R1Y3Rpb24uaW5mcmFzdHJ1Y3R1cmUuY2JocS5uZXQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCUudD9LxgY2Fi6NL4+PODj4tzyGQzqHgVooyuPA6M4RxfVLtrje1zbjBvPj0ym/2ZJ3B9/jCTREKKOMywJwMMEBmGfNoOjDWV0bJ+ltDbcVThiTk7ktsDx4BRS/aOec1AQQVx67RmanezA0H9L0j7nAlPRyWkjpw/pRUHsORj8HM5ciX05svvNaoif32MHM56Zyj7z8wDVRwJrCD5l36WJV3KGf28I1KP+gtkLCraBLPMTqf+0V9bn2bUMHUlMRvcjflu9og1TkIoN3omVIbAdgEQY4VdVs2Eo42dYjmsejVaO/6cpKPJDP0yJsptm5xds1k6bkSa8guZel/9M9lHHYCDW7du7+26wRAFd+3qG1OSKxS/MI3d2s4lljYG4jK/8TfZVW0z7xkjBCYMDP/igPJe7701qKD70sTrKF44YWhvsqNQGv3VJHuZKQfYnpinecIAvd0KJ9mNYNUPyC9jE+PCK/PJBSLnFeTWYwtlwr4VYagx6tOzn9u+Coek5AOs9sRx1Cd4Si5+Jq+v0Q/nhaycLQoOBW2rDmh+c0eSg8t064ASC6ZyGJ6ukzIrlCDQXCFMfA0DYT+kdpBi9bsUJu+T3c7l5YHHopDJkoOZddmCmP2BSWXmHHJtOMHjcfvU6IEyMeOsGEQM6PUzZop6EvQsPTtD4K1mrkkknTr0w9wIDAQABo4GgMIGdMDcGA1UdEQQwMC6CLHVzLWVhc3QtMS5wcm9kdWN0aW9uLmluZnJhc3RydWN0dXJlLmNiaHEubmV0MBIGA1UdEwEB/wQIMAYBAf8CAQAwHwYDVR0jBBgwFoAUoDYj+uc8N+rzXBs400Ai1dAqEhYwHQYDVR0OBBYEFEQQHwsDvccg/hGqNjR1qXSla0upMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQ0FAAOCAgEAfVEhLNhbsx52vC5Ha8dt6168f2CtoyMCObVT1aQ+9Qhyro9YjYUGjPj5BE4EcLFfZlwFCRgGHkl1dWE4o9rqj+NlPotPVLbZwhY2ZYZycYFLenZd3WTinJyeXourQ3m9edrFIqXuMkvYcXvRdcUhIWIcFyCi+WVt5kEPvGXasmOU+2lIawAs8OTMcuII68LMZfiWbwbUkiUB6KsXU0pmv9JCPldMSkasCcDk1XeCRIEUAN/4ASqZatiOB6I+bXrdspeYZ4hTH22NhnoO6E/boyanoJHjV47YOOg0wT+JOFZsrKbosRKH/NbI46Lnfvemu5UVqqnmzMA519vFz6RPY4fmdE0dHT+jNIG97N62TsHDXUahIBnh8nYF5P9cbiRWQmVYeiNuEaljF1MtgNDyZcYSG3SaMbC4dKQgwEyVAbjL5/OIZhHlpxvKzgWyS8q4dzIhnEMEFzJm80vtMD8+oN1Eh27MnpKiaNYA41wmgOKq9HEMbNb6YDoUZi5VNose9RCoJfQlZER6GxXpKfkOW/E+VJvJrDtLruVCZHeFdrVHolBaDAfYW8iYfg4iNuUVnaJDM5nIhbVHtYPymz0NlPx8r4QcU20mYjHHeexrid9Rq63/UEW0FcWT9IKla/pf5k9RLPiDX5i3s2wyLIW7y/oI1uDLWMeq7Njgi6g3A3w=" + }, + { + "rawBytes": "MIIGMjCCBBqgAwIBAgIUNtuh8wFw/jnlkGdEz7zTllqXWkkwDQYJKoZIhvcNAQENBQAwgZMxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEVMBMGA1UECgwMQ29pbmJhc2UgTExDMQ4wDAYDVQQLDAVJbmZyYTEVMBMGA1UEAwwMQ0ItUk9PVC1DT1JFMSEwHwYJKoZIhvcNAQkBFhJpbmZyYUBjb2luYmFzZS5jb20wHhcNMjIwODIzMTUxNjM4WhcNMzIwODIwMTUxNjM4WjB/MQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xFTATBgNVBAoMDENvaW5iYXNlIExMQzEOMAwGA1UECwwFSW5mcmExJDAiBgNVBAMMG2NiLnByb2R1Y3Rpb24tdXNlMS5jYmhxLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTirwztk1a7TaEKiuT6EXOA8YNfMyBg2SgOG7GoGCHH7hzQlWAgAjQer+NOT8GOuGrCsQwnLvRA05aPcO+mHW7WwKQjmdvXOTqQdYkkJDgn63Qriz/zUaTUAQNsW7yNWXq1GGzO4nXTVsLduA7fO73+4kRH+tFccDolSukl0vtq3UdojSafnKPgv9dWz7hrsp8bBneWgqnUJuHGCigC1dNpHFFvLhamLagcIvr9UKI0VTMJIaCFX5RwaeKaxXpkDrQJxCXMlWh3/AUr45YtqKNzcprYQXTTLuCyyJugeyz4eY+cKbev9d9YylnkZtbUZ/mnOVmYYH2xZsTatEYwhYBEcGP+jjuKleetvLY4+3lZ4n0+MqtD+CyF3NOZMuDGiyKMuxGRVz7nmYDt1gzAcHiOp1rLmuJijxJmbq6Iy6HNHwPIv8LDvWf5pL0rYsqD2ZMO3Otxux8oz9+ecMzxUmgvm+esKIiedJL9L7g40FP49Q+3t1rNFJwXaWYOWhampcaDKhK5Y9geyNEY5PY4LYRo8oGHdzafsXP4HS6nr1EDbhfyT513oNTS6Ev/7HoPr5p2u6r429Tp5S0LlzcrHs5J90/dzS8KtboYakRLdMkC8QbKHt4bTJDgn7nNMyVZ41dCfHt8hB6wiMKDOkRkVHOMbEwg/vNbRDHzmOJTy8+pAgMBAAGjgZAwgY0wHQYDVR0OBBYEFKA2I/rnPDfq81wbONNAItXQKhIWMB8GA1UdIwQYMBaAFPX8720NI8obSJZdXzJyl8Cr0y9ZMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgGGMCcGA1UdJQQgMB4GCCsGAQUFBwMDBggrBgEFBQcDAgYIKwYBBQUHAwEwDQYJKoZIhvcNAQENBQADggIBAJG6oiAnJjCq4QLNutZatz6paDds4S5zAGlq+m530bzIuD4M8qzA5DKbcGkBol45noX/vIxuF68s22pB3NST26Ha3uDUTN+Vu2G1wTXIRscW2VmmMj+GNHZknZRzK1Hm2beZ7RlPra1B4ojyK7JAdLrBzFSGVnISGRHVaLy/6Q1MViufF0XfMD7ueH1LP0UbXWwbsTJcdF7SeSguU7dg+hFCHbiU82w5hLpTNY329wWvTzwAoLpBqqIfy4kSS6SNnOHaEtRRa+UmTNMxZDVXw5TMq4sDLuAUnwOTi29wkrf4kgbyn/MiyDTd2caEpXJhm+t4Cox7Tt/A/IHOeLuzeVPBl5JDWpPJNIExPqef5km77eKF2FLO7TQnFnUp0v2dzWGSscNmuSPHGUmKR8nJ7VVCbUtrCN8Rssyr7Hu0dvxYf9E/Sv1uD0g7rAepNgNRH6tuzjhhvL26J7TSaxNLSl6wM9YEnvbXQk7cAhg9L/DwfeAM7cb6gO9Y8i6wNqi/Tk4uq9Q+LgTsnxymdrhpwxH7sU/fwwbMcKA385oXaEpxezdOZ4hFtJw9nCwqGf+gQB6CJ/nd7K7VUUxFsA7ztAdwtKgymDRhsKJpOjQPcm3qv2qhh8LOKO2K5u/bwv1mxLul3/wxIi4PAnyU+EtrH6dU6YrlVeqWP/6JEY55hK3+" + }, + { + "rawBytes": "MIIGHjCCBAagAwIBAgIUOe6oERfHQQKHTQSpiAvABT6OjW0wDQYJKoZIhvcNAQENBQAwgZMxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEVMBMGA1UECgwMQ29pbmJhc2UgTExDMQ4wDAYDVQQLDAVJbmZyYTEVMBMGA1UEAwwMQ0ItUk9PVC1DT1JFMSEwHwYJKoZIhvcNAQkBFhJpbmZyYUBjb2luYmFzZS5jb20wIBcNMjIwODIzMTUxNjA1WhgPMjA1MjA4MTUxNTE2MDVaMIGTMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xFTATBgNVBAoMDENvaW5iYXNlIExMQzEOMAwGA1UECwwFSW5mcmExFTATBgNVBAMMDENCLVJPT1QtQ09SRTEhMB8GCSqGSIb3DQEJARYSaW5mcmFAY29pbmJhc2UuY29tMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsVDJrM5nGmY4ygEKnoYmU/AjgYZrnkG7Fwo8FVblMA3WQRgTy9qZXtl2d5WWs/rdmh6AvvqtmirtqkTiI/RxzIMTRawMmeHrRBDbLqxNPBHK5liurkTqSyntMeY1Tba6xu+FxFolbL2EKeAKrbr7/0pVDvE7485mVhb8SaJubRFPkaX3DVDfjG7Jii5Jtz1qvV0SpV3+DwoE8BLaJp9ZcqnKpOdcPAaFLjXQAtEZnRNoAG0O/F0FgTWZd+G8X5rw4Ssc0bd7BvchIfErMtgewBhbCIYlFYv1ygH0HJ3qp1KmLWXEuypCUP2gQaSzJNzBq+afNQafS4WQSaovGtQtpHJbZglJjikPvTZEGSVpdcu8kUeqFbCB3sagjR723q6/gEakl3XiBfi2JHoCxRdA8X6hba2ixRNpC5zpk11G9Jqqp6p2MxFT3Onui70fzU801VGxwPmgMWFigHRFWblaMBCB5iQJr9DsIKLgYR7HNpT/Pzmxph2iYBeS3bWhSobWEnfjIG5mei0bIKRXxtsffqKRc3GVfvhvewFv4pYLGTpaAVA5B5gjpNlv0DjfCzz1SHm8Z8i4ZynPv02NA6qASsuvcC2j4XFobF1RXMsVjExVWnZSi7RvwFyzdLS/oMByPS85lzqyOv1BX+lyL56Ir586x5CcemE5p0KxLy762A0CAwEAAaNmMGQwHQYDVR0OBBYEFPX8720NI8obSJZdXzJyl8Cr0y9ZMB8GA1UdIwQYMBaAFPX8720NI8obSJZdXzJyl8Cr0y9ZMBIGA1UdEwEB/wQIMAYBAf8CAQIwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBDQUAA4ICAQBsvc8vzBTavudnrxt4lCMflvjs0krwzf77T08qaQLFfGBtpPt98WNJU5jOvObgxr5abpE7wtInZ6z08UsfU9l1g+nVoAlWa5AYheBp4UmM3AecRaDjJT6H/WK8ckVsyfLopDtVR4dmRdCghoIKDTzSPK4n3Fqs6VtxcTOcYbG9e8XoQD/mGH/ruR89AV7fdKaSobrfRSHwBK3kFg8Yn8PdgWFIDXeQj9gE+Ym2YQD2r7jcWpo8Umns03GrJrkiMH5VdAGJ7WqLF3EFF30RvlSQxCiaOByf+J0NW4gwKZ8+vK/AKhO2rviiHJDiafLbqmI3XSTGplfDGyz2nveW/0gZA4t2vFJHCX3TIEPwuLamZLgDMqTktv0fvu4sXrPJORawO8KDAvicSB0h6bU6+p9/djcrj3CA6bQiDA5VB3qEpGFCRLf/Ds9yOq1H0b/pQ6vKb1OCL+cUKGs8QU8jt0rsdF/fUwwVMA3JUeh7tGcnqoh9u4TjFX1835sVSN2oynuOJJ10kRmvKy5rpZKvaq0NlQzIulFHrTfpKdCO9cQUFYk0D1WS8IRWypT2m/V/qo3kU3hkDJuL2eyF0nSLuQ7/3JnhNXL1Yuj+gs2eIYSMFfi3kerWmet/aEzkTlgVoARwSZATP1t+a6DRZjTTDoqXixSZTr+PfpstDvtB8zgwWA==" + } + ] + }, + "timestampVerificationData": { + "rfc3161Timestamps": [ + { + "signedTimestamp": "MIICyzADAgEAMIICwgYJKoZIhvcNAQcCoIICszCCAq8CAQMxDTALBglghkgBZQMEAgEwgbgGCyqGSIb3DQEJEAEEoIGoBIGlMIGiAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgBRnSDHbDb6E6gj8pkSRineQPXTMNBpuR84BBs631dkICFQDk9FL9k6gTUmWvsnZ4AaO/6gNfXhgPMjAyNjEwMjkxNTQ1NDlaMAMCAQGgMqQwMC4xFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEVMBMGA1UEAxMMc2lnc3RvcmUtdHNhoAAxggHcMIIB2AIBATBRMDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAsGCWCGSAFlAwQCAaCB/DAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTI2MTAyOTE1NDU0OVowLwYJKoZIhvcNAQkEMSIEILYpWy0Oj1Mv68SJe6yHKmkzBeERWZoRNmpgH9/oDR3/MIGOBgsqhkiG9w0BCRACLzF/MH0wezB5BCCF+Se8B6tiysO0Q1bBDvyBssaIP9p6uebYcNnROs0FtzBVMD2kOzA5MRUwEwYDVQQKEwxzaWdzdG9yZS5kZXYxIDAeBgNVBAMTF3NpZ3N0b3JlLXRzYS1zZWxmc2lnbmVkAhQ6E1QvDJBh7rzBQy/Lio6LKiOLDDAKBggqhkjOPQQDAgRoMGYCMQDYkZ9lojMdLnoD1lqCX/opvju9hfY+2y/DyHQoRgPVVbXQ82scGMdaCcqtY7/dYk0CMQD2byk3szYIn+9uJefSppyRBni5ZmahCs2Id6dMeL+VFdbIvJRIXu7xrX2sZ4tSYvA=" + } + ] + } + }, + "messageSignature": { + "messageDigest": { + "algorithm": "SHA2_384", + "digest": "NLah4ynM9fmK3Lg17WbD9/esCpjw23p2gCXQzrGpQmIcRE7te2SPiyPTgN9WpSqa" + }, + "signature": "MGUCMGbJlFmNNrJgExS1n3ojU0SftO4T5HPliO8pfqSHKaFz0KoUjaEm6PhX/IFuhZ6Y/QIxAJt28bWBST0v9b6yjzLYDtFkeTkZiyvpbYOiIsPlG8oM2F6TOKYT1nLNBzueOcjibw==" + } +} \ No newline at end of file From 2060f7b5a552afbb85af1587df5088566de57b07 Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Thu, 29 Oct 2026 15:59:32 -0400 Subject: [PATCH 16/16] chore(mainnet): add Denim Security Council facilitator signature Co-authored-by: Toshi --- .../base-sc-facilitator-signature.json | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 active/evm/tasks/2026-10-07-denim-upgrade/signatures/mainnet/base-sc-facilitator-signature.json diff --git a/active/evm/tasks/2026-10-07-denim-upgrade/signatures/mainnet/base-sc-facilitator-signature.json b/active/evm/tasks/2026-10-07-denim-upgrade/signatures/mainnet/base-sc-facilitator-signature.json new file mode 100644 index 00000000..6d19cd12 --- /dev/null +++ b/active/evm/tasks/2026-10-07-denim-upgrade/signatures/mainnet/base-sc-facilitator-signature.json @@ -0,0 +1,35 @@ +{ + "mediaType": "application/vnd.dev.sigstore.bundle+json;version=0.2", + "verificationMaterial": { + "x509CertificateChain": { + "certificates": [ + { + "rawBytes": "MIIEOzCCAiOgAwIBAgIULD+YjNlUUNHBN51GHM/QeEaye/QwDQYJKoZIhvcNAQENBQAwgY8xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzERMA8GA1UEChMIQ29pbmJhc2UxETAPBgNVBAsTCFNlY3VyaXR5MTUwMwYDVQQDEyx1cy1lYXN0LTEucHJvZHVjdGlvbi5pbmZyYXN0cnVjdHVyZS5jYmhxLm5ldDAeFw0yNjEwMjkxOTQ5MTlaFw0yNjEwMzAxOTQ5MTlaMFoxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzERMA8GA1UEChMIQ29pbmJhc2UxEzARBgNVBAsTCnByb2R1Y3Rpb24wdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARueCohq8ILgmSt/lw2MyCA8gump3yur8haDGDHEduKmJA4RjZ42QQV7EEqkQa5In2rzffMbahPYeTZgyc3EyyQPxyvJsOVGogLFdRxaqih/b0wAxoISo6/g61so9P1OKGjcTBvMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAfBgNVHSMEGDAWgBREEB8LA73HIP4RqjY0dal0pWtLqTAnBgNVHREEIDAehhxsZGFwOi8vL2Jhc2Utc2MtZmFjaWxpdGF0b3JzMA0GCSqGSIb3DQEBDQUAA4ICAQAypINxEtc2+Jd9eV6hCZaT0r/zOH2Dzsr2oqb8yHS+KLg6j/aFD+e9TOOVkkIqpGEWKtPxTznZpqaHX+1kIC0aRLjBLiR6RKaiKbvUfwz45tdPo3f27SeTKK4VepPT1xFceOpD1D/3g42kaatJiEhZ5t19rNOlt6pIqgemq3fCmz4Y1CnwUNmDJ0fICht7ooyy2924idj41i0uhBJ/cACxRUNCs9y2vs0OKeiLmHUxaDTerunEGSTvmtjUzOEbUVDyZfu6C+K/mrcVdxb7F1zotPeGIyrLm51Ga+scQV/DuiwVd2D9dIipzE1RDLiYTImaFjQGb5Le7PqDG0I0ZoMZM86tgyChjKwz3WFFSgiqJOuoW4gIIRhn8CtA1AQCeDCz7A2YGIQ76CoEkgygUcuywH8BL8/T5/i5EkSXAUMzGrehl0ndy2A9wAahQAZ7Jf+QhrJhF9VfKMFYN1/SA6J1wIgU5srUdGqClIY7iaCgn3MC9Ytd/oX8BxW1Z9NgKgFGp6LzeEioNLVJfOiEtb51M9LqrDvJfeskQ+ujbwbWCj0WZX6nKrdOHxWI4vvsY12oYhYZoxkn2BrTpx8yD5fc+p0Sy6cenvoAd+jZipgDyG6aLqyElb6hdyDWVsHo4J0BAdm17ud2bE/TOZOj7fYSM9m/Gtb/VWcVssdpXnbq4g==" + }, + { + "rawBytes": "MIIGOjCCBCKgAwIBAgIQKV+GB0AKx2oUPKrKUblYzjANBgkqhkiG9w0BAQ0FADB/MQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xFTATBgNVBAoMDENvaW5iYXNlIExMQzEOMAwGA1UECwwFSW5mcmExJDAiBgNVBAMMG2NiLnByb2R1Y3Rpb24tdXNlMS5jYmhxLm5ldDAeFw0yNjEwMjAxNzUwNDdaFw0yNzAxMjgxODUwNDdaMIGPMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xETAPBgNVBAoTCENvaW5iYXNlMREwDwYDVQQLEwhTZWN1cml0eTE1MDMGA1UEAxMsdXMtZWFzdC0xLnByb2R1Y3Rpb24uaW5mcmFzdHJ1Y3R1cmUuY2JocS5uZXQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCUudD9LxgY2Fi6NL4+PODj4tzyGQzqHgVooyuPA6M4RxfVLtrje1zbjBvPj0ym/2ZJ3B9/jCTREKKOMywJwMMEBmGfNoOjDWV0bJ+ltDbcVThiTk7ktsDx4BRS/aOec1AQQVx67RmanezA0H9L0j7nAlPRyWkjpw/pRUHsORj8HM5ciX05svvNaoif32MHM56Zyj7z8wDVRwJrCD5l36WJV3KGf28I1KP+gtkLCraBLPMTqf+0V9bn2bUMHUlMRvcjflu9og1TkIoN3omVIbAdgEQY4VdVs2Eo42dYjmsejVaO/6cpKPJDP0yJsptm5xds1k6bkSa8guZel/9M9lHHYCDW7du7+26wRAFd+3qG1OSKxS/MI3d2s4lljYG4jK/8TfZVW0z7xkjBCYMDP/igPJe7701qKD70sTrKF44YWhvsqNQGv3VJHuZKQfYnpinecIAvd0KJ9mNYNUPyC9jE+PCK/PJBSLnFeTWYwtlwr4VYagx6tOzn9u+Coek5AOs9sRx1Cd4Si5+Jq+v0Q/nhaycLQoOBW2rDmh+c0eSg8t064ASC6ZyGJ6ukzIrlCDQXCFMfA0DYT+kdpBi9bsUJu+T3c7l5YHHopDJkoOZddmCmP2BSWXmHHJtOMHjcfvU6IEyMeOsGEQM6PUzZop6EvQsPTtD4K1mrkkknTr0w9wIDAQABo4GgMIGdMDcGA1UdEQQwMC6CLHVzLWVhc3QtMS5wcm9kdWN0aW9uLmluZnJhc3RydWN0dXJlLmNiaHEubmV0MBIGA1UdEwEB/wQIMAYBAf8CAQAwHwYDVR0jBBgwFoAUoDYj+uc8N+rzXBs400Ai1dAqEhYwHQYDVR0OBBYEFEQQHwsDvccg/hGqNjR1qXSla0upMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQ0FAAOCAgEAfVEhLNhbsx52vC5Ha8dt6168f2CtoyMCObVT1aQ+9Qhyro9YjYUGjPj5BE4EcLFfZlwFCRgGHkl1dWE4o9rqj+NlPotPVLbZwhY2ZYZycYFLenZd3WTinJyeXourQ3m9edrFIqXuMkvYcXvRdcUhIWIcFyCi+WVt5kEPvGXasmOU+2lIawAs8OTMcuII68LMZfiWbwbUkiUB6KsXU0pmv9JCPldMSkasCcDk1XeCRIEUAN/4ASqZatiOB6I+bXrdspeYZ4hTH22NhnoO6E/boyanoJHjV47YOOg0wT+JOFZsrKbosRKH/NbI46Lnfvemu5UVqqnmzMA519vFz6RPY4fmdE0dHT+jNIG97N62TsHDXUahIBnh8nYF5P9cbiRWQmVYeiNuEaljF1MtgNDyZcYSG3SaMbC4dKQgwEyVAbjL5/OIZhHlpxvKzgWyS8q4dzIhnEMEFzJm80vtMD8+oN1Eh27MnpKiaNYA41wmgOKq9HEMbNb6YDoUZi5VNose9RCoJfQlZER6GxXpKfkOW/E+VJvJrDtLruVCZHeFdrVHolBaDAfYW8iYfg4iNuUVnaJDM5nIhbVHtYPymz0NlPx8r4QcU20mYjHHeexrid9Rq63/UEW0FcWT9IKla/pf5k9RLPiDX5i3s2wyLIW7y/oI1uDLWMeq7Njgi6g3A3w=" + }, + { + "rawBytes": "MIIGMjCCBBqgAwIBAgIUNtuh8wFw/jnlkGdEz7zTllqXWkkwDQYJKoZIhvcNAQENBQAwgZMxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEVMBMGA1UECgwMQ29pbmJhc2UgTExDMQ4wDAYDVQQLDAVJbmZyYTEVMBMGA1UEAwwMQ0ItUk9PVC1DT1JFMSEwHwYJKoZIhvcNAQkBFhJpbmZyYUBjb2luYmFzZS5jb20wHhcNMjIwODIzMTUxNjM4WhcNMzIwODIwMTUxNjM4WjB/MQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xFTATBgNVBAoMDENvaW5iYXNlIExMQzEOMAwGA1UECwwFSW5mcmExJDAiBgNVBAMMG2NiLnByb2R1Y3Rpb24tdXNlMS5jYmhxLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTirwztk1a7TaEKiuT6EXOA8YNfMyBg2SgOG7GoGCHH7hzQlWAgAjQer+NOT8GOuGrCsQwnLvRA05aPcO+mHW7WwKQjmdvXOTqQdYkkJDgn63Qriz/zUaTUAQNsW7yNWXq1GGzO4nXTVsLduA7fO73+4kRH+tFccDolSukl0vtq3UdojSafnKPgv9dWz7hrsp8bBneWgqnUJuHGCigC1dNpHFFvLhamLagcIvr9UKI0VTMJIaCFX5RwaeKaxXpkDrQJxCXMlWh3/AUr45YtqKNzcprYQXTTLuCyyJugeyz4eY+cKbev9d9YylnkZtbUZ/mnOVmYYH2xZsTatEYwhYBEcGP+jjuKleetvLY4+3lZ4n0+MqtD+CyF3NOZMuDGiyKMuxGRVz7nmYDt1gzAcHiOp1rLmuJijxJmbq6Iy6HNHwPIv8LDvWf5pL0rYsqD2ZMO3Otxux8oz9+ecMzxUmgvm+esKIiedJL9L7g40FP49Q+3t1rNFJwXaWYOWhampcaDKhK5Y9geyNEY5PY4LYRo8oGHdzafsXP4HS6nr1EDbhfyT513oNTS6Ev/7HoPr5p2u6r429Tp5S0LlzcrHs5J90/dzS8KtboYakRLdMkC8QbKHt4bTJDgn7nNMyVZ41dCfHt8hB6wiMKDOkRkVHOMbEwg/vNbRDHzmOJTy8+pAgMBAAGjgZAwgY0wHQYDVR0OBBYEFKA2I/rnPDfq81wbONNAItXQKhIWMB8GA1UdIwQYMBaAFPX8720NI8obSJZdXzJyl8Cr0y9ZMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgGGMCcGA1UdJQQgMB4GCCsGAQUFBwMDBggrBgEFBQcDAgYIKwYBBQUHAwEwDQYJKoZIhvcNAQENBQADggIBAJG6oiAnJjCq4QLNutZatz6paDds4S5zAGlq+m530bzIuD4M8qzA5DKbcGkBol45noX/vIxuF68s22pB3NST26Ha3uDUTN+Vu2G1wTXIRscW2VmmMj+GNHZknZRzK1Hm2beZ7RlPra1B4ojyK7JAdLrBzFSGVnISGRHVaLy/6Q1MViufF0XfMD7ueH1LP0UbXWwbsTJcdF7SeSguU7dg+hFCHbiU82w5hLpTNY329wWvTzwAoLpBqqIfy4kSS6SNnOHaEtRRa+UmTNMxZDVXw5TMq4sDLuAUnwOTi29wkrf4kgbyn/MiyDTd2caEpXJhm+t4Cox7Tt/A/IHOeLuzeVPBl5JDWpPJNIExPqef5km77eKF2FLO7TQnFnUp0v2dzWGSscNmuSPHGUmKR8nJ7VVCbUtrCN8Rssyr7Hu0dvxYf9E/Sv1uD0g7rAepNgNRH6tuzjhhvL26J7TSaxNLSl6wM9YEnvbXQk7cAhg9L/DwfeAM7cb6gO9Y8i6wNqi/Tk4uq9Q+LgTsnxymdrhpwxH7sU/fwwbMcKA385oXaEpxezdOZ4hFtJw9nCwqGf+gQB6CJ/nd7K7VUUxFsA7ztAdwtKgymDRhsKJpOjQPcm3qv2qhh8LOKO2K5u/bwv1mxLul3/wxIi4PAnyU+EtrH6dU6YrlVeqWP/6JEY55hK3+" + }, + { + "rawBytes": "MIIGHjCCBAagAwIBAgIUOe6oERfHQQKHTQSpiAvABT6OjW0wDQYJKoZIhvcNAQENBQAwgZMxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEVMBMGA1UECgwMQ29pbmJhc2UgTExDMQ4wDAYDVQQLDAVJbmZyYTEVMBMGA1UEAwwMQ0ItUk9PVC1DT1JFMSEwHwYJKoZIhvcNAQkBFhJpbmZyYUBjb2luYmFzZS5jb20wIBcNMjIwODIzMTUxNjA1WhgPMjA1MjA4MTUxNTE2MDVaMIGTMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xFTATBgNVBAoMDENvaW5iYXNlIExMQzEOMAwGA1UECwwFSW5mcmExFTATBgNVBAMMDENCLVJPT1QtQ09SRTEhMB8GCSqGSIb3DQEJARYSaW5mcmFAY29pbmJhc2UuY29tMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsVDJrM5nGmY4ygEKnoYmU/AjgYZrnkG7Fwo8FVblMA3WQRgTy9qZXtl2d5WWs/rdmh6AvvqtmirtqkTiI/RxzIMTRawMmeHrRBDbLqxNPBHK5liurkTqSyntMeY1Tba6xu+FxFolbL2EKeAKrbr7/0pVDvE7485mVhb8SaJubRFPkaX3DVDfjG7Jii5Jtz1qvV0SpV3+DwoE8BLaJp9ZcqnKpOdcPAaFLjXQAtEZnRNoAG0O/F0FgTWZd+G8X5rw4Ssc0bd7BvchIfErMtgewBhbCIYlFYv1ygH0HJ3qp1KmLWXEuypCUP2gQaSzJNzBq+afNQafS4WQSaovGtQtpHJbZglJjikPvTZEGSVpdcu8kUeqFbCB3sagjR723q6/gEakl3XiBfi2JHoCxRdA8X6hba2ixRNpC5zpk11G9Jqqp6p2MxFT3Onui70fzU801VGxwPmgMWFigHRFWblaMBCB5iQJr9DsIKLgYR7HNpT/Pzmxph2iYBeS3bWhSobWEnfjIG5mei0bIKRXxtsffqKRc3GVfvhvewFv4pYLGTpaAVA5B5gjpNlv0DjfCzz1SHm8Z8i4ZynPv02NA6qASsuvcC2j4XFobF1RXMsVjExVWnZSi7RvwFyzdLS/oMByPS85lzqyOv1BX+lyL56Ir586x5CcemE5p0KxLy762A0CAwEAAaNmMGQwHQYDVR0OBBYEFPX8720NI8obSJZdXzJyl8Cr0y9ZMB8GA1UdIwQYMBaAFPX8720NI8obSJZdXzJyl8Cr0y9ZMBIGA1UdEwEB/wQIMAYBAf8CAQIwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBDQUAA4ICAQBsvc8vzBTavudnrxt4lCMflvjs0krwzf77T08qaQLFfGBtpPt98WNJU5jOvObgxr5abpE7wtInZ6z08UsfU9l1g+nVoAlWa5AYheBp4UmM3AecRaDjJT6H/WK8ckVsyfLopDtVR4dmRdCghoIKDTzSPK4n3Fqs6VtxcTOcYbG9e8XoQD/mGH/ruR89AV7fdKaSobrfRSHwBK3kFg8Yn8PdgWFIDXeQj9gE+Ym2YQD2r7jcWpo8Umns03GrJrkiMH5VdAGJ7WqLF3EFF30RvlSQxCiaOByf+J0NW4gwKZ8+vK/AKhO2rviiHJDiafLbqmI3XSTGplfDGyz2nveW/0gZA4t2vFJHCX3TIEPwuLamZLgDMqTktv0fvu4sXrPJORawO8KDAvicSB0h6bU6+p9/djcrj3CA6bQiDA5VB3qEpGFCRLf/Ds9yOq1H0b/pQ6vKb1OCL+cUKGs8QU8jt0rsdF/fUwwVMA3JUeh7tGcnqoh9u4TjFX1835sVSN2oynuOJJ10kRmvKy5rpZKvaq0NlQzIulFHrTfpKdCO9cQUFYk0D1WS8IRWypT2m/V/qo3kU3hkDJuL2eyF0nSLuQ7/3JnhNXL1Yuj+gs2eIYSMFfi3kerWmet/aEzkTlgVoARwSZATP1t+a6DRZjTTDoqXixSZTr+PfpstDvtB8zgwWA==" + } + ] + }, + "timestampVerificationData": { + "rfc3161Timestamps": [ + { + "signedTimestamp": "MIICyDADAgEAMIICvwYJKoZIhvcNAQcCoIICsDCCAqwCAQMxDTALBglghkgBZQMEAgEwgbcGCyqGSIb3DQEJEAEEoIGnBIGkMIGhAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgP24hpN82DQiv6tYr6gwpDjBD9NtMOfrOo6pF9v/v8hMCFBjqGXJJ+llzBLV+g+eV5Ynn52qUGA8yMDI2MTAyOTE5NDkxOVowAwIBAaAypDAwLjEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MRUwEwYDVQQDEwxzaWdzdG9yZS10c2GgADGCAdowggHWAgEBMFEwOTEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MSAwHgYDVQQDExdzaWdzdG9yZS10c2Etc2VsZnNpZ25lZAIUOhNULwyQYe68wUMvy4qOiyojiwwwCwYJYIZIAWUDBAIBoIH8MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjYxMDI5MTk0OTE5WjAvBgkqhkiG9w0BCQQxIgQgceBopWeJRmFlPNVykKOyrsCTxJXp37jFsjGnmi5LGhgwgY4GCyqGSIb3DQEJEAIvMX8wfTB7MHkEIIX5J7wHq2LKw7RDVsEO/IGyxog/2nq55thw2dE6zQW3MFUwPaQ7MDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAoGCCqGSM49BAMCBGYwZAIwUXL1oEbbcnTxqEmj9qYvbL1j5iETgX5hBKAfPn6Jy6TBwXu40zMgs284Xf7gVU2TAjAuCi3IjPMB+r5iO73PA54GWD4CAzTxsP2yRZ25mtAoMRqwdYRHjFeIinky+Bx136M=" + } + ] + } + }, + "messageSignature": { + "messageDigest": { + "algorithm": "SHA2_384", + "digest": "NLah4ynM9fmK3Lg17WbD9/esCpjw23p2gCXQzrGpQmIcRE7te2SPiyPTgN9WpSqa" + }, + "signature": "MGUCMQDab6u+j1njOWKW03sXiE8g+nGu1SF5p2Ly2dTIUCH0JDnJD4mG0RvYQv80zyVVozsCMGOtNw3HCjUrqGEylxVERrbUax46FmA1n95XQnvZSqkX55hqW7FEaiaEgUHhDfgXyQ==" + } +}