diff --git a/docs/CELO_TESTNET_MIGRATION.md b/docs/CELO_TESTNET_MIGRATION.md index b72c6ed5b6d..07125806415 100644 --- a/docs/CELO_TESTNET_MIGRATION.md +++ b/docs/CELO_TESTNET_MIGRATION.md @@ -128,7 +128,7 @@ For example: #### Q9: What access does Espresso need from Celo? -Espresso needs the following to operate the TEE batcher: +Espresso needs the following to operate the Espresso batcher: | Requirement | Description | |-------------|-------------| diff --git a/espresso/.env b/espresso/.env index a3f6ea65f9b..2cb8bb68769 100644 --- a/espresso/.env +++ b/espresso/.env @@ -76,11 +76,11 @@ FALLBACK_BATCHER_ADDRESS=0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC # cast wallet private-key --mnemonic "test test ... junk" --hd-path "m/44'/60'/0'/0/2" FALLBACK_BATCHER_PRIVATE_KEY=0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a -# TEE batcher registered in BatchAuthenticator (HD index 6). +# Espresso batcher registered in BatchAuthenticator (HD index 6). # cast wallet address --mnemonic "test test ... junk" --hd-path "m/44'/60'/0'/0/6" -TEE_BATCHER_ADDRESS=0x976EA74026E726554dB657fA54763abd0C3a0aa9 +ESPRESSO_BATCHER_ADDRESS=0x976EA74026E726554dB657fA54763abd0C3a0aa9 # cast wallet private-key --mnemonic "test test ... junk" --hd-path "m/44'/60'/0'/0/6" -TEE_BATCHER_PRIVATE_KEY=0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e +ESPRESSO_BATCHER_PRIVATE_KEY=0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e L1_CHAIN_ID=11155111 L2_CHAIN_ID=22266222 diff --git a/espresso/SECURITY_ANALYSIS.md b/espresso/SECURITY_ANALYSIS.md index 91e75d43faf..57dffdfcbfe 100644 --- a/espresso/SECURITY_ANALYSIS.md +++ b/espresso/SECURITY_ANALYSIS.md @@ -60,7 +60,7 @@ The following sections detail the technical implementation, validation mechanism The integration introduces three primary components: 1. **L1 Smart Contracts** (`BatchInbox` and `BatchAuthenticator`) - On-chain verification layer -2. **TEE Batcher** - Trusted execution environment for batch processing +2. **Espresso Batcher** - Trusted execution environment for batch processing 3. **Espresso Streamer** - Batch verification and ordering service Each component operates within well-defined trust boundaries with multiple layers of validation. @@ -130,7 +130,7 @@ The system has two parallel derivation paths that both validate batches: ↓ 2. Sequencer creates L2 block and bundles into batch ↓ -3. TEE Batcher (inside AWS Nitro Enclave): +3. Espresso Batcher (inside AWS Nitro Enclave): - Reads batch from sequencer - Signs batch with batcher private key - Submits to Espresso (for fast confirmation) @@ -166,7 +166,7 @@ After submission, batches flow through two independent paths: ``` **Key Points:** -- The **TEE Batcher** submits to both Espresso and L1 +- The **Espresso Batcher** submits to both Espresso and L1 - The **Espresso Streamer** is used by the Caff Node for fast derivation from Espresso - The **OP Node** uses standard L1-based derivation - Both paths independently validate batches @@ -180,7 +180,7 @@ The implementation uses two distinct private keys with separate roles: #### **Batcher Key** (Long-lived, managed by operator) ```solidity -address public immutable teeBatcher; // E.g., 0x1234... +address public immutable espressoBatcher; // E.g., 0x1234... ``` - Registered in the rollup configuration - Gives authority to post batches to L1 @@ -218,12 +218,12 @@ The implementation includes mechanisms for handling Espresso component failures. ### 2.1 Fallback Mechanism -The system includes a non-TEE batcher that can be activated when TEE components are unavailable. The owner can switch between TEE and non-TEE modes: +The system includes a fallback batcher that can be activated when TEE components are unavailable. The owner can switch between Espresso and fallback modes: **Fallback Batcher Activation** ```solidity function switchBatcher() external onlyOwner { - activeIsTee = !activeIsTee; // Toggle between TEE and non-TEE mode + activeIsEspresso = !activeIsEspresso; // Toggle between Espresso and fallback mode } ``` @@ -231,25 +231,25 @@ function switchBatcher() external onlyOwner { The fallback batcher is activated when any Espresso or TEE component fails: -- AWS Nitro Enclave failure (TEE batcher cannot start) +- AWS Nitro Enclave failure (Espresso batcher cannot start) - Espresso network unavailable (cannot get fast confirmations) - TEE attestation service down (cannot register new keys) - Succinct Network unavailable (cannot generate ZK proofs) #### Fallback Mode Behavior -When operating in non-TEE mode: +When operating in fallback mode: - Batcher posts directly to L1 without TEE attestation - No Espresso confirmation required before L1 posting -- BatchInbox accepts batches from the non-TEE batcher address +- BatchInbox accepts batches from the fallback batcher address - Derivation continues using standard OP Stack mechanisms **Switching Procedure** 1. Owner calls `switchBatcher()` on the BatchAuthenticator contract -2. Non-TEE batcher begins posting to L1 -3. When ready to resume TEE mode, update caffeinated height -4. Owner calls `switchBatcher()` again to re-enable TEE mode -5. TEE batcher resumes operation from the new heights +2. Fallback batcher begins posting to L1 +3. When ready to resume Espresso mode, update caffeinated height +4. Owner calls `switchBatcher()` again to re-enable Espresso mode +5. Espresso batcher resumes operation from the new heights References: @@ -262,10 +262,10 @@ References: #### Degradation Scenarios -The Espresso integration adds fast finality capabilities without compromising the baseline security of the standard OP Stack. All component failures are handled by switching to the fallback (non-TEE) batcher, which operates identically to the vanilla Celo L2 rollup: +The Espresso integration adds fast finality capabilities without compromising the baseline security of the standard OP Stack. All component failures are handled by switching to the fallback batcher, which operates identically to the vanilla Celo L2 rollup: - **Espresso network unavailable** - Cannot retrieve batches for fast confirmation -- **TEE enclave failure** - Cannot generate attestations or run TEE batcher +- **TEE enclave failure** - Cannot generate attestations or run Espresso batcher - **Succinct Network down** - Cannot generate ZK proofs for attestation verification - **Attestation service failure** - Cannot verify new TEE attestations @@ -283,17 +283,17 @@ OP Node → L1 BatchInbox → Standard Derivation Pipeline → L2 Blocks This path operates independently of: - Espresso network availability -- TEE batcher status +- Espresso batcher status - Fast finality features -**2. Non-TEE Batcher is Pre-Configured** +**2. Fallback Batcher is Pre-Configured** ```solidity -address public immutable teeBatcher; // Espresso-enhanced batcher -address public immutable nonTeeBatcher; // Fallback (standard) batcher +address public immutable espressoBatcher; // Espresso-enhanced batcher +address public immutable fallbackBatcher; // Fallback (standard) batcher ``` -The non-TEE batcher address is immutably configured in the contracts. The owner can activate it instantly via `switchBatcher()`. +The fallback batcher address is immutably configured in the contracts. The owner can activate it instantly via `switchBatcher()`. **3. Espresso Features are Additive, Not Replacement** @@ -313,8 +313,8 @@ The integration **adds** capabilities without **replacing** core functionality: When operating in fallback mode: ```solidity -if (!activeIsTee) { - // Non-TEE batcher posts to BatchInbox +if (!activeIsEspresso) { + // Fallback batcher posts to BatchInbox // No TEE attestation required // No Espresso submission required // Identical to standard OP Stack @@ -387,8 +387,8 @@ The sender verification hasn't been removed—it's been **moved to a more secure ```solidity // BatchInbox.sol fallback() external payable { - if (msg.sender != batchAuthenticator.teeBatcher() && - msg.sender != batchAuthenticator.nonTeeBatcher()) { + if (msg.sender != batchAuthenticator.espressoBatcher() && + msg.sender != batchAuthenticator.fallbackBatcher()) { revert("Not authorized"); } // ... store batch data ... @@ -402,20 +402,20 @@ The test suite validates degradation behavior: | Test | What It Validates | |------|-------------------| -| `TestBatcherSwitching` | Switching between TEE and non-TEE modes maintains correctness | +| `TestBatcherSwitching` | Switching between Espresso and fallback modes maintains correctness | | `TestBatcherRestart` | Batcher failures don't compromise chain state | -| `TestSmokeWithoutTEE` | System operates correctly in non-TEE mode | +| `TestSmokeWithFallback` | System operates correctly in fallback mode | | Fallback tests | Manual switch to vanilla mode preserves all functionality | #### Operational Guarantees **Guarantee 1: No Additional Liveness Risk** - If Espresso fails → system continues via L1 -- If TEE fails → system continues via non-TEE batcher +- If TEE fails → system continues via fallback batcher - Worst case: vanilla Celo rollup liveness **Guarantee 2: No Additional Safety Risk** -- L1 contracts validate all batches (TEE or non-TEE) +- L1 contracts validate all batches (Espresso or fallback) - Standard derivation path validates all blocks - Fault proof system covers all state transitions - Worst case: vanilla Celo rollup safety @@ -466,10 +466,10 @@ These tests run against a full Docker-based devnet with real Espresso nodes: | Test | What It Tests | Environment | |------|---------------|-------------| -| `TestSmokeWithoutTEE` | Basic operation without TEE | Standard mode | -| `TestSmokeWithTEE` | Basic operation with TEE | AWS Nitro Enclave | +| `TestSmokeWithFallback` | Basic operation with fallback batcher | Standard mode | +| `TestSmokeWithEspresso` | Basic operation with Espresso batcher | AWS Nitro Enclave | | `TestBatcherRestart` | Batcher restart resilience | Failure recovery | -| `TestBatcherSwitching` | Switch between TEE/non-TEE | Fallback activation | +| `TestBatcherSwitching` | Switch between Espresso/fallback | Fallback activation | | `TestBatcherActivePublishOnly` | Active batch publishing | Data availability | | `TestForcedTransaction` | Force inclusion via L1 | Censorship resistance | | `TestWithdrawal` | L2→L1 withdrawals | Bridge security | @@ -506,7 +506,7 @@ Each security validation layer has corresponding test coverage: | Validation Property | Test Coverage | Validation Method | |-------------------|-----------|-----------| -| Authenticity | Test 5, 6, TestSmokeWithTEE | TEE attestation verification | +| Authenticity | Test 5, 6, TestSmokeWithEspresso | TEE attestation verification | | Integrity | Test 7, 10, TestBatcherRestart | State consistency across restarts | | Liveness | Test 2, 14, TestBatcherSwitching | Operation under component failures | | Consistency | Test 3.2, 4, 8 | Deterministic state across nodes | @@ -524,7 +524,7 @@ Tests include various failure scenarios and recovery mechanisms: | Failure Scenario | Test Coverage | Recovery Mechanism Tested | |------------------|---------------|-------------------| | Batcher crash | Test 7, TestBatcherRestart | Stateless recovery | -| TEE unavailable | Test 14, TestBatcherSwitching | Fallback to non-TEE | +| TEE unavailable | Test 14, TestBatcherSwitching | Fallback to fallback batcher | | Espresso unavailable | Test 14 | Direct L1 posting | | L2 reorg | Test 4, 8 | Automatic state reset | | Invalid attestation | Test 5 | Contract rejection | @@ -536,7 +536,7 @@ Tests include various failure scenarios and recovery mechanisms: The devnet tests differ from environment tests in their setup: -- **AWS Nitro Enclaves**: `TestSmokeWithTEE` runs against actual Nitro hardware +- **AWS Nitro Enclaves**: `TestSmokeWithEspresso` runs against actual Nitro hardware - **Espresso Nodes**: Tests interact with running Espresso consensus nodes - **L1 Interaction**: Full Ethereum L1 deployment using actual contracts - **Docker Networking**: Inter-service communication over Docker networks @@ -621,34 +621,34 @@ The Espresso integration includes Foundry-based smart contract tests that valida #### BatchInbox Contract Tests -The `BatchInbox` contract enforces batcher authentication based on operating mode (TEE vs non-TEE). Test coverage includes: +The `BatchInbox` contract enforces batcher authentication based on operating mode (Espresso vs fallback). Test coverage includes: -**TEE Mode Authentication** +**Espresso Mode Authentication** ```solidity -// TEE batcher requires valid attestation -function test_fallback_teeBatcherRequiresAuthentication() external +// Espresso batcher requires valid attestation +function test_fallback_espressoBatcherRequiresAuthentication() external -// TEE batcher succeeds with authenticated batch -function test_fallback_teeBatcherSucceedsWithValidAuth() external +// Espresso batcher succeeds with authenticated batch +function test_fallback_espressoBatcherSucceedsWithValidAuth() external -// Non-TEE batcher cannot post when TEE is active -function test_fallback_nonTeeBatcherRevertsWhenTeeActiveAndUnauthenticated() external +// Fallback batcher cannot post when Espresso mode is active +function test_fallback_fallbackBatcherRevertsWhenEspressoActiveAndUnauthenticated() external ``` -These tests verify that when the system operates in TEE mode: -- Only the designated TEE batcher address can submit batches +These tests verify that when the system operates in Espresso mode: +- Only the designated Espresso batcher address can submit batches - Batches must be pre-authenticated via the `BatchAuthenticator` contract -- The non-TEE batcher is rejected even if attempting to submit authenticated batches +- The fallback batcher is rejected even if attempting to submit authenticated batches -**Fallback Mode (Non-TEE) Authentication** +**Fallback Mode Authentication** ```solidity -// Non-TEE batcher can post after mode switch -function test_fallback_nonTeeBatcherCanPostAfterSwitch() external +// Fallback batcher can post after mode switch +function test_fallback_fallbackBatcherCanPostAfterSwitch() external -// Non-TEE batcher doesn't require attestation -function test_fallback_nonTeeBatcherDoesNotRequireAuth() external +// Fallback batcher doesn't require attestation +function test_fallback_fallbackBatcherDoesNotRequireAuth() external // Inactive batcher (TEE) reverts in fallback mode function test_fallback_inactiveBatcherReverts() external @@ -658,9 +658,9 @@ function test_fallback_unauthorizedAddressReverts() external ``` These tests verify that when switched to fallback mode: -- Only the designated non-TEE batcher can submit batches +- Only the designated fallback batcher can submit batches - No attestation or pre-authentication is required -- The TEE batcher cannot post (even with valid attestations) +- The Espresso batcher cannot post (even with valid attestations) - Random unauthorized addresses are rejected **Security Properties Validated:** @@ -871,7 +871,7 @@ The Celo-Espresso integration has undergone comprehensive internal security audi | Attack Vector | Mitigation | Test Coverage | |---------------|------------|---------------| -| Malicious batcher operator | TEE attestation proves code integrity | [Test 5](espresso/environment/5_batch_authentication_test.go), [TestSmokeWithTEE](espresso/devnet-tests/smoke_test.go) | +| Malicious batcher operator | TEE attestation proves code integrity | [Test 5](espresso/environment/5_batch_authentication_test.go), [TestSmokeWithEspresso](espresso/devnet-tests/smoke_test.go) | | Invalid TEE attestation | On-chain ZK proof verification rejects unauthorized batches | [TestE2eDevnetWithInvalidAttestation](espresso/environment/5_batch_authentication_test.go) | | Unattested batcher key | Unsafe blocks produced; safe blocks require valid attestation | [TestE2eDevnetWithUnattestedBatcherKey](espresso/environment/5_batch_authentication_test.go) | | Forged batch signature | BatchAuthenticator validates ECDSA signatures against registered signers | [BatchAuthenticator.t.sol](packages/contracts-bedrock/test/L1/BatchAuthenticator.t.sol) | @@ -883,7 +883,7 @@ The Celo-Espresso integration has undergone comprehensive internal security audi |---------------|------------|---------------| | Compromised Espresso node | Majority voting across multiple query service nodes | [Test 12](espresso/environment/12_enforce_majority_rule_test.go) | | Espresso query service disagreement | 2/3 majority rule; inconsistent responses trigger re-query | [Test 12](espresso/environment/12_enforce_majority_rule_test.go) | -| TEE/Espresso unavailability | Fallback to non-TEE batcher with standard OP Stack security | [Test 14](espresso/environment/14_batcher_fallback_test.go), [TestBatcherSwitching](espresso/devnet-tests/batcher_switching_test.go) | +| TEE/Espresso unavailability | Fallback to fallback batcher with standard OP Stack security | [Test 14](espresso/environment/14_batcher_fallback_test.go), [TestBatcherSwitching](espresso/devnet-tests/batcher_switching_test.go) | | Succinct Network unavailability | Batcher cannot register new attestations until service restored; existing keys continue | - | | Execution engine crash | Stateless restart recovery; no persistent state required | [Test 7](espresso/environment/7_stateless_batcher_test.go) | @@ -908,8 +908,8 @@ The Celo-Espresso integration has undergone comprehensive internal security audi |---------------|------------|---------------| | Unauthorized batcher switch | Only contract owner can call switchBatcher() | [test_switchBatcher_revertsForNonOwner](packages/contracts-bedrock/test/L1/BatchAuthenticator.t.sol) | | Zero address configuration | Constructor rejects zero addresses for batchers | [test_constructor_revertsWhen*IsZero](packages/contracts-bedrock/test/L1/BatchAuthenticator.t.sol) | -| Wrong batcher in TEE mode | BatchInbox enforces only TEE batcher can post in TEE mode | [test_fallback_teeBatcherRequiresAuthentication](packages/contracts-bedrock/test/L1/BatchInbox.t.sol) | -| Wrong batcher in fallback mode | BatchInbox enforces only non-TEE batcher can post in fallback mode | [test_fallback_unauthorizedAddressReverts](packages/contracts-bedrock/test/L1/BatchInbox.t.sol) | +| Wrong batcher in Espresso mode | BatchInbox enforces only Espresso batcher can post in Espresso mode | [test_fallback_espressoBatcherRequiresAuthentication](packages/contracts-bedrock/test/L1/BatchInbox.t.sol) | +| Wrong batcher in fallback mode | BatchInbox enforces only fallback batcher can post in fallback mode | [test_fallback_unauthorizedAddressReverts](packages/contracts-bedrock/test/L1/BatchInbox.t.sol) | | Unauthenticated batch in TEE mode | Derivation pipeline checks BatchInfoAuthenticated events in lookback window | [test_authenticateBatchInfo_succeeds](packages/contracts-bedrock/test/L1/BatchAuthenticator.t.sol) | **Future Threat Vectors** @@ -918,7 +918,7 @@ The Celo-Espresso integration has undergone comprehensive internal security audi |---------------|------------------|-------------------| | Operator network MitM | Operator controls enclave networking | SSL certificate pinning or in-enclave L1 light client | | Espresso query service trust | Majority voting across operators | Direct QC and namespace proof verification | -| Centralized batcher operation | Single TEE batcher address | Permissionless batching with stake-based selection | +| Centralized batcher operation | Single Espresso batcher address | Permissionless batching with stake-based selection | ## 9. Next steps diff --git a/espresso/bindings/batch_authenticator.go b/espresso/bindings/batch_authenticator.go index 62ab71cf1e1..e6876dd7ea2 100644 --- a/espresso/bindings/batch_authenticator.go +++ b/espresso/bindings/batch_authenticator.go @@ -31,8 +31,8 @@ var ( // BatchAuthenticatorMetaData contains all meta data concerning the BatchAuthenticator contract. var BatchAuthenticatorMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"GUARDIAN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"activeIsTee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addGuardian\",\"inputs\":[{\"name\":\"guardian\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"authenticateBatchInfo\",\"inputs\":[{\"name\":\"commitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"espressoTEEVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEspressoTEEVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGuardians\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleMember\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleMemberCount\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleMembers\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"guardianCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_espressoTEEVerifier\",\"type\":\"address\",\"internalType\":\"contractIEspressoTEEVerifier\"},{\"name\":\"_teeBatcher\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractISystemConfig\"},{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isGuardian\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"nitroValidator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIProxyAdmin\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdminOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerSigner\",\"inputs\":[{\"name\":\"attestationTbs\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeGuardian\",\"inputs\":[{\"name\":\"guardian\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setTeeBatcher\",\"inputs\":[{\"name\":\"_newTeeBatcher\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"switchBatcher\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"teeBatcher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"BatchInfoAuthenticated\",\"inputs\":[{\"name\":\"commitment\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BatcherSwitched\",\"inputs\":[{\"name\":\"activeIsTee\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GuardianAdded\",\"inputs\":[{\"name\":\"guardian\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GuardianRemoved\",\"inputs\":[{\"name\":\"guardian\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferStarted\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SignerRegistrationInitiated\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TeeBatcherUpdated\",\"inputs\":[{\"name\":\"oldTeeBatcher\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newTeeBatcher\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"BatchAuthenticator_Paused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAddress\",\"inputs\":[{\"name\":\"contract_\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidGuardianAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotGuardian\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"NotGuardianOrOwner\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnableInvalidOwner\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdmin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOrProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotResolvedDelegateProxy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotSharedProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_ProxyAdminNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReinitializableBase_ZeroInitVersion\",\"inputs\":[]}]", - Bin: "0x60a060405234801561000f575f80fd5b50600160805261001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161267a6100f35f395f8181610395015261133e015261267a5ff3fe608060405234801561000f575f80fd5b506004361061024f575f3560e01c806379ba50971161013d578063ca15c873116100b8578063e30c397811610088578063f8c8765e1161006e578063f8c8765e146105aa578063fa14fe6d146105bd578063fc619e41146105dd575f80fd5b8063e30c39781461058f578063f2fde38b14610597575f80fd5b8063ca15c87314610542578063d547741f14610555578063d909ba7c14610568578063dad544e014610587575f80fd5b8063a217fddf1161010d578063a526d83b116100f3578063a526d83b14610514578063ba58e82a14610527578063bc347f471461053a575f80fd5b8063a217fddf146104fa578063a3246ad314610501575f80fd5b806379ba5097146104735780638da5cb5b1461047b5780639010d07c1461048357806391d1485414610496575f80fd5b806338d38c97116101cd5780635c975abb1161019d57806371404156116101835780637140415614610433578063715018a6146104465780637877a9ed1461044e575f80fd5b80635c975abb146104185780636f7eda4714610420575f80fd5b806338d38c971461038e5780633e47158c146103bf57806354387ad7146103c757806354fd4d50146103cf575f80fd5b8063248a9ca3116102225780632f2ff15d116102085780632f2ff15d1461034657806333d7e2bd1461035b57806336568abe1461037b575f80fd5b8063248a9ca3146102d057806324ea54f41461031f575f80fd5b806301ffc9a7146102535780630665f04b1461027b5780630c68ba21146102905780631b076a4c146102a3575b5f80fd5b61026661026136600461216b565b6105f0565b60405190151581526020015b60405180910390f35b61028361064b565b60405161027291906121aa565b61026661029e366004612224565b610739565b6102ab610785565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610272565b6103116102de36600461223f565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610272565b6103117f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504181565b610359610354366004612256565b61081b565b005b6002546102ab9073ffffffffffffffffffffffffffffffffffffffff1681565b610359610389366004612256565b610864565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610272565b6102ab6108c2565b610311610ac8565b61040b6040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516102729190612284565b610266610af2565b61035961042e366004612224565b610b83565b610359610441366004612224565b610c69565b610359610d2b565b6001546102669074010000000000000000000000000000000000000000900460ff1681565b610359610d3e565b6102ab610db6565b6102ab6104913660046122d7565b610dbf565b6102666104a4366004612256565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6103115f81565b61028361050f36600461223f565b610dff565b610359610522366004612224565b610e42565b61035961053536600461233c565b610f4f565b61035961104b565b61031161055036600461223f565b611179565b610359610563366004612256565b6111b0565b5f546102ab9073ffffffffffffffffffffffffffffffffffffffff1681565b6102ab6111f3565b6102ab611244565b6103596105a5366004612224565b611285565b6103596105b83660046123a3565b61133c565b6001546102ab9073ffffffffffffffffffffffffffffffffffffffff1681565b6103596105eb3660046123fc565b61164c565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f000000000000000000000000000000000000000000000000000000001480610645575061064582611757565b92915050565b60605f6106777f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041611179565b90505f8167ffffffffffffffff81111561069357610693612444565b6040519080825280602002602001820160405280156106bc578160200160208202803683370190505b5090505f5b82811015610732576106f37f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504182610dbf565b82828151811061070557610705612471565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526001016106c1565b5092915050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f18476f5b3d6d00091ddd56161ac5e9ba807d29b59f48f8df98938ee352a7cf23602052604081205460ff16610645565b600154604080517fd80a4c2800000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff169163d80a4c289160048083019260209291908290030181865afa1580156107f2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610816919061249e565b905090565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610854816117ed565b61085e83836117f7565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146108b3576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108bd828261184c565b505050565b5f806108ec7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff81161561090f57919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000081525051600261095291906124e6565b604080513060208201525f918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000091909117906109ac906060015b604051602081830303815290604052805190602001205490565b146109e3576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513060208201526001918101919091525f90610a0490606001610992565b905073ffffffffffffffffffffffffffffffffffffffff811615610a96578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a8f919061249e565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6108167f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041611179565b600254604080517f5c975abb00000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610b5f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061081691906124fd565b610b8b611898565b73ffffffffffffffffffffffffffffffffffffffff8116610bf5576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f5186a10c46a3a9c7ec5470c24b80c6414eba1320cf76bf72ef5135773c7b33279190a35050565b610c71611898565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f18476f5b3d6d00091ddd56161ac5e9ba807d29b59f48f8df98938ee352a7cf23602052604090205460ff1615610d2857610ce77f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041826111b0565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c52905f90a25b50565b610d33611898565b610d3c5f6118f0565b565b3380610d48611244565b73ffffffffffffffffffffffffffffffffffffffff1614610dad576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610bec565b610d28816118f0565b5f610816611936565b5f8281527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220610df7908461195e565b949350505050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006020819052604090912060609190610e3b90611969565b9392505050565b610e4a611898565b73ffffffffffffffffffffffffffffffffffffffff8116610e97576040517f1b08105400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f18476f5b3d6d00091ddd56161ac5e9ba807d29b59f48f8df98938ee352a7cf23602052604090205460ff16610d2857610f0c7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50418261081b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969905f90a250565b610f57610af2565b15610f8e576040517fb3a266c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180546040517f7f82ea6c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911691637f82ea6c91610fee918891889188918891905f90600401612598565b5f604051808303815f87803b158015611005575f80fd5b505af1158015611017573d5f803e3d5ffd5b50506040513392507f665b016a0ac50d1280744eaaff1cf21254d0fd30e4c3987d291913c32163416c91505f90a250505050565b335f9081527f18476f5b3d6d00091ddd56161ac5e9ba807d29b59f48f8df98938ee352a7cf23602052604090205460ff161580156110bc575061108c610db6565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156110f5576040517fd53780c4000000000000000000000000000000000000000000000000000000008152336004820152602401610bec565b6001805460ff7401000000000000000000000000000000000000000080830482161581027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9093169290921792839055604051919092049091161515907fb957d7fc29e5974594db2f2e132076d52f42c0734eae05fd5ea080d1ba175ad3905f90a2565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220610e3b90611975565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111e9816117ed565b61085e838361184c565b5f6111fc6108c2565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107f2573d5f803e3d5ffd5b5f807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c005b5473ffffffffffffffffffffffffffffffffffffffff1692915050565b61128d611898565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811782556112f6610db6565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b7f000000000000000000000000000000000000000000000000000000000000000060ff165f61136961197e565b805490915068010000000000000000900460ff16806113965750805467ffffffffffffffff808416911610155b156113cd576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001667ffffffffffffffff831617680100000000000000001781556114126119a6565b61141b83611a27565b73ffffffffffffffffffffffffffffffffffffffff8516611480576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86166004820152602401610bec565b73ffffffffffffffffffffffffffffffffffffffff84166114e5576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610bec565b73ffffffffffffffffffffffffffffffffffffffff861661154a576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87166004820152602401610bec565b600180545f805473ffffffffffffffffffffffffffffffffffffffff8981167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556002805489841692169190911790557fffffffffffffffffffffff000000000000000000000000000000000000000000909116908816177401000000000000000000000000000000000000000017905580547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16815560405167ffffffffffffffff831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b611654610af2565b1561168b576040517fb3a266c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180546040517f55ddfa0600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116916355ddfa06916116e8918691869189915f906004016125ea565b602060405180830381865afa158015611703573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061172791906124fd565b5060405183907fee0d07d204d979d28885955e59a46f754c4db7378b7df1a95123525aac6e3f80905f90a2505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061064557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610645565b610d288133611a51565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000816118248585611afb565b90508015610df7575f8581526020839052604090206118439085611c19565b50949350505050565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000816118798585611c3a565b90508015610df7575f8581526020839052604090206118439085611d16565b336118a1610db6565b73ffffffffffffffffffffffffffffffffffffffff1614610d3c576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610bec565b5f6118f9610db6565b905061190482611d37565b73ffffffffffffffffffffffffffffffffffffffff81161561192c5761192a5f8261184c565b505b6108bd5f836117f7565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300611268565b5f610e3b8383611d87565b60605f610e3b83611dad565b5f610645825490565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610645565b336119af6108c2565b73ffffffffffffffffffffffffffffffffffffffff16141580156119f05750336119d76111f3565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610d3c576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a2f611e06565b611a3881611e44565b611a40611e55565b611a48611e55565b610d2881611e5d565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611af7576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610bec565b5050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16611c10575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611bac3390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610645565b5f915050610645565b5f610e3b8373ffffffffffffffffffffffffffffffffffffffff8416611e9a565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff1615611c10575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610645565b5f610e3b8373ffffffffffffffffffffffffffffffffffffffff8416611ee6565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155611af782611fc0565b5f825f018281548110611d9c57611d9c612471565b905f5260205f200154905092915050565b6060815f01805480602002602001604051908101604052809291908181526020018280548015611dfa57602002820191905f5260205f20905b815481526020019060010190808311611de6575b50505050509050919050565b611e0e612055565b610d3c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e4c611e06565b610d2881612073565b610d3c611e06565b611e65611e06565b611e6f5f826117f7565b50610d287f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50415f6120ca565b5f818152600183016020526040812054611edf57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610645565b505f610645565b5f8181526001830160205260408120548015611c10575f611f0860018361262d565b85549091505f90611f1b9060019061262d565b9050808214611f7a575f865f018281548110611f3957611f39612471565b905f5260205f200154905080875f018481548110611f5957611f59612471565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080611f8b57611f8b612640565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610645565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f61205e61197e565b5468010000000000000000900460ff16919050565b61207b611e06565b73ffffffffffffffffffffffffffffffffffffffff8116610dad576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610bec565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268005f612123845f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b5f85815260208490526040808220600101869055519192508491839187917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a450505050565b5f6020828403121561217b575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e3b575f80fd5b602080825282518282018190525f9190848201906040850190845b818110156121f757835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016121c5565b50909695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610d28575f80fd5b5f60208284031215612234575f80fd5b8135610e3b81612203565b5f6020828403121561224f575f80fd5b5035919050565b5f8060408385031215612267575f80fd5b82359150602083013561227981612203565b809150509250929050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f80604083850312156122e8575f80fd5b50508035926020909101359150565b5f8083601f840112612307575f80fd5b50813567ffffffffffffffff81111561231e575f80fd5b602083019150836020828501011115612335575f80fd5b9250929050565b5f805f806040858703121561234f575f80fd5b843567ffffffffffffffff80821115612366575f80fd5b612372888389016122f7565b9096509450602087013591508082111561238a575f80fd5b50612397878288016122f7565b95989497509550505050565b5f805f80608085870312156123b6575f80fd5b84356123c181612203565b935060208501356123d181612203565b925060408501356123e181612203565b915060608501356123f181612203565b939692955090935050565b5f805f6040848603121561240e575f80fd5b83359250602084013567ffffffffffffffff81111561242b575f80fd5b612437868287016122f7565b9497909650939450505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f602082840312156124ae575f80fd5b8151610e3b81612203565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417610645576106456124b9565b5f6020828403121561250d575f80fd5b81518015158114610e3b575f80fd5b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60028110610d28577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b608081525f6125ab60808301888a61251c565b82810360208401526125be81878961251c565b9150506125ca84612563565b8360408301526125d983612563565b826060830152979650505050505050565b608081525f6125fd60808301878961251c565b905084602083015261260e84612563565b83604083015261261d83612563565b8260608301529695505050505050565b81810381811115610645576106456124b9565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea164736f6c6343000819000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"activeIsEspresso\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addGuardian\",\"inputs\":[{\"name\":\"guardian\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"authenticateBatchInfo\",\"inputs\":[{\"name\":\"commitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"espressoBatcher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"espressoTEEVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEspressoTEEVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGuardians\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardianCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_espressoTEEVerifier\",\"type\":\"address\",\"internalType\":\"contractIEspressoTEEVerifier\"},{\"name\":\"_espressoBatcher\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractISystemConfig\"},{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isGuardian\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"nitroValidator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIProxyAdmin\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdminOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerSigner\",\"inputs\":[{\"name\":\"verificationData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeGuardian\",\"inputs\":[{\"name\":\"guardian\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEspressoBatcher\",\"inputs\":[{\"name\":\"_newEspressoBatcher\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"switchBatcher\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"BatchInfoAuthenticated\",\"inputs\":[{\"name\":\"commitment\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BatcherSwitched\",\"inputs\":[{\"name\":\"activeIsEspresso\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EspressoBatcherUpdated\",\"inputs\":[{\"name\":\"oldEspressoBatcher\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newEspressoBatcher\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GuardianAdded\",\"inputs\":[{\"name\":\"guardian\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GuardianRemoved\",\"inputs\":[{\"name\":\"guardian\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferStarted\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SignerRegistrationInitiated\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BatchAuthenticator_Paused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAddress\",\"inputs\":[{\"name\":\"contract_\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidGuardianAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotGuardian\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"NotGuardianOrOwner\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnableInvalidOwner\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OwnerCantBeGuardian\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdmin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOrProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotResolvedDelegateProxy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotSharedProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_ProxyAdminNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReinitializableBase_ZeroInitVersion\",\"inputs\":[]}]", + Bin: "0x60a060405234801561000f575f80fd5b5060015f8160ff160361004e576040517f9b01afed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff1660808160ff16815250505061006b61007060201b60201c565b6101eb565b5f61007f61016e60201b60201c565b9050805f0160089054906101000a900460ff16156100c9576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff161461016b5767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff60405161016291906101d2565b60405180910390a15b50565b5f8061017e61018760201b60201c565b90508091505090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005f1b905090565b5f67ffffffffffffffff82169050919050565b6101cc816101b0565b82525050565b5f6020820190506101e55f8301846101c3565b92915050565b60805161261b6102035f395f61065d015261261b5ff3fe608060405234801561000f575f80fd5b5060043610610171575f3560e01c806379ba5097116100dc578063dad544e011610095578063f2fde38b1161006f578063f2fde38b146103b9578063f8c8765e146103d5578063fa14fe6d146103f1578063fc619e411461040f57610171565b8063dad544e01461035f578063e30c39781461037d578063eca919df1461039b57610171565b806379ba5097146102d757806388da3bb7146102e15780638da5cb5b146102ff578063a526d83b1461031d578063ba58e82a14610339578063bc347f471461035557610171565b80633e47158c1161012e5780633e47158c1461023957806354387ad71461025757806354fd4d50146102755780635c975abb1461029357806371404156146102b1578063715018a6146102cd57610171565b80630665f04b146101755780630c68ba21146101935780631b076a4c146101c35780632ce53247146101e157806333d7e2bd146101fd57806338d38c971461021b575b5f80fd5b61017d61042b565b60405161018a9190611d08565b60405180910390f35b6101ad60048036038101906101a89190611d5a565b610444565b6040516101ba9190611d9f565b60405180910390f35b6101cb610468565b6040516101d89190611dc7565b60405180910390f35b6101fb60048036038101906101f69190611d5a565b6104fc565b005b610205610635565b6040516102129190611e3b565b60405180910390f35b61022361065a565b6040516102309190611e6f565b60405180910390f35b610241610681565b60405161024e9190611ea8565b60405180910390f35b61025f6108d0565b60405161026c9190611ed9565b60405180910390f35b61027d6108e8565b60405161028a9190611f62565b60405180910390f35b61029b610921565b6040516102a89190611d9f565b60405180910390f35b6102cb60048036038101906102c69190611d5a565b6109b5565b005b6102d5610a2f565b005b6102df610a42565b005b6102e9610ad0565b6040516102f69190611dc7565b60405180910390f35b610307610af3565b6040516103149190611dc7565b60405180910390f35b61033760048036038101906103329190611d5a565b610b01565b005b610353600480360381019061034e9190611fe3565b610c85565b005b61035d610d9f565b005b610367610ea7565b6040516103749190611dc7565b60405180910390f35b610385610f21565b6040516103929190611dc7565b60405180910390f35b6103a3610f56565b6040516103b09190611d9f565b60405180910390f35b6103d360048036038101906103ce9190611d5a565b610f69565b005b6103ef60048036038101906103ea91906120d7565b610fd0565b005b6103f961133c565b604051610406919061215b565b60405180910390f35b610429600480360381019061042491906121a7565b611361565b005b606061043f610438611475565b5f0161149c565b905090565b5f61046182610451611475565b5f016114bb90919063ffffffff16565b9050919050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d80a4c286040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f7919061223f565b905090565b6105046114e8565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361057457806040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815260040161056b9190611dc7565b60405180910390fd5b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc7bef7b97a10ef514a01fa4d5552f5c57e72a37aa901f567bb49bbf9ea449f9c60405160405180910390a35050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f7f0000000000000000000000000000000000000000000000000000000000000000905090565b5f806106ae7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035f1b61156f565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106ec57809150506108cd565b60026040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000008152505161072f9190612297565b7f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000005f1c175f1b610786305f60405160200161076b9291906122d8565b60405160208183030381529060405280519060200120611579565b146107bd576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6107f03060016040516020016107d59291906122d8565b6040516020818303038152906040528051906020012061156f565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461089b578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561086e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108929190612313565b925050506108cd565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90565b5f6108e36108dc611475565b5f01611583565b905090565b6040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561098c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b09190612368565b905090565b6109bd6114e8565b5f6109c6611475565b90506109dd82825f0161159690919063ffffffff16565b6109e75750610a2c565b8173ffffffffffffffffffffffffffffffffffffffff167fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c5260405160405180910390a2505b50565b610a376114e8565b610a405f6115c3565b565b5f610a4b611600565b90508073ffffffffffffffffffffffffffffffffffffffff16610a6c610f21565b73ffffffffffffffffffffffffffffffffffffffff1614610ac457806040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610abb9190611dc7565b60405180910390fd5b610acd816115c3565b50565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f610afc611607565b905090565b610b096114e8565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b6e576040517f1b08105400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b76610af3565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610be15750610bb2610f21565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15610c18576040517f3af3c41c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610c21611475565b9050610c3882825f0161163c90919063ffffffff16565b15610c81578173ffffffffffffffffffffffffffffffffffffffff167f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f96960405160405180910390a25b5050565b610c8d610921565b15610cc4576040517fb3a266c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637f82ea6c8585858560015f6040518763ffffffff1660e01b8152600401610d2996959493929190612496565b5f604051808303815f87803b158015610d40575f80fd5b505af1158015610d52573d5f803e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f665b016a0ac50d1280744eaaff1cf21254d0fd30e4c3987d291913c32163416c60405160405180910390a250505050565b610dbb33610dab611475565b5f016114bb90919063ffffffff16565b158015610dfb5750610dcb610af3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610e3d57336040517fd53780c4000000000000000000000000000000000000000000000000000000008152600401610e349190611dc7565b60405180910390fd5b600160149054906101000a900460ff1615600160146101000a81548160ff021916908315150217905550600160149054906101000a900460ff1615157fb957d7fc29e5974594db2f2e132076d52f42c0734eae05fd5ea080d1ba175ad360405160405180910390a2565b5f610eb0610681565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ef8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1c9190612313565b905090565b5f80610f2b611669565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b600160149054906101000a900460ff1681565b610f716114e8565b610f8d81610f7d611475565b5f016114bb90919063ffffffff16565b15610fc4576040517f3af3c41c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fcd81611690565b50565b610fd861065a565b60ff165f610fe4611749565b9050805f0160089054906101000a900460ff168061102c57508167ffffffffffffffff16815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610155b15611063576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001815f0160086101000a81548160ff0219169083151502179055506110b061175c565b6110b98361180b565b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361112957846040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526004016111209190611dc7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361119957836040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526004016111909190611dc7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361120957856040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526004016112009190611dc7565b60405180910390fd5b8560015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550845f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060146101000a81548160ff0219169083151502179055505f815f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d28260405161132c919061250d565b60405180910390a1505050505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611369610921565b156113a0576040517fb3a266c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166355ddfa0683838660015f6040518663ffffffff1660e01b8152600401611403959493929190612535565b602060405180830381865afa15801561141e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114429190612368565b50827fee0d07d204d979d28885955e59a46f754c4db7378b7df1a95123525aac6e3f8060405160405180910390a2505050565b5f7f0f4ac8aae5a4fa6a3612928fcd8255b475ff86b500ae30bb272e61542cfc6f00905090565b60605f6114aa835f0161181f565b905060608190508092505050919050565b5f6114e0835f018373ffffffffffffffffffffffffffffffffffffffff165f1b611878565b905092915050565b6114f0611600565b73ffffffffffffffffffffffffffffffffffffffff1661150e610af3565b73ffffffffffffffffffffffffffffffffffffffff161461156d57611531611600565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016115649190611dc7565b60405180910390fd5b565b5f81549050919050565b5f81549050919050565b5f61158f825f01611898565b9050919050565b5f6115bb835f018373ffffffffffffffffffffffffffffffffffffffff165f1b6118a7565b905092915050565b5f6115cc611669565b9050805f015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556115fc826119a3565b5050565b5f33905090565b5f80611611611a74565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b5f611661835f018373ffffffffffffffffffffffffffffffffffffffff165f1b611a9b565b905092915050565b5f7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00905090565b6116986114e8565b5f6116a1611669565b905081815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff16611703610af3565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b5f80611753611b02565b90508091505090565b3373ffffffffffffffffffffffffffffffffffffffff1661177b610681565b73ffffffffffffffffffffffffffffffffffffffff16141580156117d257503373ffffffffffffffffffffffffffffffffffffffff166117b9610ea7565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611809576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611813611b2b565b61181c81611b6b565b50565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561186c57602002820191905f5260205f20905b815481526020019060010190808311611858575b50505050509050919050565b5f80836001015f8481526020019081526020015f20541415905092915050565b5f815f01805490509050919050565b5f80836001015f8481526020019081526020015f205490505f8114611998575f6001826118d49190612581565b90505f6001865f01805490506118ea9190612581565b9050808214611950575f865f018281548110611909576119086125b4565b5b905f5260205f200154905080875f01848154811061192a576119296125b4565b5b905f5260205f20018190555083876001015f8381526020019081526020015f2081905550505b855f01805480611963576119626125e1565b5b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f90556001935050505061199d565b5f9150505b92915050565b5f6119ac611a74565b90505f815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b5f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b5f611aa68383611878565b611af857825f0182908060018154018082558091505060019003905f5260205f20015f9091909190915055825f0180549050836001015f8481526020019081526020015f208190555060019050611afc565b5f90505b92915050565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005f1b905090565b611b33611b7f565b611b69576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611b73611b2b565b611b7c81611b9d565b50565b5f611b88611749565b5f0160089054906101000a900460ff16905090565b611ba5611b2b565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c15575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611c0c9190611dc7565b60405180910390fd5b611c1e816115c3565b50565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611c7382611c4a565b9050919050565b611c8381611c69565b82525050565b5f611c948383611c7a565b60208301905092915050565b5f602082019050919050565b5f611cb682611c21565b611cc08185611c2b565b9350611ccb83611c3b565b805f5b83811015611cfb578151611ce28882611c89565b9750611ced83611ca0565b925050600181019050611cce565b5085935050505092915050565b5f6020820190508181035f830152611d208184611cac565b905092915050565b5f80fd5b5f80fd5b611d3981611c69565b8114611d43575f80fd5b50565b5f81359050611d5481611d30565b92915050565b5f60208284031215611d6f57611d6e611d28565b5b5f611d7c84828501611d46565b91505092915050565b5f8115159050919050565b611d9981611d85565b82525050565b5f602082019050611db25f830184611d90565b92915050565b611dc181611c69565b82525050565b5f602082019050611dda5f830184611db8565b92915050565b5f819050919050565b5f611e03611dfe611df984611c4a565b611de0565b611c4a565b9050919050565b5f611e1482611de9565b9050919050565b5f611e2582611e0a565b9050919050565b611e3581611e1b565b82525050565b5f602082019050611e4e5f830184611e2c565b92915050565b5f60ff82169050919050565b611e6981611e54565b82525050565b5f602082019050611e825f830184611e60565b92915050565b5f611e9282611e0a565b9050919050565b611ea281611e88565b82525050565b5f602082019050611ebb5f830184611e99565b92915050565b5f819050919050565b611ed381611ec1565b82525050565b5f602082019050611eec5f830184611eca565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611f3482611ef2565b611f3e8185611efc565b9350611f4e818560208601611f0c565b611f5781611f1a565b840191505092915050565b5f6020820190508181035f830152611f7a8184611f2a565b905092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112611fa357611fa2611f82565b5b8235905067ffffffffffffffff811115611fc057611fbf611f86565b5b602083019150836001820283011115611fdc57611fdb611f8a565b5b9250929050565b5f805f8060408587031215611ffb57611ffa611d28565b5b5f85013567ffffffffffffffff81111561201857612017611d2c565b5b61202487828801611f8e565b9450945050602085013567ffffffffffffffff81111561204757612046611d2c565b5b61205387828801611f8e565b925092505092959194509250565b5f61206b82611c69565b9050919050565b61207b81612061565b8114612085575f80fd5b50565b5f8135905061209681612072565b92915050565b5f6120a682611c69565b9050919050565b6120b68161209c565b81146120c0575f80fd5b50565b5f813590506120d1816120ad565b92915050565b5f805f80608085870312156120ef576120ee611d28565b5b5f6120fc87828801612088565b945050602061210d87828801611d46565b935050604061211e878288016120c3565b925050606061212f87828801611d46565b91505092959194509250565b5f61214582611e0a565b9050919050565b6121558161213b565b82525050565b5f60208201905061216e5f83018461214c565b92915050565b5f819050919050565b61218681612174565b8114612190575f80fd5b50565b5f813590506121a18161217d565b92915050565b5f805f604084860312156121be576121bd611d28565b5b5f6121cb86828701612193565b935050602084013567ffffffffffffffff8111156121ec576121eb611d2c565b5b6121f886828701611f8e565b92509250509250925092565b5f61220e82611c69565b9050919050565b61221e81612204565b8114612228575f80fd5b50565b5f8151905061223981612215565b92915050565b5f6020828403121561225457612253611d28565b5b5f6122618482850161222b565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6122a182611ec1565b91506122ac83611ec1565b92508282026122ba81611ec1565b915082820484148315176122d1576122d061226a565b5b5092915050565b5f6040820190506122eb5f830185611db8565b6122f86020830184611eca565b9392505050565b5f8151905061230d81611d30565b92915050565b5f6020828403121561232857612327611d28565b5b5f612335848285016122ff565b91505092915050565b61234781611d85565b8114612351575f80fd5b50565b5f815190506123628161233e565b92915050565b5f6020828403121561237d5761237c611d28565b5b5f61238a84828501612354565b91505092915050565b5f82825260208201905092915050565b828183375f83830152505050565b5f6123bc8385612393565b93506123c98385846123a3565b6123d283611f1a565b840190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6002811061241b5761241a6123dd565b5b50565b5f81905061242b8261240a565b919050565b5f61243a8261241e565b9050919050565b61244a81612430565b82525050565b60028110612461576124606123dd565b5b50565b5f81905061247182612450565b919050565b5f61248082612464565b9050919050565b61249081612476565b82525050565b5f6080820190508181035f8301526124af81888a6123b1565b905081810360208301526124c48186886123b1565b90506124d36040830185612441565b6124e06060830184612487565b979650505050505050565b5f67ffffffffffffffff82169050919050565b612507816124eb565b82525050565b5f6020820190506125205f8301846124fe565b92915050565b61252f81612174565b82525050565b5f6080820190508181035f83015261254e8187896123b1565b905061255d6020830186612526565b61256a6040830185612441565b6125776060830184612487565b9695505050505050565b5f61258b82611ec1565b915061259683611ec1565b92508282039050818111156125ae576125ad61226a565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea164736f6c6343000819000a", } // BatchAuthenticatorABI is the input ABI used to generate the binding from. @@ -202,97 +202,66 @@ func (_BatchAuthenticator *BatchAuthenticatorTransactorRaw) Transact(opts *bind. return _BatchAuthenticator.Contract.contract.Transact(opts, method, params...) } -// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// ActiveIsEspresso is a free data retrieval call binding the contract method 0xeca919df. // -// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_BatchAuthenticator *BatchAuthenticatorCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function activeIsEspresso() view returns(bool) +func (_BatchAuthenticator *BatchAuthenticatorCaller) ActiveIsEspresso(opts *bind.CallOpts) (bool, error) { var out []interface{} - err := _BatchAuthenticator.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + err := _BatchAuthenticator.contract.Call(opts, &out, "activeIsEspresso") if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. -// -// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_BatchAuthenticator *BatchAuthenticatorSession) DEFAULTADMINROLE() ([32]byte, error) { - return _BatchAuthenticator.Contract.DEFAULTADMINROLE(&_BatchAuthenticator.CallOpts) -} - -// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. -// -// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_BatchAuthenticator *BatchAuthenticatorCallerSession) DEFAULTADMINROLE() ([32]byte, error) { - return _BatchAuthenticator.Contract.DEFAULTADMINROLE(&_BatchAuthenticator.CallOpts) -} - -// GUARDIANROLE is a free data retrieval call binding the contract method 0x24ea54f4. -// -// Solidity: function GUARDIAN_ROLE() view returns(bytes32) -func (_BatchAuthenticator *BatchAuthenticatorCaller) GUARDIANROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _BatchAuthenticator.contract.Call(opts, &out, "GUARDIAN_ROLE") - - if err != nil { - return *new([32]byte), err + return *new(bool), err } - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) return out0, err } -// GUARDIANROLE is a free data retrieval call binding the contract method 0x24ea54f4. +// ActiveIsEspresso is a free data retrieval call binding the contract method 0xeca919df. // -// Solidity: function GUARDIAN_ROLE() view returns(bytes32) -func (_BatchAuthenticator *BatchAuthenticatorSession) GUARDIANROLE() ([32]byte, error) { - return _BatchAuthenticator.Contract.GUARDIANROLE(&_BatchAuthenticator.CallOpts) +// Solidity: function activeIsEspresso() view returns(bool) +func (_BatchAuthenticator *BatchAuthenticatorSession) ActiveIsEspresso() (bool, error) { + return _BatchAuthenticator.Contract.ActiveIsEspresso(&_BatchAuthenticator.CallOpts) } -// GUARDIANROLE is a free data retrieval call binding the contract method 0x24ea54f4. +// ActiveIsEspresso is a free data retrieval call binding the contract method 0xeca919df. // -// Solidity: function GUARDIAN_ROLE() view returns(bytes32) -func (_BatchAuthenticator *BatchAuthenticatorCallerSession) GUARDIANROLE() ([32]byte, error) { - return _BatchAuthenticator.Contract.GUARDIANROLE(&_BatchAuthenticator.CallOpts) +// Solidity: function activeIsEspresso() view returns(bool) +func (_BatchAuthenticator *BatchAuthenticatorCallerSession) ActiveIsEspresso() (bool, error) { + return _BatchAuthenticator.Contract.ActiveIsEspresso(&_BatchAuthenticator.CallOpts) } -// ActiveIsTee is a free data retrieval call binding the contract method 0x7877a9ed. +// EspressoBatcher is a free data retrieval call binding the contract method 0x88da3bb7. // -// Solidity: function activeIsTee() view returns(bool) -func (_BatchAuthenticator *BatchAuthenticatorCaller) ActiveIsTee(opts *bind.CallOpts) (bool, error) { +// Solidity: function espressoBatcher() view returns(address) +func (_BatchAuthenticator *BatchAuthenticatorCaller) EspressoBatcher(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _BatchAuthenticator.contract.Call(opts, &out, "activeIsTee") + err := _BatchAuthenticator.contract.Call(opts, &out, "espressoBatcher") if err != nil { - return *new(bool), err + return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) return out0, err } -// ActiveIsTee is a free data retrieval call binding the contract method 0x7877a9ed. +// EspressoBatcher is a free data retrieval call binding the contract method 0x88da3bb7. // -// Solidity: function activeIsTee() view returns(bool) -func (_BatchAuthenticator *BatchAuthenticatorSession) ActiveIsTee() (bool, error) { - return _BatchAuthenticator.Contract.ActiveIsTee(&_BatchAuthenticator.CallOpts) +// Solidity: function espressoBatcher() view returns(address) +func (_BatchAuthenticator *BatchAuthenticatorSession) EspressoBatcher() (common.Address, error) { + return _BatchAuthenticator.Contract.EspressoBatcher(&_BatchAuthenticator.CallOpts) } -// ActiveIsTee is a free data retrieval call binding the contract method 0x7877a9ed. +// EspressoBatcher is a free data retrieval call binding the contract method 0x88da3bb7. // -// Solidity: function activeIsTee() view returns(bool) -func (_BatchAuthenticator *BatchAuthenticatorCallerSession) ActiveIsTee() (bool, error) { - return _BatchAuthenticator.Contract.ActiveIsTee(&_BatchAuthenticator.CallOpts) +// Solidity: function espressoBatcher() view returns(address) +func (_BatchAuthenticator *BatchAuthenticatorCallerSession) EspressoBatcher() (common.Address, error) { + return _BatchAuthenticator.Contract.EspressoBatcher(&_BatchAuthenticator.CallOpts) } // EspressoTEEVerifier is a free data retrieval call binding the contract method 0xfa14fe6d. @@ -357,130 +326,6 @@ func (_BatchAuthenticator *BatchAuthenticatorCallerSession) GetGuardians() ([]co return _BatchAuthenticator.Contract.GetGuardians(&_BatchAuthenticator.CallOpts) } -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_BatchAuthenticator *BatchAuthenticatorCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { - var out []interface{} - err := _BatchAuthenticator.contract.Call(opts, &out, "getRoleAdmin", role) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_BatchAuthenticator *BatchAuthenticatorSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { - return _BatchAuthenticator.Contract.GetRoleAdmin(&_BatchAuthenticator.CallOpts, role) -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_BatchAuthenticator *BatchAuthenticatorCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { - return _BatchAuthenticator.Contract.GetRoleAdmin(&_BatchAuthenticator.CallOpts, role) -} - -// GetRoleMember is a free data retrieval call binding the contract method 0x9010d07c. -// -// Solidity: function getRoleMember(bytes32 role, uint256 index) view returns(address) -func (_BatchAuthenticator *BatchAuthenticatorCaller) GetRoleMember(opts *bind.CallOpts, role [32]byte, index *big.Int) (common.Address, error) { - var out []interface{} - err := _BatchAuthenticator.contract.Call(opts, &out, "getRoleMember", role, index) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetRoleMember is a free data retrieval call binding the contract method 0x9010d07c. -// -// Solidity: function getRoleMember(bytes32 role, uint256 index) view returns(address) -func (_BatchAuthenticator *BatchAuthenticatorSession) GetRoleMember(role [32]byte, index *big.Int) (common.Address, error) { - return _BatchAuthenticator.Contract.GetRoleMember(&_BatchAuthenticator.CallOpts, role, index) -} - -// GetRoleMember is a free data retrieval call binding the contract method 0x9010d07c. -// -// Solidity: function getRoleMember(bytes32 role, uint256 index) view returns(address) -func (_BatchAuthenticator *BatchAuthenticatorCallerSession) GetRoleMember(role [32]byte, index *big.Int) (common.Address, error) { - return _BatchAuthenticator.Contract.GetRoleMember(&_BatchAuthenticator.CallOpts, role, index) -} - -// GetRoleMemberCount is a free data retrieval call binding the contract method 0xca15c873. -// -// Solidity: function getRoleMemberCount(bytes32 role) view returns(uint256) -func (_BatchAuthenticator *BatchAuthenticatorCaller) GetRoleMemberCount(opts *bind.CallOpts, role [32]byte) (*big.Int, error) { - var out []interface{} - err := _BatchAuthenticator.contract.Call(opts, &out, "getRoleMemberCount", role) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetRoleMemberCount is a free data retrieval call binding the contract method 0xca15c873. -// -// Solidity: function getRoleMemberCount(bytes32 role) view returns(uint256) -func (_BatchAuthenticator *BatchAuthenticatorSession) GetRoleMemberCount(role [32]byte) (*big.Int, error) { - return _BatchAuthenticator.Contract.GetRoleMemberCount(&_BatchAuthenticator.CallOpts, role) -} - -// GetRoleMemberCount is a free data retrieval call binding the contract method 0xca15c873. -// -// Solidity: function getRoleMemberCount(bytes32 role) view returns(uint256) -func (_BatchAuthenticator *BatchAuthenticatorCallerSession) GetRoleMemberCount(role [32]byte) (*big.Int, error) { - return _BatchAuthenticator.Contract.GetRoleMemberCount(&_BatchAuthenticator.CallOpts, role) -} - -// GetRoleMembers is a free data retrieval call binding the contract method 0xa3246ad3. -// -// Solidity: function getRoleMembers(bytes32 role) view returns(address[]) -func (_BatchAuthenticator *BatchAuthenticatorCaller) GetRoleMembers(opts *bind.CallOpts, role [32]byte) ([]common.Address, error) { - var out []interface{} - err := _BatchAuthenticator.contract.Call(opts, &out, "getRoleMembers", role) - - if err != nil { - return *new([]common.Address), err - } - - out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) - - return out0, err - -} - -// GetRoleMembers is a free data retrieval call binding the contract method 0xa3246ad3. -// -// Solidity: function getRoleMembers(bytes32 role) view returns(address[]) -func (_BatchAuthenticator *BatchAuthenticatorSession) GetRoleMembers(role [32]byte) ([]common.Address, error) { - return _BatchAuthenticator.Contract.GetRoleMembers(&_BatchAuthenticator.CallOpts, role) -} - -// GetRoleMembers is a free data retrieval call binding the contract method 0xa3246ad3. -// -// Solidity: function getRoleMembers(bytes32 role) view returns(address[]) -func (_BatchAuthenticator *BatchAuthenticatorCallerSession) GetRoleMembers(role [32]byte) ([]common.Address, error) { - return _BatchAuthenticator.Contract.GetRoleMembers(&_BatchAuthenticator.CallOpts, role) -} - // GuardianCount is a free data retrieval call binding the contract method 0x54387ad7. // // Solidity: function guardianCount() view returns(uint256) @@ -512,37 +357,6 @@ func (_BatchAuthenticator *BatchAuthenticatorCallerSession) GuardianCount() (*bi return _BatchAuthenticator.Contract.GuardianCount(&_BatchAuthenticator.CallOpts) } -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_BatchAuthenticator *BatchAuthenticatorCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { - var out []interface{} - err := _BatchAuthenticator.contract.Call(opts, &out, "hasRole", role, account) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_BatchAuthenticator *BatchAuthenticatorSession) HasRole(role [32]byte, account common.Address) (bool, error) { - return _BatchAuthenticator.Contract.HasRole(&_BatchAuthenticator.CallOpts, role, account) -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_BatchAuthenticator *BatchAuthenticatorCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { - return _BatchAuthenticator.Contract.HasRole(&_BatchAuthenticator.CallOpts, role, account) -} - // InitVersion is a free data retrieval call binding the contract method 0x38d38c97. // // Solidity: function initVersion() view returns(uint8) @@ -791,37 +605,6 @@ func (_BatchAuthenticator *BatchAuthenticatorCallerSession) ProxyAdminOwner() (c return _BatchAuthenticator.Contract.ProxyAdminOwner(&_BatchAuthenticator.CallOpts) } -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_BatchAuthenticator *BatchAuthenticatorCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { - var out []interface{} - err := _BatchAuthenticator.contract.Call(opts, &out, "supportsInterface", interfaceId) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_BatchAuthenticator *BatchAuthenticatorSession) SupportsInterface(interfaceId [4]byte) (bool, error) { - return _BatchAuthenticator.Contract.SupportsInterface(&_BatchAuthenticator.CallOpts, interfaceId) -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_BatchAuthenticator *BatchAuthenticatorCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { - return _BatchAuthenticator.Contract.SupportsInterface(&_BatchAuthenticator.CallOpts, interfaceId) -} - // SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. // // Solidity: function systemConfig() view returns(address) @@ -853,37 +636,6 @@ func (_BatchAuthenticator *BatchAuthenticatorCallerSession) SystemConfig() (comm return _BatchAuthenticator.Contract.SystemConfig(&_BatchAuthenticator.CallOpts) } -// TeeBatcher is a free data retrieval call binding the contract method 0xd909ba7c. -// -// Solidity: function teeBatcher() view returns(address) -func (_BatchAuthenticator *BatchAuthenticatorCaller) TeeBatcher(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _BatchAuthenticator.contract.Call(opts, &out, "teeBatcher") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// TeeBatcher is a free data retrieval call binding the contract method 0xd909ba7c. -// -// Solidity: function teeBatcher() view returns(address) -func (_BatchAuthenticator *BatchAuthenticatorSession) TeeBatcher() (common.Address, error) { - return _BatchAuthenticator.Contract.TeeBatcher(&_BatchAuthenticator.CallOpts) -} - -// TeeBatcher is a free data retrieval call binding the contract method 0xd909ba7c. -// -// Solidity: function teeBatcher() view returns(address) -func (_BatchAuthenticator *BatchAuthenticatorCallerSession) TeeBatcher() (common.Address, error) { - return _BatchAuthenticator.Contract.TeeBatcher(&_BatchAuthenticator.CallOpts) -} - // Version is a free data retrieval call binding the contract method 0x54fd4d50. // // Solidity: function version() view returns(string) @@ -978,67 +730,46 @@ func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) AuthenticateBatc return _BatchAuthenticator.Contract.AuthenticateBatchInfo(&_BatchAuthenticator.TransactOpts, commitment, _signature) } -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_BatchAuthenticator *BatchAuthenticatorTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _BatchAuthenticator.contract.Transact(opts, "grantRole", role, account) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_BatchAuthenticator *BatchAuthenticatorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _BatchAuthenticator.Contract.GrantRole(&_BatchAuthenticator.TransactOpts, role, account) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _BatchAuthenticator.Contract.GrantRole(&_BatchAuthenticator.TransactOpts, role, account) -} - // Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. // -// Solidity: function initialize(address _espressoTEEVerifier, address _teeBatcher, address _systemConfig, address _owner) returns() -func (_BatchAuthenticator *BatchAuthenticatorTransactor) Initialize(opts *bind.TransactOpts, _espressoTEEVerifier common.Address, _teeBatcher common.Address, _systemConfig common.Address, _owner common.Address) (*types.Transaction, error) { - return _BatchAuthenticator.contract.Transact(opts, "initialize", _espressoTEEVerifier, _teeBatcher, _systemConfig, _owner) +// Solidity: function initialize(address _espressoTEEVerifier, address _espressoBatcher, address _systemConfig, address _owner) returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactor) Initialize(opts *bind.TransactOpts, _espressoTEEVerifier common.Address, _espressoBatcher common.Address, _systemConfig common.Address, _owner common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.contract.Transact(opts, "initialize", _espressoTEEVerifier, _espressoBatcher, _systemConfig, _owner) } // Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. // -// Solidity: function initialize(address _espressoTEEVerifier, address _teeBatcher, address _systemConfig, address _owner) returns() -func (_BatchAuthenticator *BatchAuthenticatorSession) Initialize(_espressoTEEVerifier common.Address, _teeBatcher common.Address, _systemConfig common.Address, _owner common.Address) (*types.Transaction, error) { - return _BatchAuthenticator.Contract.Initialize(&_BatchAuthenticator.TransactOpts, _espressoTEEVerifier, _teeBatcher, _systemConfig, _owner) +// Solidity: function initialize(address _espressoTEEVerifier, address _espressoBatcher, address _systemConfig, address _owner) returns() +func (_BatchAuthenticator *BatchAuthenticatorSession) Initialize(_espressoTEEVerifier common.Address, _espressoBatcher common.Address, _systemConfig common.Address, _owner common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.Contract.Initialize(&_BatchAuthenticator.TransactOpts, _espressoTEEVerifier, _espressoBatcher, _systemConfig, _owner) } // Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. // -// Solidity: function initialize(address _espressoTEEVerifier, address _teeBatcher, address _systemConfig, address _owner) returns() -func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) Initialize(_espressoTEEVerifier common.Address, _teeBatcher common.Address, _systemConfig common.Address, _owner common.Address) (*types.Transaction, error) { - return _BatchAuthenticator.Contract.Initialize(&_BatchAuthenticator.TransactOpts, _espressoTEEVerifier, _teeBatcher, _systemConfig, _owner) +// Solidity: function initialize(address _espressoTEEVerifier, address _espressoBatcher, address _systemConfig, address _owner) returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) Initialize(_espressoTEEVerifier common.Address, _espressoBatcher common.Address, _systemConfig common.Address, _owner common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.Contract.Initialize(&_BatchAuthenticator.TransactOpts, _espressoTEEVerifier, _espressoBatcher, _systemConfig, _owner) } // RegisterSigner is a paid mutator transaction binding the contract method 0xba58e82a. // -// Solidity: function registerSigner(bytes attestationTbs, bytes signature) returns() -func (_BatchAuthenticator *BatchAuthenticatorTransactor) RegisterSigner(opts *bind.TransactOpts, attestationTbs []byte, signature []byte) (*types.Transaction, error) { - return _BatchAuthenticator.contract.Transact(opts, "registerSigner", attestationTbs, signature) +// Solidity: function registerSigner(bytes verificationData, bytes data) returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactor) RegisterSigner(opts *bind.TransactOpts, verificationData []byte, data []byte) (*types.Transaction, error) { + return _BatchAuthenticator.contract.Transact(opts, "registerSigner", verificationData, data) } // RegisterSigner is a paid mutator transaction binding the contract method 0xba58e82a. // -// Solidity: function registerSigner(bytes attestationTbs, bytes signature) returns() -func (_BatchAuthenticator *BatchAuthenticatorSession) RegisterSigner(attestationTbs []byte, signature []byte) (*types.Transaction, error) { - return _BatchAuthenticator.Contract.RegisterSigner(&_BatchAuthenticator.TransactOpts, attestationTbs, signature) +// Solidity: function registerSigner(bytes verificationData, bytes data) returns() +func (_BatchAuthenticator *BatchAuthenticatorSession) RegisterSigner(verificationData []byte, data []byte) (*types.Transaction, error) { + return _BatchAuthenticator.Contract.RegisterSigner(&_BatchAuthenticator.TransactOpts, verificationData, data) } // RegisterSigner is a paid mutator transaction binding the contract method 0xba58e82a. // -// Solidity: function registerSigner(bytes attestationTbs, bytes signature) returns() -func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) RegisterSigner(attestationTbs []byte, signature []byte) (*types.Transaction, error) { - return _BatchAuthenticator.Contract.RegisterSigner(&_BatchAuthenticator.TransactOpts, attestationTbs, signature) +// Solidity: function registerSigner(bytes verificationData, bytes data) returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) RegisterSigner(verificationData []byte, data []byte) (*types.Transaction, error) { + return _BatchAuthenticator.Contract.RegisterSigner(&_BatchAuthenticator.TransactOpts, verificationData, data) } // RemoveGuardian is a paid mutator transaction binding the contract method 0x71404156. @@ -1083,67 +814,25 @@ func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) RenounceOwnershi return _BatchAuthenticator.Contract.RenounceOwnership(&_BatchAuthenticator.TransactOpts) } -// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. -// -// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() -func (_BatchAuthenticator *BatchAuthenticatorTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { - return _BatchAuthenticator.contract.Transact(opts, "renounceRole", role, callerConfirmation) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. -// -// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() -func (_BatchAuthenticator *BatchAuthenticatorSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { - return _BatchAuthenticator.Contract.RenounceRole(&_BatchAuthenticator.TransactOpts, role, callerConfirmation) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. -// -// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() -func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { - return _BatchAuthenticator.Contract.RenounceRole(&_BatchAuthenticator.TransactOpts, role, callerConfirmation) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_BatchAuthenticator *BatchAuthenticatorTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _BatchAuthenticator.contract.Transact(opts, "revokeRole", role, account) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_BatchAuthenticator *BatchAuthenticatorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _BatchAuthenticator.Contract.RevokeRole(&_BatchAuthenticator.TransactOpts, role, account) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _BatchAuthenticator.Contract.RevokeRole(&_BatchAuthenticator.TransactOpts, role, account) -} - -// SetTeeBatcher is a paid mutator transaction binding the contract method 0x6f7eda47. +// SetEspressoBatcher is a paid mutator transaction binding the contract method 0x2ce53247. // -// Solidity: function setTeeBatcher(address _newTeeBatcher) returns() -func (_BatchAuthenticator *BatchAuthenticatorTransactor) SetTeeBatcher(opts *bind.TransactOpts, _newTeeBatcher common.Address) (*types.Transaction, error) { - return _BatchAuthenticator.contract.Transact(opts, "setTeeBatcher", _newTeeBatcher) +// Solidity: function setEspressoBatcher(address _newEspressoBatcher) returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactor) SetEspressoBatcher(opts *bind.TransactOpts, _newEspressoBatcher common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.contract.Transact(opts, "setEspressoBatcher", _newEspressoBatcher) } -// SetTeeBatcher is a paid mutator transaction binding the contract method 0x6f7eda47. +// SetEspressoBatcher is a paid mutator transaction binding the contract method 0x2ce53247. // -// Solidity: function setTeeBatcher(address _newTeeBatcher) returns() -func (_BatchAuthenticator *BatchAuthenticatorSession) SetTeeBatcher(_newTeeBatcher common.Address) (*types.Transaction, error) { - return _BatchAuthenticator.Contract.SetTeeBatcher(&_BatchAuthenticator.TransactOpts, _newTeeBatcher) +// Solidity: function setEspressoBatcher(address _newEspressoBatcher) returns() +func (_BatchAuthenticator *BatchAuthenticatorSession) SetEspressoBatcher(_newEspressoBatcher common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.Contract.SetEspressoBatcher(&_BatchAuthenticator.TransactOpts, _newEspressoBatcher) } -// SetTeeBatcher is a paid mutator transaction binding the contract method 0x6f7eda47. +// SetEspressoBatcher is a paid mutator transaction binding the contract method 0x2ce53247. // -// Solidity: function setTeeBatcher(address _newTeeBatcher) returns() -func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) SetTeeBatcher(_newTeeBatcher common.Address) (*types.Transaction, error) { - return _BatchAuthenticator.Contract.SetTeeBatcher(&_BatchAuthenticator.TransactOpts, _newTeeBatcher) +// Solidity: function setEspressoBatcher(address _newEspressoBatcher) returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) SetEspressoBatcher(_newEspressoBatcher common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.Contract.SetEspressoBatcher(&_BatchAuthenticator.TransactOpts, _newEspressoBatcher) } // SwitchBatcher is a paid mutator transaction binding the contract method 0xbc347f47. @@ -1401,21 +1090,21 @@ func (it *BatchAuthenticatorBatcherSwitchedIterator) Close() error { // BatchAuthenticatorBatcherSwitched represents a BatcherSwitched event raised by the BatchAuthenticator contract. type BatchAuthenticatorBatcherSwitched struct { - ActiveIsTee bool - Raw types.Log // Blockchain specific contextual infos + ActiveIsEspresso bool + Raw types.Log // Blockchain specific contextual infos } // FilterBatcherSwitched is a free log retrieval operation binding the contract event 0xb957d7fc29e5974594db2f2e132076d52f42c0734eae05fd5ea080d1ba175ad3. // -// Solidity: event BatcherSwitched(bool indexed activeIsTee) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterBatcherSwitched(opts *bind.FilterOpts, activeIsTee []bool) (*BatchAuthenticatorBatcherSwitchedIterator, error) { +// Solidity: event BatcherSwitched(bool indexed activeIsEspresso) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterBatcherSwitched(opts *bind.FilterOpts, activeIsEspresso []bool) (*BatchAuthenticatorBatcherSwitchedIterator, error) { - var activeIsTeeRule []interface{} - for _, activeIsTeeItem := range activeIsTee { - activeIsTeeRule = append(activeIsTeeRule, activeIsTeeItem) + var activeIsEspressoRule []interface{} + for _, activeIsEspressoItem := range activeIsEspresso { + activeIsEspressoRule = append(activeIsEspressoRule, activeIsEspressoItem) } - logs, sub, err := _BatchAuthenticator.contract.FilterLogs(opts, "BatcherSwitched", activeIsTeeRule) + logs, sub, err := _BatchAuthenticator.contract.FilterLogs(opts, "BatcherSwitched", activeIsEspressoRule) if err != nil { return nil, err } @@ -1424,15 +1113,15 @@ func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterBatcherSwitched(opt // WatchBatcherSwitched is a free log subscription operation binding the contract event 0xb957d7fc29e5974594db2f2e132076d52f42c0734eae05fd5ea080d1ba175ad3. // -// Solidity: event BatcherSwitched(bool indexed activeIsTee) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchBatcherSwitched(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorBatcherSwitched, activeIsTee []bool) (event.Subscription, error) { +// Solidity: event BatcherSwitched(bool indexed activeIsEspresso) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchBatcherSwitched(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorBatcherSwitched, activeIsEspresso []bool) (event.Subscription, error) { - var activeIsTeeRule []interface{} - for _, activeIsTeeItem := range activeIsTee { - activeIsTeeRule = append(activeIsTeeRule, activeIsTeeItem) + var activeIsEspressoRule []interface{} + for _, activeIsEspressoItem := range activeIsEspresso { + activeIsEspressoRule = append(activeIsEspressoRule, activeIsEspressoItem) } - logs, sub, err := _BatchAuthenticator.contract.WatchLogs(opts, "BatcherSwitched", activeIsTeeRule) + logs, sub, err := _BatchAuthenticator.contract.WatchLogs(opts, "BatcherSwitched", activeIsEspressoRule) if err != nil { return nil, err } @@ -1466,7 +1155,7 @@ func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchBatcherSwitched(opts // ParseBatcherSwitched is a log parse operation binding the contract event 0xb957d7fc29e5974594db2f2e132076d52f42c0734eae05fd5ea080d1ba175ad3. // -// Solidity: event BatcherSwitched(bool indexed activeIsTee) +// Solidity: event BatcherSwitched(bool indexed activeIsEspresso) func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseBatcherSwitched(log types.Log) (*BatchAuthenticatorBatcherSwitched, error) { event := new(BatchAuthenticatorBatcherSwitched) if err := _BatchAuthenticator.contract.UnpackLog(event, "BatcherSwitched", log); err != nil { @@ -1476,9 +1165,9 @@ func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseBatcherSwitched(log return event, nil } -// BatchAuthenticatorGuardianAddedIterator is returned from FilterGuardianAdded and is used to iterate over the raw logs and unpacked data for GuardianAdded events raised by the BatchAuthenticator contract. -type BatchAuthenticatorGuardianAddedIterator struct { - Event *BatchAuthenticatorGuardianAdded // Event containing the contract specifics and raw log +// BatchAuthenticatorEspressoBatcherUpdatedIterator is returned from FilterEspressoBatcherUpdated and is used to iterate over the raw logs and unpacked data for EspressoBatcherUpdated events raised by the BatchAuthenticator contract. +type BatchAuthenticatorEspressoBatcherUpdatedIterator struct { + Event *BatchAuthenticatorEspressoBatcherUpdated // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1492,7 +1181,7 @@ type BatchAuthenticatorGuardianAddedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *BatchAuthenticatorGuardianAddedIterator) Next() bool { +func (it *BatchAuthenticatorEspressoBatcherUpdatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1501,7 +1190,7 @@ func (it *BatchAuthenticatorGuardianAddedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(BatchAuthenticatorGuardianAdded) + it.Event = new(BatchAuthenticatorEspressoBatcherUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1516,7 +1205,7 @@ func (it *BatchAuthenticatorGuardianAddedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(BatchAuthenticatorGuardianAdded) + it.Event = new(BatchAuthenticatorEspressoBatcherUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1532,51 +1221,60 @@ func (it *BatchAuthenticatorGuardianAddedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *BatchAuthenticatorGuardianAddedIterator) Error() error { +func (it *BatchAuthenticatorEspressoBatcherUpdatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *BatchAuthenticatorGuardianAddedIterator) Close() error { +func (it *BatchAuthenticatorEspressoBatcherUpdatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// BatchAuthenticatorGuardianAdded represents a GuardianAdded event raised by the BatchAuthenticator contract. -type BatchAuthenticatorGuardianAdded struct { - Guardian common.Address - Raw types.Log // Blockchain specific contextual infos +// BatchAuthenticatorEspressoBatcherUpdated represents a EspressoBatcherUpdated event raised by the BatchAuthenticator contract. +type BatchAuthenticatorEspressoBatcherUpdated struct { + OldEspressoBatcher common.Address + NewEspressoBatcher common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterGuardianAdded is a free log retrieval operation binding the contract event 0x038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969. +// FilterEspressoBatcherUpdated is a free log retrieval operation binding the contract event 0xc7bef7b97a10ef514a01fa4d5552f5c57e72a37aa901f567bb49bbf9ea449f9c. // -// Solidity: event GuardianAdded(address indexed guardian) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterGuardianAdded(opts *bind.FilterOpts, guardian []common.Address) (*BatchAuthenticatorGuardianAddedIterator, error) { +// Solidity: event EspressoBatcherUpdated(address indexed oldEspressoBatcher, address indexed newEspressoBatcher) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterEspressoBatcherUpdated(opts *bind.FilterOpts, oldEspressoBatcher []common.Address, newEspressoBatcher []common.Address) (*BatchAuthenticatorEspressoBatcherUpdatedIterator, error) { - var guardianRule []interface{} - for _, guardianItem := range guardian { - guardianRule = append(guardianRule, guardianItem) + var oldEspressoBatcherRule []interface{} + for _, oldEspressoBatcherItem := range oldEspressoBatcher { + oldEspressoBatcherRule = append(oldEspressoBatcherRule, oldEspressoBatcherItem) + } + var newEspressoBatcherRule []interface{} + for _, newEspressoBatcherItem := range newEspressoBatcher { + newEspressoBatcherRule = append(newEspressoBatcherRule, newEspressoBatcherItem) } - logs, sub, err := _BatchAuthenticator.contract.FilterLogs(opts, "GuardianAdded", guardianRule) + logs, sub, err := _BatchAuthenticator.contract.FilterLogs(opts, "EspressoBatcherUpdated", oldEspressoBatcherRule, newEspressoBatcherRule) if err != nil { return nil, err } - return &BatchAuthenticatorGuardianAddedIterator{contract: _BatchAuthenticator.contract, event: "GuardianAdded", logs: logs, sub: sub}, nil + return &BatchAuthenticatorEspressoBatcherUpdatedIterator{contract: _BatchAuthenticator.contract, event: "EspressoBatcherUpdated", logs: logs, sub: sub}, nil } -// WatchGuardianAdded is a free log subscription operation binding the contract event 0x038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969. +// WatchEspressoBatcherUpdated is a free log subscription operation binding the contract event 0xc7bef7b97a10ef514a01fa4d5552f5c57e72a37aa901f567bb49bbf9ea449f9c. // -// Solidity: event GuardianAdded(address indexed guardian) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchGuardianAdded(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorGuardianAdded, guardian []common.Address) (event.Subscription, error) { +// Solidity: event EspressoBatcherUpdated(address indexed oldEspressoBatcher, address indexed newEspressoBatcher) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchEspressoBatcherUpdated(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorEspressoBatcherUpdated, oldEspressoBatcher []common.Address, newEspressoBatcher []common.Address) (event.Subscription, error) { - var guardianRule []interface{} - for _, guardianItem := range guardian { - guardianRule = append(guardianRule, guardianItem) + var oldEspressoBatcherRule []interface{} + for _, oldEspressoBatcherItem := range oldEspressoBatcher { + oldEspressoBatcherRule = append(oldEspressoBatcherRule, oldEspressoBatcherItem) + } + var newEspressoBatcherRule []interface{} + for _, newEspressoBatcherItem := range newEspressoBatcher { + newEspressoBatcherRule = append(newEspressoBatcherRule, newEspressoBatcherItem) } - logs, sub, err := _BatchAuthenticator.contract.WatchLogs(opts, "GuardianAdded", guardianRule) + logs, sub, err := _BatchAuthenticator.contract.WatchLogs(opts, "EspressoBatcherUpdated", oldEspressoBatcherRule, newEspressoBatcherRule) if err != nil { return nil, err } @@ -1586,8 +1284,8 @@ func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchGuardianAdded(opts * select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(BatchAuthenticatorGuardianAdded) - if err := _BatchAuthenticator.contract.UnpackLog(event, "GuardianAdded", log); err != nil { + event := new(BatchAuthenticatorEspressoBatcherUpdated) + if err := _BatchAuthenticator.contract.UnpackLog(event, "EspressoBatcherUpdated", log); err != nil { return err } event.Raw = log @@ -1608,21 +1306,21 @@ func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchGuardianAdded(opts * }), nil } -// ParseGuardianAdded is a log parse operation binding the contract event 0x038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969. +// ParseEspressoBatcherUpdated is a log parse operation binding the contract event 0xc7bef7b97a10ef514a01fa4d5552f5c57e72a37aa901f567bb49bbf9ea449f9c. // -// Solidity: event GuardianAdded(address indexed guardian) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseGuardianAdded(log types.Log) (*BatchAuthenticatorGuardianAdded, error) { - event := new(BatchAuthenticatorGuardianAdded) - if err := _BatchAuthenticator.contract.UnpackLog(event, "GuardianAdded", log); err != nil { +// Solidity: event EspressoBatcherUpdated(address indexed oldEspressoBatcher, address indexed newEspressoBatcher) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseEspressoBatcherUpdated(log types.Log) (*BatchAuthenticatorEspressoBatcherUpdated, error) { + event := new(BatchAuthenticatorEspressoBatcherUpdated) + if err := _BatchAuthenticator.contract.UnpackLog(event, "EspressoBatcherUpdated", log); err != nil { return nil, err } event.Raw = log return event, nil } -// BatchAuthenticatorGuardianRemovedIterator is returned from FilterGuardianRemoved and is used to iterate over the raw logs and unpacked data for GuardianRemoved events raised by the BatchAuthenticator contract. -type BatchAuthenticatorGuardianRemovedIterator struct { - Event *BatchAuthenticatorGuardianRemoved // Event containing the contract specifics and raw log +// BatchAuthenticatorGuardianAddedIterator is returned from FilterGuardianAdded and is used to iterate over the raw logs and unpacked data for GuardianAdded events raised by the BatchAuthenticator contract. +type BatchAuthenticatorGuardianAddedIterator struct { + Event *BatchAuthenticatorGuardianAdded // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1636,7 +1334,7 @@ type BatchAuthenticatorGuardianRemovedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *BatchAuthenticatorGuardianRemovedIterator) Next() bool { +func (it *BatchAuthenticatorGuardianAddedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1645,7 +1343,7 @@ func (it *BatchAuthenticatorGuardianRemovedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(BatchAuthenticatorGuardianRemoved) + it.Event = new(BatchAuthenticatorGuardianAdded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1660,7 +1358,7 @@ func (it *BatchAuthenticatorGuardianRemovedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(BatchAuthenticatorGuardianRemoved) + it.Event = new(BatchAuthenticatorGuardianAdded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1676,51 +1374,51 @@ func (it *BatchAuthenticatorGuardianRemovedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *BatchAuthenticatorGuardianRemovedIterator) Error() error { +func (it *BatchAuthenticatorGuardianAddedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *BatchAuthenticatorGuardianRemovedIterator) Close() error { +func (it *BatchAuthenticatorGuardianAddedIterator) Close() error { it.sub.Unsubscribe() return nil } -// BatchAuthenticatorGuardianRemoved represents a GuardianRemoved event raised by the BatchAuthenticator contract. -type BatchAuthenticatorGuardianRemoved struct { +// BatchAuthenticatorGuardianAdded represents a GuardianAdded event raised by the BatchAuthenticator contract. +type BatchAuthenticatorGuardianAdded struct { Guardian common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterGuardianRemoved is a free log retrieval operation binding the contract event 0xb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c52. +// FilterGuardianAdded is a free log retrieval operation binding the contract event 0x038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969. // -// Solidity: event GuardianRemoved(address indexed guardian) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterGuardianRemoved(opts *bind.FilterOpts, guardian []common.Address) (*BatchAuthenticatorGuardianRemovedIterator, error) { +// Solidity: event GuardianAdded(address indexed guardian) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterGuardianAdded(opts *bind.FilterOpts, guardian []common.Address) (*BatchAuthenticatorGuardianAddedIterator, error) { var guardianRule []interface{} for _, guardianItem := range guardian { guardianRule = append(guardianRule, guardianItem) } - logs, sub, err := _BatchAuthenticator.contract.FilterLogs(opts, "GuardianRemoved", guardianRule) + logs, sub, err := _BatchAuthenticator.contract.FilterLogs(opts, "GuardianAdded", guardianRule) if err != nil { return nil, err } - return &BatchAuthenticatorGuardianRemovedIterator{contract: _BatchAuthenticator.contract, event: "GuardianRemoved", logs: logs, sub: sub}, nil + return &BatchAuthenticatorGuardianAddedIterator{contract: _BatchAuthenticator.contract, event: "GuardianAdded", logs: logs, sub: sub}, nil } -// WatchGuardianRemoved is a free log subscription operation binding the contract event 0xb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c52. +// WatchGuardianAdded is a free log subscription operation binding the contract event 0x038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969. // -// Solidity: event GuardianRemoved(address indexed guardian) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchGuardianRemoved(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorGuardianRemoved, guardian []common.Address) (event.Subscription, error) { +// Solidity: event GuardianAdded(address indexed guardian) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchGuardianAdded(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorGuardianAdded, guardian []common.Address) (event.Subscription, error) { var guardianRule []interface{} for _, guardianItem := range guardian { guardianRule = append(guardianRule, guardianItem) } - logs, sub, err := _BatchAuthenticator.contract.WatchLogs(opts, "GuardianRemoved", guardianRule) + logs, sub, err := _BatchAuthenticator.contract.WatchLogs(opts, "GuardianAdded", guardianRule) if err != nil { return nil, err } @@ -1730,7 +1428,151 @@ func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchGuardianRemoved(opts select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(BatchAuthenticatorGuardianRemoved) + event := new(BatchAuthenticatorGuardianAdded) + if err := _BatchAuthenticator.contract.UnpackLog(event, "GuardianAdded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseGuardianAdded is a log parse operation binding the contract event 0x038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969. +// +// Solidity: event GuardianAdded(address indexed guardian) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseGuardianAdded(log types.Log) (*BatchAuthenticatorGuardianAdded, error) { + event := new(BatchAuthenticatorGuardianAdded) + if err := _BatchAuthenticator.contract.UnpackLog(event, "GuardianAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BatchAuthenticatorGuardianRemovedIterator is returned from FilterGuardianRemoved and is used to iterate over the raw logs and unpacked data for GuardianRemoved events raised by the BatchAuthenticator contract. +type BatchAuthenticatorGuardianRemovedIterator struct { + Event *BatchAuthenticatorGuardianRemoved // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BatchAuthenticatorGuardianRemovedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BatchAuthenticatorGuardianRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BatchAuthenticatorGuardianRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BatchAuthenticatorGuardianRemovedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BatchAuthenticatorGuardianRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BatchAuthenticatorGuardianRemoved represents a GuardianRemoved event raised by the BatchAuthenticator contract. +type BatchAuthenticatorGuardianRemoved struct { + Guardian common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterGuardianRemoved is a free log retrieval operation binding the contract event 0xb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c52. +// +// Solidity: event GuardianRemoved(address indexed guardian) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterGuardianRemoved(opts *bind.FilterOpts, guardian []common.Address) (*BatchAuthenticatorGuardianRemovedIterator, error) { + + var guardianRule []interface{} + for _, guardianItem := range guardian { + guardianRule = append(guardianRule, guardianItem) + } + + logs, sub, err := _BatchAuthenticator.contract.FilterLogs(opts, "GuardianRemoved", guardianRule) + if err != nil { + return nil, err + } + return &BatchAuthenticatorGuardianRemovedIterator{contract: _BatchAuthenticator.contract, event: "GuardianRemoved", logs: logs, sub: sub}, nil +} + +// WatchGuardianRemoved is a free log subscription operation binding the contract event 0xb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c52. +// +// Solidity: event GuardianRemoved(address indexed guardian) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchGuardianRemoved(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorGuardianRemoved, guardian []common.Address) (event.Subscription, error) { + + var guardianRule []interface{} + for _, guardianItem := range guardian { + guardianRule = append(guardianRule, guardianItem) + } + + logs, sub, err := _BatchAuthenticator.contract.WatchLogs(opts, "GuardianRemoved", guardianRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BatchAuthenticatorGuardianRemoved) if err := _BatchAuthenticator.contract.UnpackLog(event, "GuardianRemoved", log); err != nil { return err } @@ -2204,9 +2046,9 @@ func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseOwnershipTransferred return event, nil } -// BatchAuthenticatorRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the BatchAuthenticator contract. -type BatchAuthenticatorRoleAdminChangedIterator struct { - Event *BatchAuthenticatorRoleAdminChanged // Event containing the contract specifics and raw log +// BatchAuthenticatorSignerRegistrationInitiatedIterator is returned from FilterSignerRegistrationInitiated and is used to iterate over the raw logs and unpacked data for SignerRegistrationInitiated events raised by the BatchAuthenticator contract. +type BatchAuthenticatorSignerRegistrationInitiatedIterator struct { + Event *BatchAuthenticatorSignerRegistrationInitiated // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2220,7 +2062,7 @@ type BatchAuthenticatorRoleAdminChangedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *BatchAuthenticatorRoleAdminChangedIterator) Next() bool { +func (it *BatchAuthenticatorSignerRegistrationInitiatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2229,7 +2071,7 @@ func (it *BatchAuthenticatorRoleAdminChangedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(BatchAuthenticatorRoleAdminChanged) + it.Event = new(BatchAuthenticatorSignerRegistrationInitiated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2244,7 +2086,7 @@ func (it *BatchAuthenticatorRoleAdminChangedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(BatchAuthenticatorRoleAdminChanged) + it.Event = new(BatchAuthenticatorSignerRegistrationInitiated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2260,69 +2102,51 @@ func (it *BatchAuthenticatorRoleAdminChangedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *BatchAuthenticatorRoleAdminChangedIterator) Error() error { +func (it *BatchAuthenticatorSignerRegistrationInitiatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *BatchAuthenticatorRoleAdminChangedIterator) Close() error { +func (it *BatchAuthenticatorSignerRegistrationInitiatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// BatchAuthenticatorRoleAdminChanged represents a RoleAdminChanged event raised by the BatchAuthenticator contract. -type BatchAuthenticatorRoleAdminChanged struct { - Role [32]byte - PreviousAdminRole [32]byte - NewAdminRole [32]byte - Raw types.Log // Blockchain specific contextual infos +// BatchAuthenticatorSignerRegistrationInitiated represents a SignerRegistrationInitiated event raised by the BatchAuthenticator contract. +type BatchAuthenticatorSignerRegistrationInitiated struct { + Caller common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// FilterSignerRegistrationInitiated is a free log retrieval operation binding the contract event 0x665b016a0ac50d1280744eaaff1cf21254d0fd30e4c3987d291913c32163416c. // -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*BatchAuthenticatorRoleAdminChangedIterator, error) { +// Solidity: event SignerRegistrationInitiated(address indexed caller) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterSignerRegistrationInitiated(opts *bind.FilterOpts, caller []common.Address) (*BatchAuthenticatorSignerRegistrationInitiatedIterator, error) { - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var previousAdminRoleRule []interface{} - for _, previousAdminRoleItem := range previousAdminRole { - previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) - } - var newAdminRoleRule []interface{} - for _, newAdminRoleItem := range newAdminRole { - newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + var callerRule []interface{} + for _, callerItem := range caller { + callerRule = append(callerRule, callerItem) } - logs, sub, err := _BatchAuthenticator.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + logs, sub, err := _BatchAuthenticator.contract.FilterLogs(opts, "SignerRegistrationInitiated", callerRule) if err != nil { return nil, err } - return &BatchAuthenticatorRoleAdminChangedIterator{contract: _BatchAuthenticator.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil + return &BatchAuthenticatorSignerRegistrationInitiatedIterator{contract: _BatchAuthenticator.contract, event: "SignerRegistrationInitiated", logs: logs, sub: sub}, nil } -// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// WatchSignerRegistrationInitiated is a free log subscription operation binding the contract event 0x665b016a0ac50d1280744eaaff1cf21254d0fd30e4c3987d291913c32163416c. // -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { +// Solidity: event SignerRegistrationInitiated(address indexed caller) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchSignerRegistrationInitiated(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorSignerRegistrationInitiated, caller []common.Address) (event.Subscription, error) { - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var previousAdminRoleRule []interface{} - for _, previousAdminRoleItem := range previousAdminRole { - previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) - } - var newAdminRoleRule []interface{} - for _, newAdminRoleItem := range newAdminRole { - newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + var callerRule []interface{} + for _, callerItem := range caller { + callerRule = append(callerRule, callerItem) } - logs, sub, err := _BatchAuthenticator.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + logs, sub, err := _BatchAuthenticator.contract.WatchLogs(opts, "SignerRegistrationInitiated", callerRule) if err != nil { return nil, err } @@ -2332,8 +2156,8 @@ func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchRoleAdminChanged(opt select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(BatchAuthenticatorRoleAdminChanged) - if err := _BatchAuthenticator.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + event := new(BatchAuthenticatorSignerRegistrationInitiated) + if err := _BatchAuthenticator.contract.UnpackLog(event, "SignerRegistrationInitiated", log); err != nil { return err } event.Raw = log @@ -2354,475 +2178,7 @@ func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchRoleAdminChanged(opt }), nil } -// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. -// -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseRoleAdminChanged(log types.Log) (*BatchAuthenticatorRoleAdminChanged, error) { - event := new(BatchAuthenticatorRoleAdminChanged) - if err := _BatchAuthenticator.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// BatchAuthenticatorRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the BatchAuthenticator contract. -type BatchAuthenticatorRoleGrantedIterator struct { - Event *BatchAuthenticatorRoleGranted // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BatchAuthenticatorRoleGrantedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BatchAuthenticatorRoleGranted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BatchAuthenticatorRoleGranted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BatchAuthenticatorRoleGrantedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BatchAuthenticatorRoleGrantedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BatchAuthenticatorRoleGranted represents a RoleGranted event raised by the BatchAuthenticator contract. -type BatchAuthenticatorRoleGranted struct { - Role [32]byte - Account common.Address - Sender common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*BatchAuthenticatorRoleGrantedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _BatchAuthenticator.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) - if err != nil { - return nil, err - } - return &BatchAuthenticatorRoleGrantedIterator{contract: _BatchAuthenticator.contract, event: "RoleGranted", logs: logs, sub: sub}, nil -} - -// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _BatchAuthenticator.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BatchAuthenticatorRoleGranted) - if err := _BatchAuthenticator.contract.UnpackLog(event, "RoleGranted", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseRoleGranted(log types.Log) (*BatchAuthenticatorRoleGranted, error) { - event := new(BatchAuthenticatorRoleGranted) - if err := _BatchAuthenticator.contract.UnpackLog(event, "RoleGranted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// BatchAuthenticatorRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the BatchAuthenticator contract. -type BatchAuthenticatorRoleRevokedIterator struct { - Event *BatchAuthenticatorRoleRevoked // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BatchAuthenticatorRoleRevokedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BatchAuthenticatorRoleRevoked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BatchAuthenticatorRoleRevoked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BatchAuthenticatorRoleRevokedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BatchAuthenticatorRoleRevokedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BatchAuthenticatorRoleRevoked represents a RoleRevoked event raised by the BatchAuthenticator contract. -type BatchAuthenticatorRoleRevoked struct { - Role [32]byte - Account common.Address - Sender common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*BatchAuthenticatorRoleRevokedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _BatchAuthenticator.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) - if err != nil { - return nil, err - } - return &BatchAuthenticatorRoleRevokedIterator{contract: _BatchAuthenticator.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil -} - -// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _BatchAuthenticator.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BatchAuthenticatorRoleRevoked) - if err := _BatchAuthenticator.contract.UnpackLog(event, "RoleRevoked", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseRoleRevoked(log types.Log) (*BatchAuthenticatorRoleRevoked, error) { - event := new(BatchAuthenticatorRoleRevoked) - if err := _BatchAuthenticator.contract.UnpackLog(event, "RoleRevoked", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// BatchAuthenticatorSignerRegistrationInitiatedIterator is returned from FilterSignerRegistrationInitiated and is used to iterate over the raw logs and unpacked data for SignerRegistrationInitiated events raised by the BatchAuthenticator contract. -type BatchAuthenticatorSignerRegistrationInitiatedIterator struct { - Event *BatchAuthenticatorSignerRegistrationInitiated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BatchAuthenticatorSignerRegistrationInitiatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BatchAuthenticatorSignerRegistrationInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BatchAuthenticatorSignerRegistrationInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BatchAuthenticatorSignerRegistrationInitiatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BatchAuthenticatorSignerRegistrationInitiatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BatchAuthenticatorSignerRegistrationInitiated represents a SignerRegistrationInitiated event raised by the BatchAuthenticator contract. -type BatchAuthenticatorSignerRegistrationInitiated struct { - Caller common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSignerRegistrationInitiated is a free log retrieval operation binding the contract event 0x665b016a0ac50d1280744eaaff1cf21254d0fd30e4c3987d291913c32163416c. -// -// Solidity: event SignerRegistrationInitiated(address indexed caller) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterSignerRegistrationInitiated(opts *bind.FilterOpts, caller []common.Address) (*BatchAuthenticatorSignerRegistrationInitiatedIterator, error) { - - var callerRule []interface{} - for _, callerItem := range caller { - callerRule = append(callerRule, callerItem) - } - - logs, sub, err := _BatchAuthenticator.contract.FilterLogs(opts, "SignerRegistrationInitiated", callerRule) - if err != nil { - return nil, err - } - return &BatchAuthenticatorSignerRegistrationInitiatedIterator{contract: _BatchAuthenticator.contract, event: "SignerRegistrationInitiated", logs: logs, sub: sub}, nil -} - -// WatchSignerRegistrationInitiated is a free log subscription operation binding the contract event 0x665b016a0ac50d1280744eaaff1cf21254d0fd30e4c3987d291913c32163416c. -// -// Solidity: event SignerRegistrationInitiated(address indexed caller) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchSignerRegistrationInitiated(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorSignerRegistrationInitiated, caller []common.Address) (event.Subscription, error) { - - var callerRule []interface{} - for _, callerItem := range caller { - callerRule = append(callerRule, callerItem) - } - - logs, sub, err := _BatchAuthenticator.contract.WatchLogs(opts, "SignerRegistrationInitiated", callerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BatchAuthenticatorSignerRegistrationInitiated) - if err := _BatchAuthenticator.contract.UnpackLog(event, "SignerRegistrationInitiated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSignerRegistrationInitiated is a log parse operation binding the contract event 0x665b016a0ac50d1280744eaaff1cf21254d0fd30e4c3987d291913c32163416c. +// ParseSignerRegistrationInitiated is a log parse operation binding the contract event 0x665b016a0ac50d1280744eaaff1cf21254d0fd30e4c3987d291913c32163416c. // // Solidity: event SignerRegistrationInitiated(address indexed caller) func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseSignerRegistrationInitiated(log types.Log) (*BatchAuthenticatorSignerRegistrationInitiated, error) { @@ -2833,156 +2189,3 @@ func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseSignerRegistrationIn event.Raw = log return event, nil } - -// BatchAuthenticatorTeeBatcherUpdatedIterator is returned from FilterTeeBatcherUpdated and is used to iterate over the raw logs and unpacked data for TeeBatcherUpdated events raised by the BatchAuthenticator contract. -type BatchAuthenticatorTeeBatcherUpdatedIterator struct { - Event *BatchAuthenticatorTeeBatcherUpdated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BatchAuthenticatorTeeBatcherUpdatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BatchAuthenticatorTeeBatcherUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BatchAuthenticatorTeeBatcherUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BatchAuthenticatorTeeBatcherUpdatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BatchAuthenticatorTeeBatcherUpdatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BatchAuthenticatorTeeBatcherUpdated represents a TeeBatcherUpdated event raised by the BatchAuthenticator contract. -type BatchAuthenticatorTeeBatcherUpdated struct { - OldTeeBatcher common.Address - NewTeeBatcher common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterTeeBatcherUpdated is a free log retrieval operation binding the contract event 0x5186a10c46a3a9c7ec5470c24b80c6414eba1320cf76bf72ef5135773c7b3327. -// -// Solidity: event TeeBatcherUpdated(address indexed oldTeeBatcher, address indexed newTeeBatcher) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterTeeBatcherUpdated(opts *bind.FilterOpts, oldTeeBatcher []common.Address, newTeeBatcher []common.Address) (*BatchAuthenticatorTeeBatcherUpdatedIterator, error) { - - var oldTeeBatcherRule []interface{} - for _, oldTeeBatcherItem := range oldTeeBatcher { - oldTeeBatcherRule = append(oldTeeBatcherRule, oldTeeBatcherItem) - } - var newTeeBatcherRule []interface{} - for _, newTeeBatcherItem := range newTeeBatcher { - newTeeBatcherRule = append(newTeeBatcherRule, newTeeBatcherItem) - } - - logs, sub, err := _BatchAuthenticator.contract.FilterLogs(opts, "TeeBatcherUpdated", oldTeeBatcherRule, newTeeBatcherRule) - if err != nil { - return nil, err - } - return &BatchAuthenticatorTeeBatcherUpdatedIterator{contract: _BatchAuthenticator.contract, event: "TeeBatcherUpdated", logs: logs, sub: sub}, nil -} - -// WatchTeeBatcherUpdated is a free log subscription operation binding the contract event 0x5186a10c46a3a9c7ec5470c24b80c6414eba1320cf76bf72ef5135773c7b3327. -// -// Solidity: event TeeBatcherUpdated(address indexed oldTeeBatcher, address indexed newTeeBatcher) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchTeeBatcherUpdated(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorTeeBatcherUpdated, oldTeeBatcher []common.Address, newTeeBatcher []common.Address) (event.Subscription, error) { - - var oldTeeBatcherRule []interface{} - for _, oldTeeBatcherItem := range oldTeeBatcher { - oldTeeBatcherRule = append(oldTeeBatcherRule, oldTeeBatcherItem) - } - var newTeeBatcherRule []interface{} - for _, newTeeBatcherItem := range newTeeBatcher { - newTeeBatcherRule = append(newTeeBatcherRule, newTeeBatcherItem) - } - - logs, sub, err := _BatchAuthenticator.contract.WatchLogs(opts, "TeeBatcherUpdated", oldTeeBatcherRule, newTeeBatcherRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BatchAuthenticatorTeeBatcherUpdated) - if err := _BatchAuthenticator.contract.UnpackLog(event, "TeeBatcherUpdated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseTeeBatcherUpdated is a log parse operation binding the contract event 0x5186a10c46a3a9c7ec5470c24b80c6414eba1320cf76bf72ef5135773c7b3327. -// -// Solidity: event TeeBatcherUpdated(address indexed oldTeeBatcher, address indexed newTeeBatcher) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseTeeBatcherUpdated(log types.Log) (*BatchAuthenticatorTeeBatcherUpdated, error) { - event := new(BatchAuthenticatorTeeBatcherUpdated) - if err := _BatchAuthenticator.contract.UnpackLog(event, "TeeBatcherUpdated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/espresso/bindings/opsuccinct_fault_dispute_game.go b/espresso/bindings/opsuccinct_fault_dispute_game.go index f6cc94dedaf..2b670c338ee 100644 --- a/espresso/bindings/opsuccinct_fault_dispute_game.go +++ b/espresso/bindings/opsuccinct_fault_dispute_game.go @@ -31,8 +31,8 @@ var ( // OPSuccinctFaultDisputeGameMetaData contains all meta data concerning the OPSuccinctFaultDisputeGame contract. var OPSuccinctFaultDisputeGameMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_maxChallengeDuration\",\"type\":\"uint64\",\"internalType\":\"Duration\"},{\"name\":\"_maxProveDuration\",\"type\":\"uint64\",\"internalType\":\"Duration\"},{\"name\":\"_disputeGameFactory\",\"type\":\"address\",\"internalType\":\"contractIDisputeGameFactory\"},{\"name\":\"_sp1Verifier\",\"type\":\"address\",\"internalType\":\"contractISP1Verifier\"},{\"name\":\"_rollupConfigHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_aggregationVkey\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_rangeVkeyCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_challengerBond\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_anchorStateRegistry\",\"type\":\"address\",\"internalType\":\"contractIAnchorStateRegistry\"},{\"name\":\"_accessManager\",\"type\":\"address\",\"internalType\":\"contractAccessManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"accessManager\",\"inputs\":[],\"outputs\":[{\"name\":\"accessManager_\",\"type\":\"address\",\"internalType\":\"contractAccessManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"anchorStateRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"registry_\",\"type\":\"address\",\"internalType\":\"contractIAnchorStateRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bondDistributionMode\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumBondDistributionMode\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"challenge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumOPSuccinctFaultDisputeGame.ProposalStatus\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"challengerBond\",\"inputs\":[],\"outputs\":[{\"name\":\"challengerBond_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimCredit\",\"inputs\":[{\"name\":\"_recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"claimData\",\"inputs\":[],\"outputs\":[{\"name\":\"parentIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"counteredBy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"prover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumOPSuccinctFaultDisputeGame.ProposalStatus\"},{\"name\":\"deadline\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"closeGame\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createdAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"credit\",\"inputs\":[{\"name\":\"_recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"credit_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"disputeGameFactory_\",\"type\":\"address\",\"internalType\":\"contractIDisputeGameFactory\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"extraData\",\"inputs\":[],\"outputs\":[{\"name\":\"extraData_\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"gameCreator\",\"inputs\":[],\"outputs\":[{\"name\":\"creator_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"gameData\",\"inputs\":[],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"extraData_\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameOver\",\"inputs\":[],\"outputs\":[{\"name\":\"gameOver_\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameType\",\"inputs\":[],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint32\",\"internalType\":\"GameType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"l1Head\",\"inputs\":[],\"outputs\":[{\"name\":\"l1Head_\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"l2BlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"l2BlockNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"l2SequenceNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"l2SequenceNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"maxChallengeDuration\",\"inputs\":[],\"outputs\":[{\"name\":\"maxChallengeDuration_\",\"type\":\"uint64\",\"internalType\":\"Duration\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxProveDuration\",\"inputs\":[],\"outputs\":[{\"name\":\"maxProveDuration_\",\"type\":\"uint64\",\"internalType\":\"Duration\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"normalModeCredit\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"parentIndex\",\"inputs\":[],\"outputs\":[{\"name\":\"parentIndex_\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"prove\",\"inputs\":[{\"name\":\"proofBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumOPSuccinctFaultDisputeGame.ProposalStatus\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"refundModeCredit\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumGameStatus\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resolvedAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"rootClaim\",\"inputs\":[],\"outputs\":[{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"startingBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"startingBlockNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"startingOutputRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"Hash\"},{\"name\":\"l2BlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"startingRootHash\",\"inputs\":[],\"outputs\":[{\"name\":\"startingRootHash_\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"status\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumGameStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"wasRespectedGameTypeWhenCreated\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Challenged\",\"inputs\":[{\"name\":\"challenger\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GameClosed\",\"inputs\":[{\"name\":\"bondDistributionMode\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumBondDistributionMode\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Proved\",\"inputs\":[{\"name\":\"prover\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Resolved\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumGameStatus\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BadAuth\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BondTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAlreadyChallenged\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAlreadyResolved\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameNotFinalized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameNotOver\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameOver\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"IncorrectBondAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"IncorrectDisputeGameFactory\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidBondDistributionMode\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidParentGame\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProposalStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoCreditToClaim\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ParentGameNotResolved\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnexpectedRootClaim\",\"inputs\":[{\"name\":\"rootClaim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}]}]", - Bin: "0x6101e0604052348015610010575f5ffd5b50604051612f95380380612f9583398101604081905261002f916100b4565b602a60c0526001600160401b03998a166080529790981660a0526001600160a01b0395861660e05293851661010052610120929092526101405261016052610180529182166101a052166101c052610169565b80516001600160401b0381168114610098575f5ffd5b919050565b6001600160a01b03811681146100b1575f5ffd5b50565b5f5f5f5f5f5f5f5f5f5f6101408b8d0312156100ce575f5ffd5b6100d78b610082565b99506100e560208c01610082565b985060408b01516100f58161009d565b60608c01519098506101068161009d565b809750505f60808c01519050809650505f60a08c01519050809550505f60c08c015190508094505060e08b015192506101008b01516101448161009d565b6101208c01519092506101568161009d565b809150509295989b9194979a5092959850565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051612d2761026e5f395f818161082c0152818161177a01526123f901525f81816104e3015281816113f8015281816114dd0152818161157501528181611a1001528181611ac901528181611b7d01528181611e29015261228201525f818161058901528181610c5701526124ee01525f610ee901525f610f6701525f610ec301525f610f2b01525f81816107d7015281816116f6015281816118f601526127b801525f818161067d01528181611e020152818161225a015261270601525f81816106af01526125af01525f818161077e0152611fe10152612d275ff3fe608060405260043610610229575f3560e01c806370872aa511610131578063bdb337d1116100ac578063d2ef73981161007c578063f2b4e61711610062578063f2b4e617146107c9578063fa24f743146107fb578063fdcb60681461081e575f5ffd5b8063d2ef7398146107a2578063d5d44d80146107aa575f5ffd5b8063bdb337d114610712578063c0d8bb7414610726578063cf09e0d014610751578063d2177bdd14610770575f5ffd5b80638b85902b11610101578063bbdc02db116100e7578063bbdc02db1461066f578063bcbe5094146106a1578063bcef3b55146106d3575f5ffd5b80638b85902b1461063057806399735e3214610630575f5ffd5b806370872aa5146105ad578063786b844b146105c15780637948690a146105d55780638129fc1c14610628575f5ffd5b80633ec4d4d6116101c15780635c0cba331161019157806360e274641161017757806360e274641461051b5780636361506d1461053c57806368ccdc861461057b575f5ffd5b80635c0cba33146104d5578063609d333414610507575f5ffd5b80633ec4d4d6146103b4578063529d6a8c1461042657806354fd4d501461045157806357da950e146104a6575f5ffd5b80632810e1d6116101fc5780632810e1d6146102f6578063375bfa5d1461030a578063378dd48c1461033657806337b1b22914610354575f5ffd5b806319effeb41461022d578063200d2ed214610276578063250e69bd146102af57806325fc2ace146102d8575b5f5ffd5b348015610238575f5ffd5b505f546102589068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b348015610281575f5ffd5b505f546102a290700100000000000000000000000000000000900460ff1681565b60405161026d9190612998565b3480156102ba575f5ffd5b506009546102c89060ff1681565b604051901515815260200161026d565b3480156102e3575f5ffd5b506007545b60405190815260200161026d565b348015610301575f5ffd5b506102a2610850565b348015610315575f5ffd5b506103296103243660046129ab565b610dc4565b60405161026d9190612a2d565b348015610341575f5ffd5b506009546102a290610100900460ff1681565b34801561035f575f5ffd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c5b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161026d565b3480156103bf575f5ffd5b506001546002546003546004546104149363ffffffff81169373ffffffffffffffffffffffffffffffffffffffff64010000000090920482169391169160ff81169067ffffffffffffffff6101009091041686565b60405161026d96959493929190612a3b565b348015610431575f5ffd5b506102e8610440366004612abc565b60056020525f908152604090205481565b34801561045c575f5ffd5b506104996040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026d9190612b2a565b3480156104b1575f5ffd5b506007546008546104c0919082565b6040805192835260208301919091520161026d565b3480156104e0575f5ffd5b507f000000000000000000000000000000000000000000000000000000000000000061038f565b348015610512575f5ffd5b50610499611154565b348015610526575f5ffd5b5061053a610535366004612abc565b611162565b005b348015610547575f5ffd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356102e8565b348015610586575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006102e8565b3480156105b8575f5ffd5b506008546102e8565b3480156105cc575f5ffd5b5061053a611328565b3480156105e0575f5ffd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036074013560e01c5b60405163ffffffff909116815260200161026d565b61053a6116a3565b34801561063b575f5ffd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356102e8565b34801561067a575f5ffd5b507f0000000000000000000000000000000000000000000000000000000000000000610613565b3480156106ac575f5ffd5b507f0000000000000000000000000000000000000000000000000000000000000000610258565b3480156106de575f5ffd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356102e8565b34801561071d575f5ffd5b506102c861233d565b348015610731575f5ffd5b506102e8610740366004612abc565b60066020525f908152604090205481565b34801561075c575f5ffd5b505f546102589067ffffffffffffffff1681565b34801561077b575f5ffd5b507f0000000000000000000000000000000000000000000000000000000000000000610258565b61032961237b565b3480156107b5575f5ffd5b506102e86107c4366004612abc565b61268c565b3480156107d4575f5ffd5b507f000000000000000000000000000000000000000000000000000000000000000061038f565b348015610806575f5ffd5b5061080f612704565b60405161026d93929190612b3c565b348015610829575f5ffd5b507f000000000000000000000000000000000000000000000000000000000000000061038f565b5f805f54700100000000000000000000000000000000900460ff16600281111561087c5761087c612958565b146108b3576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6108bc612764565b90505f8160028111156108d1576108d1612958565b03610908576040517f92c506ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600181600281111561091c5761091c612958565b03610999575f8054600191907fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff16700100000000000000000000000000000000835b0217905550600154640100000000900473ffffffffffffffffffffffffffffffffffffffff165f908152600560205260409020479055610cec565b6109a161233d565b6109d7576040517f04643c3900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6004805460ff16908111156109ef576109ef612958565b03610a94575f8054600291907fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff16700100000000000000000000000000000000835b02179055504760055f367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c5b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f2055610cec565b60016004805460ff1690811115610aad57610aad612958565b03610af3575f8054600191907fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167001000000000000000000000000000000008361095e565b60026004805460ff1690811115610b0c57610b0c612958565b03610b52575f8054600291907fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000083610a31565b60036004805460ff1690811115610b6b57610b6b612958565b03610cba575f80547fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff16700200000000000000000000000000000000179055610bdf7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033560601c90565b60025473ffffffffffffffffffffffffffffffffffffffff918216911603610c2f5760025473ffffffffffffffffffffffffffffffffffffffff165f908152600560205260409020479055610cec565b60025473ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604090207f000000000000000000000000000000000000000000000000000000000000000090819055610c849047612b96565b60055f367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610a69565b6040517f7492a26900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790555f80547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16680100000000000000004267ffffffffffffffff16021790819055700100000000000000000000000000000000900460ff166002811115610d7e57610d7e612958565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da60905f90a250505f54700100000000000000000000000000000000900460ff1690565b5f610dcd61233d565b15610e04576040517fdf469ccb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040518060e00160405280610e4560347ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b81526007546020820152604001610e89367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b8152602001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013581526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020013373ffffffffffffffffffffffffffffffffffffffff1681525090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166341493c607f000000000000000000000000000000000000000000000000000000000000000083604051602001610ff591905f60e082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015273ffffffffffffffffffffffffffffffffffffffff60c08401511660c083015292915050565b60405160208183030381529060405287876040518563ffffffff1660e01b81526004016110259493929190612ba9565b5f6040518083038186803b15801561103b575f5ffd5b505afa15801561104d573d5f5f3e3d5ffd5b5050600280547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600154640100000000900473ffffffffffffffffffffffffffffffffffffffff166110d057600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660021790556110fc565b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660031790555b60025460405173ffffffffffffffffffffffffffffffffffffffff909116907f5e6565d9ca2f5c8501d6418bf563322a7243ba7ace266d75eac99f4adbb30ba7905f90a2505060045460ff165b92915050565b905090565b606061114f60546024612907565b61116a611328565b5f6002600954610100900460ff16600281111561118957611189612958565b036111b9575073ffffffffffffffffffffffffffffffffffffffff81165f90815260066020526040902054611239565b6001600954610100900460ff1660028111156111d7576111d7612958565b03611207575073ffffffffffffffffffffffffffffffffffffffff81165f90815260056020526040902054611239565b6040517f078a3df400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f03611272576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f81815260066020908152604080832083905560059091528082208290555190919083908381818185875af1925050503d805f81146112e3576040519150601f19603f3d011682016040523d82523d5f602084013e6112e8565b606091505b5050905080611323576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b6002600954610100900460ff16600281111561134657611346612958565b148061136d57506001600954610100900460ff16600281111561136b5761136b612958565b145b1561137457565b5f600954610100900460ff16600281111561139157611391612958565b146113c8576040517f078a3df400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0314d2b30000000000000000000000000000000000000000000000000000000081523060048201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690630314d2b390602401602060405180830381865afa158015611452573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114769190612c12565b9050806114af576040517f4851bd9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f17cf21a90000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906317cf21a9906024015f604051808303815f87803b158015611533575f5ffd5b505af1925050508015611544575060015b506040517f496b9c160000000000000000000000000000000000000000000000000000000081523060048201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063496b9c1690602401602060405180830381865afa1580156115cf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f39190612c12565b9050801561162c57600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055611659565b600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166102001790555b7f9908eaac0645df9d0704d06adc9e07337c951de2f06b5f2836151d48d5e4722f600960019054906101000a900460ff166040516116979190612998565b60405180910390a15050565b5f5471010000000000000000000000000000000000900460ff16156116f4576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314611763576040517f940d38c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016631d3225e3367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015611834573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118589190612c12565b61188e576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607e36146118a357639824bdab5f526004601cfd5b63ffffffff367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036074013560e01c14611dd5575f73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663bb8aa1fc367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036074013560e01c6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815263ffffffff919091166004820152602401606060405180830381865afa1580156119a4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c89190612c44565b6040517f04e50fed00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529194507f000000000000000000000000000000000000000000000000000000000000000090911692506304e50fed9150602401602060405180830381865afa158015611a59573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a7d9190612c12565b1580611b3257506040517f34a346ea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906334a346ea90602401602060405180830381865afa158015611b0e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b329190612c12565b80611be657506040517f5958a19300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690635958a19390602401602060405180830381865afa158015611bc2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be69190612c12565b15611c1d576040517f346119f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060400160405280611c988373ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c74573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e869190612c97565b81526020018273ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ce6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d0a9190612c97565b905280516007556020015160085560018173ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d63573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d879190612cae565b6002811115611d9857611d98612958565b03611dcf576040517f346119f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50611ead565b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690637258a807906024016040805180830381865afa158015611e82573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ea69190612ccc565b6008556007555b600854367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511611f48576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135600482015260240160405180910390fd5b6040518060c00160405280611f8b60747ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013560e01c90565b63ffffffff1681525f602082018190526040820152606001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013581525f60208201526040016120107f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1642612cee565b67ffffffffffffffff169052805160018054602084015163ffffffff9093167fffffffffffffffff0000000000000000000000000000000000000000000000009091161764010000000073ffffffffffffffffffffffffffffffffffffffff938416021781556040830151600280547fffffffffffffffffffffffff000000000000000000000000000000000000000016919093161790915560608201516003556080820151600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168383838111156120ee576120ee612958565b021790555060a091909101516003909101805467ffffffffffffffff909216610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff9092169190911790555f80547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815534906006906121b07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033560601c90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546121f79190612cee565b90915550505f80547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff16179055604080517f3c9f397c00000000000000000000000000000000000000000000000000000000815290517f000000000000000000000000000000000000000000000000000000000000000063ffffffff16917f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1691633c9f397c916004808201926020929091908290030181865afa1580156122e1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123059190612d01565b600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001663ffffffff9290921692909214179055565b6004545f9067ffffffffffffffff42811661010090920416108061114f57505060025473ffffffffffffffffffffffffffffffffffffffff16151590565b5f806004805460ff169081111561239457612394612958565b146123cb576040517f85c345b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fff59ae7d0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ff59ae7d90602401602060405180830381865afa158015612453573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124779190612c12565b6124ad576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124b561233d565b156124ec576040517fdf469ccb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000003414612545576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002178155600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690911790556125d567ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001642612cee565b6004805467ffffffffffffffff92909216610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff909216919091179055335f9081526006602052604081208054349290612632908490612cee565b909155505060015460405164010000000090910473ffffffffffffffffffffffffffffffffffffffff16907f98027b38153f995c4b802a5c7e6365bee3addb25af6b29818c0c304684d8052c905f90a25060045460ff1690565b5f6002600954610100900460ff1660028111156126ab576126ab612958565b036126d8575073ffffffffffffffffffffffffffffffffffffffff165f9081526006602052604090205490565b5073ffffffffffffffffffffffffffffffffffffffff81165f908152600560205260409020545b919050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061275d611154565b9050909192565b5f63ffffffff367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036074013560e01c14612901575f73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663bb8aa1fc367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036074013560e01c6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815263ffffffff919091166004820152602401606060405180830381865afa158015612866573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061288a9190612c44565b925050508073ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128fb9190612cae565b91505090565b50600290565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301015f815260208101604052505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6003811061299557612995612958565b50565b602081016129a583612985565b91905290565b5f5f602083850312156129bc575f5ffd5b823567ffffffffffffffff8111156129d2575f5ffd5b8301601f810185136129e2575f5ffd5b803567ffffffffffffffff8111156129f8575f5ffd5b856020828401011115612a09575f5ffd5b6020919091019590945092505050565b60058110612a2957612a29612958565b9052565b602081016111498284612a19565b63ffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8681166020830152851660408201526060810184905260c08101612a806080830185612a19565b67ffffffffffffffff831660a0830152979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114612995575f5ffd5b5f60208284031215612acc575f5ffd5b8135612ad781612a9b565b9392505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f612ad76020830184612ade565b63ffffffff84168152826020820152606060408201525f612b606060830184612ade565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561114957611149612b69565b848152606060208201525f612bc16060830186612ade565b8281036040840152838152838560208301375f6020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011682010191505095945050505050565b5f60208284031215612c22575f5ffd5b81518015158114612ad7575f5ffd5b805163ffffffff811681146126ff575f5ffd5b5f5f5f60608486031215612c56575f5ffd5b612c5f84612c31565b9250602084015167ffffffffffffffff81168114612c7b575f5ffd5b6040850151909250612c8c81612a9b565b809150509250925092565b5f60208284031215612ca7575f5ffd5b5051919050565b5f60208284031215612cbe575f5ffd5b815160038110612ad7575f5ffd5b5f5f60408385031215612cdd575f5ffd5b505080516020909101519092909150565b8082018082111561114957611149612b69565b5f60208284031215612d11575f5ffd5b612ad782612c3156fea164736f6c634300081c000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_maxChallengeDuration\",\"type\":\"uint64\",\"internalType\":\"Duration\"},{\"name\":\"_maxProveDuration\",\"type\":\"uint64\",\"internalType\":\"Duration\"},{\"name\":\"_disputeGameFactory\",\"type\":\"address\",\"internalType\":\"contractIDisputeGameFactory\"},{\"name\":\"_sp1Verifier\",\"type\":\"address\",\"internalType\":\"contractISP1Verifier\"},{\"name\":\"_rollupConfigHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_aggregationVkey\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_rangeVkeyCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_challengerBond\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_anchorStateRegistry\",\"type\":\"address\",\"internalType\":\"contractIAnchorStateRegistry\"},{\"name\":\"_accessManager\",\"type\":\"address\",\"internalType\":\"contractAccessManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"accessManager\",\"inputs\":[],\"outputs\":[{\"name\":\"accessManager_\",\"type\":\"address\",\"internalType\":\"contractAccessManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"anchorStateRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"registry_\",\"type\":\"address\",\"internalType\":\"contractIAnchorStateRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bondDistributionMode\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumBondDistributionMode\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"challenge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumOPSuccinctFaultDisputeGame.ProposalStatus\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"challengerBond\",\"inputs\":[],\"outputs\":[{\"name\":\"challengerBond_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimCredit\",\"inputs\":[{\"name\":\"_recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"claimData\",\"inputs\":[],\"outputs\":[{\"name\":\"parentIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"counteredBy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"prover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumOPSuccinctFaultDisputeGame.ProposalStatus\"},{\"name\":\"deadline\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"closeGame\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createdAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"credit\",\"inputs\":[{\"name\":\"_recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"credit_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"disputeGameFactory_\",\"type\":\"address\",\"internalType\":\"contractIDisputeGameFactory\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"extraData\",\"inputs\":[],\"outputs\":[{\"name\":\"extraData_\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"gameCreator\",\"inputs\":[],\"outputs\":[{\"name\":\"creator_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"gameData\",\"inputs\":[],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"extraData_\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameOver\",\"inputs\":[],\"outputs\":[{\"name\":\"gameOver_\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameType\",\"inputs\":[],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint32\",\"internalType\":\"GameType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"l1Head\",\"inputs\":[],\"outputs\":[{\"name\":\"l1Head_\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"l2BlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"l2BlockNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"l2SequenceNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"l2SequenceNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"maxChallengeDuration\",\"inputs\":[],\"outputs\":[{\"name\":\"maxChallengeDuration_\",\"type\":\"uint64\",\"internalType\":\"Duration\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxProveDuration\",\"inputs\":[],\"outputs\":[{\"name\":\"maxProveDuration_\",\"type\":\"uint64\",\"internalType\":\"Duration\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"normalModeCredit\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"parentIndex\",\"inputs\":[],\"outputs\":[{\"name\":\"parentIndex_\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"prove\",\"inputs\":[{\"name\":\"proofBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumOPSuccinctFaultDisputeGame.ProposalStatus\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"refundModeCredit\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumGameStatus\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resolvedAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"rootClaim\",\"inputs\":[],\"outputs\":[{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"rootClaimByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"startingBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"startingBlockNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"startingOutputRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"Hash\"},{\"name\":\"l2BlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"startingRootHash\",\"inputs\":[],\"outputs\":[{\"name\":\"startingRootHash_\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"status\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumGameStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"wasRespectedGameTypeWhenCreated\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Challenged\",\"inputs\":[{\"name\":\"challenger\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GameClosed\",\"inputs\":[{\"name\":\"bondDistributionMode\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumBondDistributionMode\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Proved\",\"inputs\":[{\"name\":\"prover\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Resolved\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumGameStatus\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BadAuth\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BondTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAlreadyChallenged\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAlreadyResolved\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameNotFinalized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameNotOver\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameOver\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"IncorrectBondAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"IncorrectDisputeGameFactory\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidBondDistributionMode\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidParentGame\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProposalStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoCreditToClaim\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ParentGameNotResolved\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnexpectedRootClaim\",\"inputs\":[{\"name\":\"rootClaim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}]}]", + Bin: "0x6101e0604052348015610010575f5ffd5b50604051613fb3380380613fb383398181016040528101906100329190610348565b602a63ffffffff1660c08163ffffffff16815250508967ffffffffffffffff1660808167ffffffffffffffff16815250508867ffffffffffffffff1660a08167ffffffffffffffff16815250508773ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff16815250508673ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff16815250508561012081815250508461014081815250508361016081815250508261018081815250508173ffffffffffffffffffffffffffffffffffffffff166101a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166101c08173ffffffffffffffffffffffffffffffffffffffff168152505050505050505050505050610421565b5f5ffd5b5f67ffffffffffffffff82169050919050565b6101a581610189565b81146101af575f5ffd5b50565b5f815190506101c08161019c565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101ef826101c6565b9050919050565b5f610200826101e5565b9050919050565b610210816101f6565b811461021a575f5ffd5b50565b5f8151905061022b81610207565b92915050565b5f61023b826101e5565b9050919050565b61024b81610231565b8114610255575f5ffd5b50565b5f8151905061026681610242565b92915050565b5f819050919050565b61027e8161026c565b8114610288575f5ffd5b50565b5f8151905061029981610275565b92915050565b5f819050919050565b6102b18161029f565b81146102bb575f5ffd5b50565b5f815190506102cc816102a8565b92915050565b5f6102dc826101e5565b9050919050565b6102ec816102d2565b81146102f6575f5ffd5b50565b5f81519050610307816102e3565b92915050565b5f610317826101e5565b9050919050565b6103278161030d565b8114610331575f5ffd5b50565b5f815190506103428161031e565b92915050565b5f5f5f5f5f5f5f5f5f5f6101408b8d03121561036757610366610185565b5b5f6103748d828e016101b2565b9a505060206103858d828e016101b2565b99505060406103968d828e0161021d565b98505060606103a78d828e01610258565b97505060806103b88d828e0161028b565b96505060a06103c98d828e0161028b565b95505060c06103da8d828e0161028b565b94505060e06103eb8d828e016102be565b9350506101006103fd8d828e016102f9565b92505061012061040f8d828e01610334565b9150509295989b9194979a5092959850565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051613a8d6105265f395f8181611b58015281816127500152612b7e01525f81816113d5015281816117e2015281816118b30152818161193601528181611d0001528181611d9f01528181611e3e015281816120ea01526124bf01525f8181610da001528181610e25015281816116cb015261285d01525f61103701525f6110b501525f61101101525f61107901525f8181611aea01528181611c5d01528181612b300152612bc001525f818161212601528181612498015261258e01525f81816125b5015261292801525f818161228e01526126bb0152613a8d5ff3fe60806040526004361061020e575f3560e01c806370872aa511610117578063bdb337d11161009f578063d2ef73981161006e578063d2ef739814610740578063d5d44d801461075e578063f2b4e6171461079a578063fa24f743146107c4578063fdcb6068146107f05761020e565b8063bdb337d114610686578063c0d8bb74146106b0578063cf09e0d0146106ec578063d2177bdd146107165761020e565b80638b85902b116100e65780638b85902b146105b457806399735e32146105de578063bbdc02db14610608578063bcbe509414610632578063bcef3b551461065c5761020e565b806370872aa514610540578063786b844b1461056a5780637948690a146105805780638129fc1c146105aa5761020e565b8063529d6a8c1161019a5780635e234947116101695780635e2349471461045e578063609d33341461049a57806360e27464146104c45780636361506d146104ec57806368ccdc86146105165761020e565b8063529d6a8c146103a357806354fd4d50146103df57806357da950e146104095780635c0cba33146104345761020e565b80632810e1d6116101e15780632810e1d6146102ba578063375bfa5d146102e4578063378dd48c1461032057806337b1b2291461034a5780633ec4d4d6146103745761020e565b806319effeb414610212578063200d2ed21461023c578063250e69bd1461026657806325fc2ace14610290575b5f5ffd5b34801561021d575f5ffd5b5061022661081a565b6040516102339190612df1565b60405180910390f35b348015610247575f5ffd5b50610250610833565b60405161025d9190612e7d565b60405180910390f35b348015610271575f5ffd5b5061027a610845565b6040516102879190612eb0565b60405180910390f35b34801561029b575f5ffd5b506102a4610857565b6040516102b19190612ef2565b60405180910390f35b3480156102c5575f5ffd5b506102ce610862565b6040516102db9190612e7d565b60405180910390f35b3480156102ef575f5ffd5b5061030a60048036038101906103059190612f74565b610f8a565b6040516103179190613005565b60405180910390f35b34801561032b575f5ffd5b506103346112bb565b6040516103419190613064565b60405180910390f35b348015610355575f5ffd5b5061035e6112ce565b60405161036b91906130bc565b60405180910390f35b34801561037f575f5ffd5b506103886112dd565b60405161039a96959493929190613102565b60405180910390f35b3480156103ae575f5ffd5b506103c960048036038101906103c4919061318b565b611373565b6040516103d691906131ce565b60405180910390f35b3480156103ea575f5ffd5b506103f3611388565b6040516104009190613257565b60405180910390f35b348015610414575f5ffd5b5061041d6113c1565b60405161042b929190613277565b60405180910390f35b34801561043f575f5ffd5b506104486113d2565b60405161045591906132f0565b60405180910390f35b348015610469575f5ffd5b50610484600480360381019061047f9190613333565b6113f9565b604051610491919061335e565b60405180910390f35b3480156104a5575f5ffd5b506104ae611409565b6040516104bb91906133c9565b60405180910390f35b3480156104cf575f5ffd5b506104ea60048036038101906104e5919061318b565b61141c565b005b3480156104f7575f5ffd5b506105006116b8565b60405161050d9190612ef2565b60405180910390f35b348015610521575f5ffd5b5061052a6116c8565b60405161053791906131ce565b60405180910390f35b34801561054b575f5ffd5b506105546116ef565b60405161056191906131ce565b60405180910390f35b348015610575575f5ffd5b5061057e6116fb565b005b34801561058b575f5ffd5b50610594611a7b565b6040516105a191906133e9565b60405180910390f35b6105b2611a8b565b005b3480156105bf575f5ffd5b506105c861256b565b6040516105d591906131ce565b60405180910390f35b3480156105e9575f5ffd5b506105f261257b565b6040516105ff91906131ce565b60405180910390f35b348015610613575f5ffd5b5061061c61258b565b6040516106299190613432565b60405180910390f35b34801561063d575f5ffd5b506106466125b2565b604051610653919061345a565b60405180910390f35b348015610667575f5ffd5b506106706125d9565b60405161067d919061335e565b60405180910390f35b348015610691575f5ffd5b5061069a6125e9565b6040516106a79190612eb0565b60405180910390f35b3480156106bb575f5ffd5b506106d660048036038101906106d1919061318b565b61268b565b6040516106e391906131ce565b60405180910390f35b3480156106f7575f5ffd5b506107006126a0565b60405161070d9190612df1565b60405180910390f35b348015610721575f5ffd5b5061072a6126b8565b604051610737919061345a565b60405180910390f35b6107486126df565b6040516107559190613005565b60405180910390f35b348015610769575f5ffd5b50610784600480360381019061077f919061318b565b612a67565b60405161079191906131ce565b60405180910390f35b3480156107a5575f5ffd5b506107ae612b2d565b6040516107bb9190613493565b60405180910390f35b3480156107cf575f5ffd5b506107d8612b54565b6040516107e7939291906134ac565b60405180910390f35b3480156107fb575f5ffd5b50610804612b7b565b6040516108119190613508565b60405180910390f35b5f60089054906101000a900467ffffffffffffffff1681565b5f60109054906101000a900460ff1681565b60095f9054906101000a900460ff1681565b5f60075f0154905090565b5f5f600281111561087657610875612e0a565b5b5f60109054906101000a900460ff16600281111561089757610896612e0a565b5b146108ce576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6108d7612ba2565b90505f60028111156108ec576108eb612e0a565b5b8160028111156108ff576108fe612e0a565b5b03610936576040517f92c506ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600281111561094a57610949612e0a565b5b81600281111561095d5761095c612e0a565b5b036109f75760015f60106101000a81548160ff0219169083600281111561098757610986612e0a565b5b02179055504760055f60015f0160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610ed3565b6109ff6125e9565b610a35576040517f04643c3900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6004811115610a4857610a47612e0a565b5b60016003015f9054906101000a900460ff166004811115610a6c57610a6b612e0a565b5b03610ae95760025f60106101000a81548160ff02191690836002811115610a9657610a95612e0a565b5b02179055504760055f610aa76112ce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610ed2565b60016004811115610afd57610afc612e0a565b5b60016003015f9054906101000a900460ff166004811115610b2157610b20612e0a565b5b03610bbb5760015f60106101000a81548160ff02191690836002811115610b4b57610b4a612e0a565b5b02179055504760055f60015f0160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610ed1565b60026004811115610bcf57610bce612e0a565b5b60016003015f9054906101000a900460ff166004811115610bf357610bf2612e0a565b5b03610c705760025f60106101000a81548160ff02191690836002811115610c1d57610c1c612e0a565b5b02179055504760055f610c2e6112ce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610ed0565b60036004811115610c8457610c83612e0a565b5b60016003015f9054906101000a900460ff166004811115610ca857610ca7612e0a565b5b03610e9d5760025f60106101000a81548160ff02191690836002811115610cd257610cd1612e0a565b5b0217905550610cdf6112ce565b73ffffffffffffffffffffffffffffffffffffffff16600180015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610d9e574760055f600180015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610e98565b7f000000000000000000000000000000000000000000000000000000000000000060055f600180015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055507f000000000000000000000000000000000000000000000000000000000000000047610e4f919061354e565b60055f610e5a6112ce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b610ecf565b6040517f7492a26900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b5b5b600460016003015f6101000a81548160ff02191690836004811115610efb57610efa612e0a565b5b0217905550425f60086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f60109054906101000a900460ff166002811115610f4957610f48612e0a565b5b7f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6060405160405180910390a25f60109054906101000a900460ff1691505090565b5f610f936125e9565b15610fca576040517fdf469ccb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040518060e00160405280610fde6116b8565b815260200160075f01548152602001610ffd610ff86125d9565b612cde565b815260200161100a61256b565b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020013373ffffffffffffffffffffffffffffffffffffffff1681525090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166341493c607f0000000000000000000000000000000000000000000000000000000000000000836040516020016110e5919061363a565b60405160208183030381529060405287876040518563ffffffff1660e01b8152600401611115949392919061369c565b5f6040518083038186803b15801561112b575f5ffd5b505afa15801561113d573d5f5f3e3d5ffd5b5050505033600180015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff1660015f0160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361120c57600260016003015f6101000a81548160ff0219169083600481111561120257611201612e0a565b5b021790555061123a565b600360016003015f6101000a81548160ff0219169083600481111561123457611233612e0a565b5b02179055505b600180015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f5e6565d9ca2f5c8501d6418bf563322a7243ba7ace266d75eac99f4adbb30ba760405160405180910390a260016003015f9054906101000a900460ff1691505092915050565b600960019054906101000a900460ff1681565b5f6112d85f612ce7565b905090565b6001805f015f9054906101000a900463ffffffff1690805f0160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002015490806003015f9054906101000a900460ff16908060030160019054906101000a900467ffffffffffffffff16905086565b6005602052805f5260405f205f915090505481565b6040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6007805f0154908060010154905082565b5f7f0000000000000000000000000000000000000000000000000000000000000000905090565b5f6114026125d9565b9050919050565b606061141760546024612d02565b905090565b6114246116fb565b5f60028081111561143857611437612e0a565b5b600960019054906101000a900460ff16600281111561145a57611459612e0a565b5b036114a45760065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050611557565b600160028111156114b8576114b7612e0a565b5b600960019054906101000a900460ff1660028111156114da576114d9612e0a565b5b036115245760055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050611556565b6040517f078a3df400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5f8103611590576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f8273ffffffffffffffffffffffffffffffffffffffff16826040516116399061370e565b5f6040518083038185875af1925050503d805f8114611673576040519150601f19603f3d011682016040523d82523d5f602084013e611678565b606091505b50509050806116b3576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b5f6116c36034612d38565b905090565b5f7f0000000000000000000000000000000000000000000000000000000000000000905090565b5f600760010154905090565b60028081111561170e5761170d612e0a565b5b600960019054906101000a900460ff1660028111156117305761172f612e0a565b5b148061176f57506001600281111561174b5761174a612e0a565b5b600960019054906101000a900460ff16600281111561176d5761176c612e0a565b5b145b611a79575f600281111561178657611785612e0a565b5b600960019054906101000a900460ff1660028111156117a8576117a7612e0a565b5b146117df576040517f078a3df400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630314d2b3306040518263ffffffff1660e01b81526004016118399190613742565b602060405180830381865afa158015611854573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118789190613785565b9050806118b1576040517f4851bd9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166317cf21a9306040518263ffffffff1660e01b815260040161190a9190613742565b5f604051808303815f87803b158015611921575f5ffd5b505af1925050508015611932575060015b505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663496b9c16306040518263ffffffff1660e01b815260040161198d9190613742565b602060405180830381865afa1580156119a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119cc9190613785565b90508015611a04576001600960016101000a81548160ff021916908360028111156119fa576119f9612e0a565b5b0217905550611a30565b6002600960016101000a81548160ff02191690836002811115611a2a57611a29612e0a565b5b02179055505b7f9908eaac0645df9d0704d06adc9e07337c951de2f06b5f2836151d48d5e4722f600960019054906101000a900460ff16604051611a6e9190613064565b60405180910390a150505b565b5f611a866074612d50565b905090565b5f60119054906101000a900460ff1615611ad1576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611b56576040517f940d38c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631d3225e3611b9a6112ce565b6040518263ffffffff1660e01b8152600401611bb691906130bc565b602060405180830381865afa158015611bd1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bf59190613785565b611c2b576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607e3614611c4057639824bdab5f526004601cfd5b63ffffffff8016611c4f611a7b565b63ffffffff16146120e8575f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb8aa1fc611c9f611a7b565b6040518263ffffffff1660e01b8152600401611cbb91906137e0565b606060405180830381865afa158015611cd6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cfa9190613888565b925050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166304e50fed826040518263ffffffff1660e01b8152600401611d579190613742565b602060405180830381865afa158015611d72573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d969190613785565b1580611e3657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166334a346ea826040518263ffffffff1660e01b8152600401611df69190613742565b602060405180830381865afa158015611e11573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e359190613785565b5b80611ed557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635958a193826040518263ffffffff1660e01b8152600401611e959190613742565b602060405180830381865afa158015611eb0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ed49190613785565b5b15611f0c576040517f346119f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060400160405280611f8c8373ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f63573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f879190613902565b612cde565b81526020018273ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fda573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ffe9190613941565b81525060075f820151815f0155602082015181600101559050506001600281111561202c5761202b612e0a565b5b8173ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612075573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612099919061398f565b60028111156120ab576120aa612e0a565b5b036120e2576040517f346119f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506121b7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637258a8077f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016121619190613432565b6040805180830381865afa15801561217b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219f91906139e4565b60075f015f60076001015f8491905055839190505550505b6007600101546121c561256b565b1161220e576121d26125d9565b6040517ff40239db000000000000000000000000000000000000000000000000000000008152600401612205919061335e565b60405180910390fd5b6040518060c00160405280612221611a7b565b63ffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff16815260200161226c6125d9565b81526020015f600481111561228457612283612e0a565b5b81526020016122bc7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16612d6b565b67ffffffffffffffff16426122d19190613a22565b67ffffffffffffffff1681525060015f820151815f015f6101000a81548163ffffffff021916908363ffffffff1602179055506020820151815f0160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600201556080820151816003015f6101000a81548160ff021916908360048111156123c4576123c3612e0a565b5b021790555060a08201518160030160016101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060015f60116101000a81548160ff0219169083151502179055503460065f6124216112ce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546124689190613a22565b92505081905550425f5f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f000000000000000000000000000000000000000000000000000000000000000063ffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633c9f397c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612526573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061254a9190613a55565b63ffffffff161460095f6101000a81548160ff021916908315150217905550565b5f6125766054612d74565b905090565b5f6125866054612d74565b905090565b5f7f0000000000000000000000000000000000000000000000000000000000000000905090565b5f7f0000000000000000000000000000000000000000000000000000000000000000905090565b5f6125e46014612d38565b905090565b5f4267ffffffffffffffff16612621600160030160019054906101000a900467ffffffffffffffff1667ffffffffffffffff16612d8c565b67ffffffffffffffff16108061268657505f73ffffffffffffffffffffffffffffffffffffffff16600180015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b905090565b6006602052805f5260405f205f915090505481565b5f5f9054906101000a900467ffffffffffffffff1681565b5f7f0000000000000000000000000000000000000000000000000000000000000000905090565b5f5f60048111156126f3576126f2612e0a565b5b60016003015f9054906101000a900460ff16600481111561271757612716612e0a565b5b1461274e576040517f85c345b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff59ae7d336040518263ffffffff1660e01b81526004016127a791906130bc565b602060405180830381865afa1580156127c2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127e69190613785565b61281c576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128246125e9565b1561285b576040517fdf469ccb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000034146128b4576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360015f0160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001806003015f6101000a81548160ff0219169083600481111561291e5761291d612e0a565b5b02179055506129567f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16612d6b565b67ffffffffffffffff164261296b9190613a22565b600160030160016101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055503460065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546129e29190613a22565b9250508190555060015f0160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f98027b38153f995c4b802a5c7e6365bee3addb25af6b29818c0c304684d8052c60405160405180910390a260016003015f9054906101000a900460ff16905090565b5f600280811115612a7b57612a7a612e0a565b5b600960019054906101000a900460ff166002811115612a9d57612a9c612e0a565b5b03612ae75760065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050612b28565b60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505b919050565b5f7f0000000000000000000000000000000000000000000000000000000000000000905090565b5f5f6060612b6061258b565b9250612b6a6125d9565b9150612b74611409565b9050909192565b5f7f0000000000000000000000000000000000000000000000000000000000000000905090565b5f63ffffffff8016612bb2611a7b565b63ffffffff1614612cd6575f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb8aa1fc612c02611a7b565b6040518263ffffffff1660e01b8152600401612c1e91906137e0565b606060405180830381865afa158015612c39573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c5d9190613888565b925050508073ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612caa573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cce919061398f565b915050612cdb565b600290505b90565b5f819050919050565b5f5f612cf1612d95565b90508281013560601c915050919050565b60605f612d0d612d95565b905060405191508282528284820160208401378260208301015f815260208101604052505092915050565b5f5f612d42612d95565b905082810135915050919050565b5f5f612d5a612d95565b90508281013560e01c915050919050565b5f819050919050565b5f5f612d7e612d95565b905082810135915050919050565b5f819050919050565b5f600236033560f01c3603905090565b5f67ffffffffffffffff82169050919050565b5f819050919050565b5f612ddb612dd6612dd184612da5565b612db8565b612da5565b9050919050565b612deb81612dc1565b82525050565b5f602082019050612e045f830184612de2565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60038110612e4857612e47612e0a565b5b50565b5f819050612e5882612e37565b919050565b5f612e6782612e4b565b9050919050565b612e7781612e5d565b82525050565b5f602082019050612e905f830184612e6e565b92915050565b5f8115159050919050565b612eaa81612e96565b82525050565b5f602082019050612ec35f830184612ea1565b92915050565b5f819050919050565b5f612edc82612ec9565b9050919050565b612eec81612ed2565b82525050565b5f602082019050612f055f830184612ee3565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112612f3457612f33612f13565b5b8235905067ffffffffffffffff811115612f5157612f50612f17565b5b602083019150836001820283011115612f6d57612f6c612f1b565b5b9250929050565b5f5f60208385031215612f8a57612f89612f0b565b5b5f83013567ffffffffffffffff811115612fa757612fa6612f0f565b5b612fb385828601612f1f565b92509250509250929050565b60058110612fd057612fcf612e0a565b5b50565b5f819050612fe082612fbf565b919050565b5f612fef82612fd3565b9050919050565b612fff81612fe5565b82525050565b5f6020820190506130185f830184612ff6565b92915050565b6003811061302f5761302e612e0a565b5b50565b5f81905061303f8261301e565b919050565b5f61304e82613032565b9050919050565b61305e81613044565b82525050565b5f6020820190506130775f830184613055565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6130a68261307d565b9050919050565b6130b68161309c565b82525050565b5f6020820190506130cf5f8301846130ad565b92915050565b5f63ffffffff82169050919050565b6130ed816130d5565b82525050565b6130fc81612ed2565b82525050565b5f60c0820190506131155f8301896130e4565b61312260208301886130ad565b61312f60408301876130ad565b61313c60608301866130f3565b6131496080830185612ff6565b61315660a0830184612de2565b979650505050505050565b61316a8161309c565b8114613174575f5ffd5b50565b5f8135905061318581613161565b92915050565b5f602082840312156131a05761319f612f0b565b5b5f6131ad84828501613177565b91505092915050565b5f819050919050565b6131c8816131b6565b82525050565b5f6020820190506131e15f8301846131bf565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613229826131e7565b61323381856131f1565b9350613243818560208601613201565b61324c8161320f565b840191505092915050565b5f6020820190508181035f83015261326f818461321f565b905092915050565b5f60408201905061328a5f830185612ee3565b61329760208301846131bf565b9392505050565b5f6132b86132b36132ae8461307d565b612db8565b61307d565b9050919050565b5f6132c98261329e565b9050919050565b5f6132da826132bf565b9050919050565b6132ea816132d0565b82525050565b5f6020820190506133035f8301846132e1565b92915050565b613312816131b6565b811461331c575f5ffd5b50565b5f8135905061332d81613309565b92915050565b5f6020828403121561334857613347612f0b565b5b5f6133558482850161331f565b91505092915050565b5f6020820190506133715f8301846130f3565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f61339b82613377565b6133a58185613381565b93506133b5818560208601613201565b6133be8161320f565b840191505092915050565b5f6020820190508181035f8301526133e18184613391565b905092915050565b5f6020820190506133fc5f8301846130e4565b92915050565b5f61341c613417613412846130d5565b612db8565b6130d5565b9050919050565b61342c81613402565b82525050565b5f6020820190506134455f830184613423565b92915050565b61345481612dc1565b82525050565b5f60208201905061346d5f83018461344b565b92915050565b5f61347d826132bf565b9050919050565b61348d81613473565b82525050565b5f6020820190506134a65f830184613484565b92915050565b5f6060820190506134bf5f830186613423565b6134cc60208301856130f3565b81810360408301526134de8184613391565b9050949350505050565b5f6134f2826132bf565b9050919050565b613502816134e8565b82525050565b5f60208201905061351b5f8301846134f9565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613558826131b6565b9150613563836131b6565b925082820390508181111561357b5761357a613521565b5b92915050565b61358a81612ec9565b82525050565b613599816131b6565b82525050565b6135a88161309c565b82525050565b60e082015f8201516135c25f850182613581565b5060208201516135d56020850182613581565b5060408201516135e86040850182613581565b5060608201516135fb6060850182613590565b50608082015161360e6080850182613581565b5060a082015161362160a0850182613581565b5060c082015161363460c085018261359f565b50505050565b5f60e08201905061364d5f8301846135ae565b92915050565b61365c81612ec9565b82525050565b828183375f83830152505050565b5f61367b8385613381565b9350613688838584613662565b6136918361320f565b840190509392505050565b5f6060820190506136af5f830187613653565b81810360208301526136c18186613391565b905081810360408301526136d6818486613670565b905095945050505050565b5f81905092915050565b50565b5f6136f95f836136e1565b9150613704826136eb565b5f82019050919050565b5f613718826136ee565b9150819050919050565b5f61372c826132bf565b9050919050565b61373c81613722565b82525050565b5f6020820190506137555f830184613733565b92915050565b61376481612e96565b811461376e575f5ffd5b50565b5f8151905061377f8161375b565b92915050565b5f6020828403121561379a57613799612f0b565b5b5f6137a784828501613771565b91505092915050565b5f6137ca6137c56137c0846130d5565b612db8565b6131b6565b9050919050565b6137da816137b0565b82525050565b5f6020820190506137f35f8301846137d1565b92915050565b613802816130d5565b811461380c575f5ffd5b50565b5f8151905061381d816137f9565b92915050565b61382c81612da5565b8114613836575f5ffd5b50565b5f8151905061384781613823565b92915050565b5f6138578261309c565b9050919050565b6138678161384d565b8114613871575f5ffd5b50565b5f815190506138828161385e565b92915050565b5f5f5f6060848603121561389f5761389e612f0b565b5b5f6138ac8682870161380f565b93505060206138bd86828701613839565b92505060406138ce86828701613874565b9150509250925092565b6138e181612ec9565b81146138eb575f5ffd5b50565b5f815190506138fc816138d8565b92915050565b5f6020828403121561391757613916612f0b565b5b5f613924848285016138ee565b91505092915050565b5f8151905061393b81613309565b92915050565b5f6020828403121561395657613955612f0b565b5b5f6139638482850161392d565b91505092915050565b60038110613978575f5ffd5b50565b5f815190506139898161396c565b92915050565b5f602082840312156139a4576139a3612f0b565b5b5f6139b18482850161397b565b91505092915050565b6139c381612ec9565b81146139cd575f5ffd5b50565b5f815190506139de816139ba565b92915050565b5f5f604083850312156139fa576139f9612f0b565b5b5f613a07858286016139d0565b9250506020613a188582860161392d565b9150509250929050565b5f613a2c826131b6565b9150613a37836131b6565b9250828201905080821115613a4f57613a4e613521565b5b92915050565b5f60208284031215613a6a57613a69612f0b565b5b5f613a778482850161380f565b9150509291505056fea164736f6c634300081e000a", } // OPSuccinctFaultDisputeGameABI is the input ABI used to generate the binding from. @@ -968,6 +968,37 @@ func (_OPSuccinctFaultDisputeGame *OPSuccinctFaultDisputeGameCallerSession) Root return _OPSuccinctFaultDisputeGame.Contract.RootClaim(&_OPSuccinctFaultDisputeGame.CallOpts) } +// RootClaimByChainId is a free data retrieval call binding the contract method 0x5e234947. +// +// Solidity: function rootClaimByChainId(uint256 ) pure returns(bytes32 rootClaim_) +func (_OPSuccinctFaultDisputeGame *OPSuccinctFaultDisputeGameCaller) RootClaimByChainId(opts *bind.CallOpts, arg0 *big.Int) ([32]byte, error) { + var out []interface{} + err := _OPSuccinctFaultDisputeGame.contract.Call(opts, &out, "rootClaimByChainId", arg0) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// RootClaimByChainId is a free data retrieval call binding the contract method 0x5e234947. +// +// Solidity: function rootClaimByChainId(uint256 ) pure returns(bytes32 rootClaim_) +func (_OPSuccinctFaultDisputeGame *OPSuccinctFaultDisputeGameSession) RootClaimByChainId(arg0 *big.Int) ([32]byte, error) { + return _OPSuccinctFaultDisputeGame.Contract.RootClaimByChainId(&_OPSuccinctFaultDisputeGame.CallOpts, arg0) +} + +// RootClaimByChainId is a free data retrieval call binding the contract method 0x5e234947. +// +// Solidity: function rootClaimByChainId(uint256 ) pure returns(bytes32 rootClaim_) +func (_OPSuccinctFaultDisputeGame *OPSuccinctFaultDisputeGameCallerSession) RootClaimByChainId(arg0 *big.Int) ([32]byte, error) { + return _OPSuccinctFaultDisputeGame.Contract.RootClaimByChainId(&_OPSuccinctFaultDisputeGame.CallOpts, arg0) +} + // StartingBlockNumber is a free data retrieval call binding the contract method 0x70872aa5. // // Solidity: function startingBlockNumber() view returns(uint256 startingBlockNumber_) diff --git a/espresso/devnet-tests/batcher_active_publish_test.go b/espresso/devnet-tests/batcher_active_publish_test.go index a19ff4a7afb..fbf55f13de0 100644 --- a/espresso/devnet-tests/batcher_active_publish_test.go +++ b/espresso/devnet-tests/batcher_active_publish_test.go @@ -48,9 +48,9 @@ func TestBatcherActivePublishOnly(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), 20*time.Minute) defer cancel() - // Initialize devnet with NON_TEE profile (starts both batchers) + // Initialize devnet with FALLBACK profile (starts both batchers) d := NewDevnet(ctx, t) - require.NoError(t, d.Up(NON_TEE)) + require.NoError(t, d.Up(FALLBACK)) defer func() { require.NoError(t, d.Down()) }() @@ -69,13 +69,13 @@ func TestBatcherActivePublishOnly(t *testing.T) { batchAuthenticator, err := bindings.NewBatchAuthenticator(config.BatchAuthenticatorAddress, d.L1) require.NoError(t, err) - teeBatcherAddr, err := batchAuthenticator.TeeBatcher(&bind.CallOpts{}) + espressoBatcherAddr, err := batchAuthenticator.EspressoBatcher(&bind.CallOpts{}) require.NoError(t, err) - nonTeeBatcherAddr := config.Genesis.SystemConfig.BatcherAddr + fallbackBatcherAddr := config.Genesis.SystemConfig.BatcherAddr - activeIsTee, err := batchAuthenticator.ActiveIsTee(&bind.CallOpts{}) + activeIsEspresso, err := batchAuthenticator.ActiveIsEspresso(&bind.CallOpts{}) require.NoError(t, err) - t.Logf("Initial state: activeIsTee = %v", activeIsTee) + t.Logf("Initial state: activeIsEspresso = %v", activeIsEspresso) // verifyPublishing helper function verifyPublishing := func(expectTeeActive bool) { @@ -100,24 +100,24 @@ func TestBatcherActivePublishOnly(t *testing.T) { require.NoError(t, err) t.Logf("Checking blocks %d-%d", startBlock, endBlock) - teePublished, err := hasBatchTransactions(ctx, d.L1, config.BatchInboxAddress, teeBatcherAddr, startBlock, endBlock) + espressoPublished, err := hasBatchTransactions(ctx, d.L1, config.BatchInboxAddress, espressoBatcherAddr, startBlock, endBlock) require.NoError(t, err) - nonTeePublished, err := hasBatchTransactions(ctx, d.L1, config.BatchInboxAddress, nonTeeBatcherAddr, startBlock, endBlock) + fallbackPublished, err := hasBatchTransactions(ctx, d.L1, config.BatchInboxAddress, fallbackBatcherAddr, startBlock, endBlock) require.NoError(t, err) - t.Logf("TEE batcher published: %v, non-TEE batcher published: %v", teePublished, nonTeePublished) + t.Logf("Espresso batcher published: %v, fallback batcher published: %v", espressoPublished, fallbackPublished) if expectTeeActive { - require.True(t, teePublished, "TEE batcher should publish when active") - require.False(t, nonTeePublished, "non-TEE batcher should NOT publish when inactive") + require.True(t, espressoPublished, "Espresso batcher should publish when active") + require.False(t, fallbackPublished, "fallback batcher should NOT publish when inactive") } else { - require.True(t, nonTeePublished, "non-TEE batcher should publish when active") - require.False(t, teePublished, "TEE batcher should NOT publish when inactive") + require.True(t, fallbackPublished, "fallback batcher should publish when active") + require.False(t, espressoPublished, "Espresso batcher should NOT publish when inactive") } } // 1. Verify initial state - verifyPublishing(activeIsTee) + verifyPublishing(activeIsEspresso) // 2. Switch state t.Logf("Switching batcher state...") @@ -128,8 +128,8 @@ func TestBatcherActivePublishOnly(t *testing.T) { require.Equal(t, types.ReceiptStatusSuccessful, receipt.Status) // Update expected state - activeIsTee = !activeIsTee - t.Logf("Switched state to: activeIsTee=%v", activeIsTee) + activeIsEspresso = !activeIsEspresso + t.Logf("Switched state to: activeIsEspresso=%v", activeIsEspresso) // Wait for services to stabilize after switch. In-flight sendTxWithEspresso goroutines // spawned before deactivation can take ~25s to drain their queued Txmgr.Send calls, @@ -138,5 +138,5 @@ func TestBatcherActivePublishOnly(t *testing.T) { time.Sleep(60 * time.Second) // 3. Verify new state - verifyPublishing(activeIsTee) + verifyPublishing(activeIsEspresso) } diff --git a/espresso/devnet-tests/batcher_restart_test.go b/espresso/devnet-tests/batcher_restart_test.go index 900dce74663..c15f992bddf 100644 --- a/espresso/devnet-tests/batcher_restart_test.go +++ b/espresso/devnet-tests/batcher_restart_test.go @@ -13,7 +13,7 @@ func TestBatcherRestart(t *testing.T) { defer cancel() d := NewDevnet(ctx, t) - require.NoError(t, d.Up(NON_TEE)) + require.NoError(t, d.Up(FALLBACK)) defer func() { require.NoError(t, d.Down()) }() diff --git a/espresso/devnet-tests/batcher_switching_test.go b/espresso/devnet-tests/batcher_switching_test.go index 80aa64b4c77..36cdee1c26a 100644 --- a/espresso/devnet-tests/batcher_switching_test.go +++ b/espresso/devnet-tests/batcher_switching_test.go @@ -10,8 +10,8 @@ import ( "github.com/stretchr/testify/require" ) -// TestBatcherSwitching tests that the batcher can be switched from the TEE-enabled -// batcher to a fallback non-TEE batcher using the BatchAuthenticator contract. +// TestBatcherSwitching tests that the batcher can be switched from the Espresso +// batcher to a fallback batcher using the BatchAuthenticator contract. // // This is the devnet equivalent of TestBatcherSwitching from the E2E tests. // The test runs two batchers in parallel: @@ -21,9 +21,9 @@ func TestBatcherSwitching(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - // Initialize devnet with NON_TEE profile (starts both batchers) + // Initialize devnet with FALLBACK profile (starts both batchers) d := NewDevnet(ctx, t) - require.NoError(t, d.Up(NON_TEE)) + require.NoError(t, d.Up(FALLBACK)) defer func() { require.NoError(t, d.Down()) }() @@ -48,11 +48,11 @@ func TestBatcherSwitching(t *testing.T) { require.NoError(t, err) // Check current active batcher state before switching - activeIsTee, err := batchAuthenticator.ActiveIsTee(&bind.CallOpts{}) + activeIsEspresso, err := batchAuthenticator.ActiveIsEspresso(&bind.CallOpts{}) require.NoError(t, err) - t.Logf("Before switch: activeIsTee = %v", activeIsTee) + t.Logf("Before switch: activeIsEspresso = %v", activeIsEspresso) - // Stop the primary "TEE" batcher (op-batcher with Espresso enabled) + // Stop the Espresso batcher (op-batcher with Espresso enabled) require.NoError(t, d.StopBatcherSubmitting("op-batcher")) t.Logf("Stopped op-batcher batch submission") @@ -67,10 +67,10 @@ func TestBatcherSwitching(t *testing.T) { t.Logf("SwitchBatcher transaction confirmed in block %d", receipt.BlockNumber.Uint64()) // Verify the switch happened - activeIsTeeAfter, err := batchAuthenticator.ActiveIsTee(&bind.CallOpts{}) + activeIsEspressoAfter, err := batchAuthenticator.ActiveIsEspresso(&bind.CallOpts{}) require.NoError(t, err) - require.NotEqual(t, activeIsTee, activeIsTeeAfter, "activeIsTee should have toggled") - t.Logf("After switch: activeIsTee = %v", activeIsTeeAfter) + require.NotEqual(t, activeIsEspresso, activeIsEspressoAfter, "activeIsEspresso should have toggled") + t.Logf("After switch: activeIsEspresso = %v", activeIsEspressoAfter) // Start the fallback batcher require.NoError(t, d.StartBatcherSubmitting("op-batcher-fallback")) diff --git a/espresso/devnet-tests/challenge_test.go b/espresso/devnet-tests/challenge_test.go index edfafe8b881..402f92c3fd9 100644 --- a/espresso/devnet-tests/challenge_test.go +++ b/espresso/devnet-tests/challenge_test.go @@ -19,7 +19,7 @@ func TestChallengeGame(t *testing.T) { defer cancel() d := NewDevnet(ctx, t) - require.NoError(t, d.Up(NON_TEE)) + require.NoError(t, d.Up(FALLBACK)) defer func() { require.NoError(t, d.Down()) }() diff --git a/espresso/devnet-tests/devnet_tools.go b/espresso/devnet-tests/devnet_tools.go index 3bf05cc3817..8b518be22ed 100644 --- a/espresso/devnet-tests/devnet_tools.go +++ b/espresso/devnet-tests/devnet_tools.go @@ -114,8 +114,8 @@ func (d *Devnet) isRunning() bool { type ComposeProfile string const ( - TEE ComposeProfile = "tee" - NON_TEE ComposeProfile = "default" + ESPRESSO ComposeProfile = "tee" + FALLBACK ComposeProfile = "default" ) func (d *Devnet) Up(profile ComposeProfile) (err error) { @@ -133,7 +133,7 @@ func (d *Devnet) Up(profile ComposeProfile) (err error) { "docker", "compose", "up", "-d", ) cmd.Env = append(os.Environ(), "COMPOSE_PROFILES="+string(profile)) - // TEE batcher uses HD index 6 (distinct from the SystemConfig/fallback batcher at index 2) + // Espresso batcher uses HD index 6 (distinct from the SystemConfig/fallback batcher at index 2) cmd.Env = append( cmd.Env, fmt.Sprintf("OP_BATCHER_PRIVATE_KEY=%s", hex.EncodeToString(crypto.FromECDSA(d.secrets.AccountAtIdx(6)))), diff --git a/espresso/devnet-tests/forced_transaction_test.go b/espresso/devnet-tests/forced_transaction_test.go index 41929f1cd10..e1ff3343267 100644 --- a/espresso/devnet-tests/forced_transaction_test.go +++ b/espresso/devnet-tests/forced_transaction_test.go @@ -27,7 +27,7 @@ func TestForcedTransaction(t *testing.T) { // Launch docker compose devnet d := NewDevnet(ctx, t) - require.NoError(t, d.Up(NON_TEE)) + require.NoError(t, d.Up(FALLBACK)) defer func() { require.NoError(t, d.Down()) }() diff --git a/espresso/devnet-tests/key_rotation_test.go b/espresso/devnet-tests/key_rotation_test.go index 22077f468e9..916fc0612ee 100644 --- a/espresso/devnet-tests/key_rotation_test.go +++ b/espresso/devnet-tests/key_rotation_test.go @@ -25,7 +25,7 @@ func TestChangeBatchAuthenticatorOwner(t *testing.T) { d := NewDevnet(ctx, t) - require.NoError(t, d.Up(NON_TEE)) + require.NoError(t, d.Up(FALLBACK)) defer func() { require.NoError(t, d.Down()) }() diff --git a/espresso/devnet-tests/smoke_test.go b/espresso/devnet-tests/smoke_test.go index 297792eb819..251e0c78007 100644 --- a/espresso/devnet-tests/smoke_test.go +++ b/espresso/devnet-tests/smoke_test.go @@ -8,12 +8,12 @@ import ( "github.com/stretchr/testify/require" ) -func TestSmokeWithoutTEE(t *testing.T) { +func TestSmokeWithFallback(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), 20*time.Minute) defer cancel() d := NewDevnet(ctx, t) - require.NoError(t, d.Up(NON_TEE)) + require.NoError(t, d.Up(FALLBACK)) defer func() { require.NoError(t, d.Down()) }() @@ -22,12 +22,12 @@ func TestSmokeWithoutTEE(t *testing.T) { require.NoError(t, d.RunSimpleL2Burn()) } -func TestSmokeWithTEE(t *testing.T) { +func TestSmokeWithEspresso(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), 20*time.Minute) defer cancel() d := NewDevnet(ctx, t) - require.NoError(t, d.Up(TEE)) + require.NoError(t, d.Up(ESPRESSO)) defer func() { require.NoError(t, d.Down()) }() diff --git a/espresso/devnet-tests/withdraw_test.go b/espresso/devnet-tests/withdraw_test.go index 1233ab85332..fbc40008db7 100644 --- a/espresso/devnet-tests/withdraw_test.go +++ b/espresso/devnet-tests/withdraw_test.go @@ -34,7 +34,7 @@ func TestWithdrawal(t *testing.T) { defer cancel() d := NewDevnet(ctx, t) - require.NoError(t, d.Up(NON_TEE)) + require.NoError(t, d.Up(FALLBACK)) defer func() { require.NoError(t, d.Down()) }() alice := crypto.PubkeyToAddress(d.secrets.Alice.PublicKey) diff --git a/espresso/docker-compose.yml b/espresso/docker-compose.yml index 718c5da094c..8d0f4127a06 100644 --- a/espresso/docker-compose.yml +++ b/espresso/docker-compose.yml @@ -378,7 +378,7 @@ services: - --espresso.espresso-attestation-service=http://attestation-service-zk:${ESPRESSO_ATTESTATION_VERIFIER_PORT} - --espresso.light-client-addr=0x703848f4c85f18e3acd8196c8ec91eb0b7bd0797 - --espresso.testing-batcher-private-key=${OP_TESTING_BATCHER_PRIVATE_KEY:-$OPERATOR_PRIVATE_KEY} - - --private-key=${OP_BATCHER_PRIVATE_KEY:-$TEE_BATCHER_PRIVATE_KEY} + - --private-key=${OP_BATCHER_PRIVATE_KEY:-$ESPRESSO_BATCHER_PRIVATE_KEY} - --throttle.unsafe-da-bytes-lower-threshold=0 - --max-channel-duration=2 - --target-num-frames=1 diff --git a/espresso/environment/14_batcher_fallback_test.go b/espresso/environment/14_batcher_fallback_test.go index e32836a45b8..8d7f5ab63d0 100644 --- a/espresso/environment/14_batcher_fallback_test.go +++ b/espresso/environment/14_batcher_fallback_test.go @@ -59,10 +59,10 @@ func waitForRollupToMovePastL1Block(ctx context.Context, rollupCli *sources.Roll // fallback batcher, ensuring seamless transitions in both directions. // // In this scenario the test starts with the batcher running in Espresso -// mode and verifies transactions work correctly. It then stops the TEE batcher, +// mode and verifies transactions work correctly. It then stops the Espresso batcher, // sends switch action to the Batch Authenticator contract and switches to the // fallback batcher, verifies transactions continue to go through. Next, it switches -// back to the TEE batcher by restarting it with proper caffeination heights +// back to the Espresso batcher by restarting it with proper caffeination heights // (both Espresso and L2 heights set to ensure correct sync points). Finally, it // launches a Caff node with the same caffeination heights and verifies it // derives the same chain state as the verifier by comparing block hashes at the diff --git a/espresso/environment/6_batch_inbox_test.go b/espresso/environment/6_batch_inbox_test.go index 5e12e5a4231..ab6c7ab02db 100644 --- a/espresso/environment/6_batch_inbox_test.go +++ b/espresso/environment/6_batch_inbox_test.go @@ -56,7 +56,7 @@ func TestE2eDevnetWithoutAuthenticatingBatches(t *testing.T) { // Substitute batcher's transaction manager with one that always sends transactions, even // if they won't succeed. Otherwise batcher wouldn't submit transactions that would revert to // batch inbox. - // Use the TEE batcher key (HD index 6) — the same key the primary batcher signs with. + // Use the Espresso batcher key (HD index 6) — the same key the primary batcher signs with. // This ensures the tx comes from an address that is NOT the SystemConfig batcher, so the // derivation pipeline's fallback authorization won't accept it either. txMgrCliConfig := setuputils.NewTxMgrConfig(system.NodeEndpoint(e2esys.RoleL1), system.Cfg.Secrets.AccountAtIdx(6)) diff --git a/espresso/ethclient.go b/espresso/ethclient.go index 71eb9555984..38328ce88f8 100644 --- a/espresso/ethclient.go +++ b/espresso/ethclient.go @@ -43,18 +43,18 @@ func (c *AdaptL1BlockRefClient) CallContract(ctx context.Context, call ethereum. return c.L1Client.CallContract(ctx, call, blockNumber) } -// FetchTeeBatcherAddress reads the TEE batcher address from the BatchAuthenticator +// FetchEspressoBatcherAddress reads the Espresso batcher address from the BatchAuthenticator // contract on L1. This is used by the caff node to determine which address signed -// Espresso batches, since the TEE batcher may use a different key than the +// Espresso batches, since the Espresso batcher may use a different key than the // SystemConfig batcher (fallback batcher). -func FetchTeeBatcherAddress(ctx context.Context, l1Client *ethclient.Client, batchAuthenticatorAddr common.Address) (common.Address, error) { +func FetchEspressoBatcherAddress(ctx context.Context, l1Client *ethclient.Client, batchAuthenticatorAddr common.Address) (common.Address, error) { caller, err := bindings.NewBatchAuthenticatorCaller(batchAuthenticatorAddr, l1Client) if err != nil { return common.Address{}, fmt.Errorf("failed to bind BatchAuthenticator at %s: %w", batchAuthenticatorAddr, err) } - addr, err := caller.TeeBatcher(&bind.CallOpts{Context: ctx}) + addr, err := caller.EspressoBatcher(&bind.CallOpts{Context: ctx}) if err != nil { - return common.Address{}, fmt.Errorf("failed to call BatchAuthenticator.teeBatcher(): %w", err) + return common.Address{}, fmt.Errorf("failed to call BatchAuthenticator.espressoBatcher(): %w", err) } return addr, nil } diff --git a/espresso/scripts/prepare-allocs.sh b/espresso/scripts/prepare-allocs.sh index 48183b18d8a..0ac0d371a59 100755 --- a/espresso/scripts/prepare-allocs.sh +++ b/espresso/scripts/prepare-allocs.sh @@ -71,10 +71,10 @@ op-deployer init --l1-chain-id "${L1_CHAIN_ID}" \ dasel put -f "${DEPLOYER_DIR}/intent.toml" -s .chains.[0].espressoEnabled -t bool -v true -# Configure Espresso TEE batcher for devnet. The TEE batcher uses HD index 6 -# (TEE_BATCHER_ADDRESS). The fallback (non-TEE) batcher uses the standard OP stack +# Configure the Espresso batcher for devnet. The Espresso batcher uses HD index 6 +# (ESPRESSO_BATCHER_ADDRESS). The fallback batcher uses the standard OP stack # batcher address from SystemConfig.batcherHash (FALLBACK_BATCHER_ADDRESS, HD index 2). -dasel put -f "${DEPLOYER_DIR}/intent.toml" -s .chains.[0].teeBatcher -v "${TEE_BATCHER_ADDRESS}" +dasel put -f "${DEPLOYER_DIR}/intent.toml" -s .chains.[0].espressoBatcher -v "${ESPRESSO_BATCHER_ADDRESS}" dasel put -f "${DEPLOYER_DIR}/intent.toml" -s .l1ContractsLocator -v "${ARTIFACTS_DIR}" dasel put -f "${DEPLOYER_DIR}/intent.toml" -s .l2ContractsLocator -v "${ARTIFACTS_DIR}" dasel put -f "${DEPLOYER_DIR}/intent.toml" -s .opcmAddress -v `jq -r .opcmAddress < ${DEPLOYER_DIR}/bootstrap_implementations.json` diff --git a/go.mod b/go.mod index 4dd2cb81ff1..3e270c4db07 100644 --- a/go.mod +++ b/go.mod @@ -83,7 +83,7 @@ require ( ) require ( - github.com/EspressoSystems/espresso-streamers v1.0.0 + github.com/EspressoSystems/espresso-streamers v1.0.1-0.20260406215806-453508e666cd github.com/joho/godotenv v1.5.1 ) diff --git a/go.sum b/go.sum index 2a366303d95..0b93ab2623e 100644 --- a/go.sum +++ b/go.sum @@ -34,12 +34,8 @@ github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e h1:ZIWapoIRN1VqT8GR github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/EspressoSystems/espresso-network/sdks/go v0.3.4 h1:1hf/k2rGqIGEGQW8O3fQFltPIyxSmumph8aKIa6AjCk= github.com/EspressoSystems/espresso-network/sdks/go v0.3.4/go.mod h1:kaxR08mJb5Mijy7a2RhWCIWOevFI4PcXwDkzoEbsVTk= -github.com/EspressoSystems/espresso-streamers v0.0.2-0.20260401083845-6106312fbfd2 h1:QSDzLrdK6vbRv7R0yUd1RGRI3uJuDdJg/vVdkFdOsAM= -github.com/EspressoSystems/espresso-streamers v0.0.2-0.20260401083845-6106312fbfd2/go.mod h1:Op3SNwQnZ3bqwrUXMAORnL2/pNiFzpfOED4ltYs5o/U= -github.com/EspressoSystems/espresso-streamers v0.0.2-0.20260401163154-23746a33ce96 h1:/jViu0A5z/iLVTsxebsZ4gWdLZjsBcwgKfzorxn9sXA= -github.com/EspressoSystems/espresso-streamers v0.0.2-0.20260401163154-23746a33ce96/go.mod h1:Op3SNwQnZ3bqwrUXMAORnL2/pNiFzpfOED4ltYs5o/U= -github.com/EspressoSystems/espresso-streamers v1.0.0 h1:wMeB+aqevIJv0YNA7BcEXQgIUT8IgBLyuubD7R2B7lk= -github.com/EspressoSystems/espresso-streamers v1.0.0/go.mod h1:Op3SNwQnZ3bqwrUXMAORnL2/pNiFzpfOED4ltYs5o/U= +github.com/EspressoSystems/espresso-streamers v1.0.1-0.20260406215806-453508e666cd h1:utaI7XLRcTQTF+FyAN73+HETWopS2DK/KRQS2qqc098= +github.com/EspressoSystems/espresso-streamers v1.0.1-0.20260406215806-453508e666cd/go.mod h1:Op3SNwQnZ3bqwrUXMAORnL2/pNiFzpfOED4ltYs5o/U= github.com/Masterminds/semver/v3 v3.3.1 h1:QtNSWtVZ3nBfk8mAOu/B6v7FMJ+NHTIgUPi7rj+4nv4= github.com/Masterminds/semver/v3 v3.3.1/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= diff --git a/op-batcher/batcher/espresso_active.go b/op-batcher/batcher/espresso_active.go index 223ad2fcf17..961b5759d69 100644 --- a/op-batcher/batcher/espresso_active.go +++ b/op-batcher/batcher/espresso_active.go @@ -14,12 +14,12 @@ import ( // the BatchAuthenticator contract. Returns true if this batcher instance should // be publishing batches, false if it should stay idle. // -// The active batcher is determined by the contract's activeIsTee flag: -// - If activeIsTee is true, the TEE batcher address is active -// - If activeIsTee is false, the non-TEE (fallback) batcher address is active +// The active batcher is determined by the contract's activeIsEspresso flag: +// - If activeIsEspresso is true, the Espresso batcher address is active +// - If activeIsEspresso is false, the fallback batcher address is active // // This method compares the batcher's own address (from TxMgr) against the -// contract's registered TEE batcher address and the SystemConfig batcher address. +// contract's registered Espresso batcher address and the SystemConfig batcher address. func (l *BatchSubmitter) isBatcherActive(ctx context.Context) (bool, error) { // Check if contract code exists at the address code, err := l.L1Client.CodeAt(ctx, l.RollupConfig.BatchAuthenticatorAddress, nil) @@ -40,20 +40,20 @@ func (l *BatchSubmitter) isBatcherActive(ctx context.Context) (bool, error) { callOpts := &bind.CallOpts{Context: cCtx} - activeIsTee, err := batchAuthenticator.ActiveIsTee(callOpts) + activeIsEspresso, err := batchAuthenticator.ActiveIsEspresso(callOpts) if err != nil { - return false, fmt.Errorf("failed to check activeIsTee: %w", err) + return false, fmt.Errorf("failed to check activeIsEspresso: %w", err) } batcherAddr := l.Txmgr.From() - isActive := (activeIsTee && l.Config.UseEspresso) || - (!activeIsTee && !l.Config.UseEspresso) + isActive := (activeIsEspresso && l.Config.UseEspresso) || + (!activeIsEspresso && !l.Config.UseEspresso) if !isActive { l.Log.Info("Batcher is not the active batcher, skipping publish", "batcherAddr", batcherAddr, - "activeIsTee", activeIsTee, + "activeIsEspresso", activeIsEspresso, "UseEspresso", l.Config.UseEspresso, ) } diff --git a/op-deployer/pkg/deployer/opcm/espresso.go b/op-deployer/pkg/deployer/opcm/espresso.go index b83a882ece4..16a702f9c2e 100644 --- a/op-deployer/pkg/deployer/opcm/espresso.go +++ b/op-deployer/pkg/deployer/opcm/espresso.go @@ -9,7 +9,7 @@ import ( type DeployEspressoInput struct { NitroEnclaveVerifier common.Address - TeeBatcher common.Address + EspressoBatcher common.Address SystemConfig common.Address ProxyAdminOwner common.Address } @@ -34,13 +34,13 @@ func DeployEspresso( inputAddr := host.NewScriptAddress() outputAddr := host.NewScriptAddress() - cleanupInput, err := script.WithPrecompileAtAddress[*DeployEspressoInput](host, inputAddr, &input) + cleanupInput, err := script.WithPrecompileAtAddress(host, inputAddr, &input) if err != nil { return output, fmt.Errorf("failed to insert DeployEspressoInput precompile: %w", err) } defer cleanupInput() - cleanupOutput, err := script.WithPrecompileAtAddress[*DeployEspressoOutput](host, outputAddr, &output, + cleanupOutput, err := script.WithPrecompileAtAddress(host, outputAddr, &output, script.WithFieldSetter[*DeployEspressoOutput]) if err != nil { return output, fmt.Errorf("failed to insert DeployEspressoOutput precompile: %w", err) diff --git a/op-deployer/pkg/deployer/pipeline/espresso.go b/op-deployer/pkg/deployer/pipeline/espresso.go index ed5836afb36..dfad8aa24f4 100644 --- a/op-deployer/pkg/deployer/pipeline/espresso.go +++ b/op-deployer/pkg/deployer/pipeline/espresso.go @@ -50,7 +50,7 @@ func DeployEspresso(env *Env, intent *state.Intent, st *state.State, chainID com eo, err := opcm.DeployEspresso(env.L1ScriptHost, opcm.DeployEspressoInput{ NitroEnclaveVerifier: nitroEnclaveVerifierAddress, - TeeBatcher: chainIntent.TeeBatcher, + EspressoBatcher: chainIntent.EspressoBatcher, SystemConfig: chainState.SystemConfigProxy, ProxyAdminOwner: batchAuthOwner, }, batchAuthOwner) diff --git a/op-deployer/pkg/deployer/state/chain_intent.go b/op-deployer/pkg/deployer/state/chain_intent.go index 042c11d8b9e..98f7906d8b4 100644 --- a/op-deployer/pkg/deployer/state/chain_intent.go +++ b/op-deployer/pkg/deployer/state/chain_intent.go @@ -89,7 +89,7 @@ type ChainIntent struct { // Espresso-specific fields EspressoEnabled bool `json:"espressoEnabled,omitzero" toml:"espressoEnabled,omitzero"` - TeeBatcher common.Address `json:"teeBatcher,omitzero" toml:"teeBatcher,omitzero"` + EspressoBatcher common.Address `json:"espressoBatcher,omitzero" toml:"espressoBatcher,omitzero"` } type ChainRoles struct { diff --git a/op-e2e/config/init.go b/op-e2e/config/init.go index 77d7b6c1bed..0fd28dda988 100644 --- a/op-e2e/config/init.go +++ b/op-e2e/config/init.go @@ -278,13 +278,13 @@ func initAllocType(root string, allocType AllocType) { } // Configure Espresso allocation types. - // The TEE batcher uses a separate key (HD index 6) from the standard + // The Espresso batcher uses a separate key (HD index 6) from the standard // OP stack batcher (Roles.Batcher, HD index 2). The fallback batcher // uses the SystemConfig batcher address (Roles.Batcher). if allocType.IsEspresso() { intent.Chains[0].EspressoEnabled = true - teeBatcherKey := secrets.DefaultSecrets.AccountAtIdx(6) - intent.Chains[0].TeeBatcher = crypto.PubkeyToAddress(teeBatcherKey.PublicKey) + espressoBatcherKey := secrets.DefaultSecrets.AccountAtIdx(6) + intent.Chains[0].EspressoBatcher = crypto.PubkeyToAddress(espressoBatcherKey.PublicKey) } baseUpgradeSchedule := map[string]any{ diff --git a/op-e2e/system/e2esys/setup.go b/op-e2e/system/e2esys/setup.go index 10f3300aaae..d2472a4995c 100644 --- a/op-e2e/system/e2esys/setup.go +++ b/op-e2e/system/e2esys/setup.go @@ -1022,7 +1022,7 @@ func (cfg SystemConfig) Start(t *testing.T, startOpts ...StartOption) (*System, TestingBatcherPrivateKey: testingBatcherPk, } - // When Espresso is enabled, the primary batcher is the TEE batcher which uses + // When Espresso is enabled, the primary batcher is the Espresso batcher which uses // a dedicated key (HD index 6) distinct from the SystemConfig batcher (HD index 2). batcherKey := cfg.Secrets.Batcher if cfg.AllocType.IsEspresso() { diff --git a/op-node/rollup/derive/calldata_source_test.go b/op-node/rollup/derive/calldata_source_test.go index fb9644fd7dd..7550e8e0553 100644 --- a/op-node/rollup/derive/calldata_source_test.go +++ b/op-node/rollup/derive/calldata_source_test.go @@ -232,7 +232,7 @@ func TestDataFromEVMTransactionsEventAuth(t *testing.T) { t.Run("mixed: TEE authenticated and fallback sender", func(t *testing.T) { l1F := &testutils.MockL1Source{} - // tx1: TEE batcher with auth event + // tx1: Espresso batcher with auth event txData1 := testutils.RandomData(rng, 100) tx1, err := types.SignNewTx(batcherPriv, signer, &types.DynamicFeeTx{ ChainID: big.NewInt(100), Nonce: 0, Gas: 100_000, diff --git a/op-node/rollup/derive/data_source.go b/op-node/rollup/derive/data_source.go index a8fbf6314cb..50b63b1bd55 100644 --- a/op-node/rollup/derive/data_source.go +++ b/op-node/rollup/derive/data_source.go @@ -143,13 +143,13 @@ func isAuthorizedBatchSender(tx *types.Transaction, l1Signer types.Signer, batch // once per L1 block via CollectAuthenticatedBatches. // // When batch auth is enabled, there are two authorization paths: -// 1. TEE batcher: must have a matching BatchInfoAuthenticated event (event-based auth) +// 1. Espresso batcher: must have a matching BatchInfoAuthenticated event (event-based auth) // 2. Fallback batcher: authorized via sender verification against batcherAddr, which is // the standard OP stack batcher address from SystemConfig.batcherHash. This allows // the fallback batcher address to be changed dynamically via SystemConfig.setBatcherHash(). // // This dual-mode approach allows the fallback (non-TEE) batcher to post batches without -// calling authenticateBatchInfo on L1, while still requiring the TEE batcher to authenticate +// calling authenticateBatchInfo on L1, while still requiring the Espresso batcher to authenticate // its batches via on-chain events. func isBatchTxAuthorized( tx *types.Transaction, @@ -160,7 +160,7 @@ func isBatchTxAuthorized( logger log.Logger, ) bool { if dsCfg.BatchAuthEnabled() { - // Event-based authentication: TEE batcher must have an auth event + // Event-based authentication: Espresso batcher must have an auth event if authenticatedHashes[batchHash] { return true } diff --git a/packages/contracts-bedrock/interfaces/L1/IBatchAuthenticator.sol b/packages/contracts-bedrock/interfaces/L1/IBatchAuthenticator.sol index bab40b4d62e..6dd9de4b633 100644 --- a/packages/contracts-bedrock/interfaces/L1/IBatchAuthenticator.sol +++ b/packages/contracts-bedrock/interfaces/L1/IBatchAuthenticator.sol @@ -17,14 +17,14 @@ interface IBatchAuthenticator { /// @notice Emitted when a signer registration is initiated through this contract. event SignerRegistrationInitiated(address indexed caller); - /// @notice Emitted when the TEE batcher address is updated. - event TeeBatcherUpdated( - address indexed oldTeeBatcher, - address indexed newTeeBatcher + /// @notice Emitted when the Espresso batcher address is updated. + event EspressoBatcherUpdated( + address indexed oldEspressoBatcher, + address indexed newEspressoBatcher ); /// @notice Emitted when the active batcher is switched. - event BatcherSwitched(bool indexed activeIsTee); + event BatcherSwitched(bool indexed activeIsEspresso); function authenticateBatchInfo(bytes32 commitment, bytes memory _signature) external; @@ -34,11 +34,11 @@ interface IBatchAuthenticator { function owner() external view returns (address); - function teeBatcher() external view returns (address); + function espressoBatcher() external view returns (address); - function registerSigner(bytes memory attestationTbs, bytes memory signature) external; + function registerSigner(bytes memory verificationData, bytes memory data) external; - function activeIsTee() external view returns (bool); + function activeIsEspresso() external view returns (bool); function systemConfig() external view returns (ISystemConfig); @@ -46,5 +46,5 @@ interface IBatchAuthenticator { function switchBatcher() external; - function setTeeBatcher(address _newTeeBatcher) external; + function setEspressoBatcher(address _newEspressoBatcher) external; } diff --git a/packages/contracts-bedrock/scripts/deploy/DeployEspresso.s.sol b/packages/contracts-bedrock/scripts/deploy/DeployEspresso.s.sol index 5c2bfa6f98c..c2a67483839 100644 --- a/packages/contracts-bedrock/scripts/deploy/DeployEspresso.s.sol +++ b/packages/contracts-bedrock/scripts/deploy/DeployEspresso.s.sol @@ -1,33 +1,33 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.25; -import { BaseDeployIO } from "scripts/deploy/BaseDeployIO.sol"; -import { Script } from "forge-std/Script.sol"; -import { DeployUtils } from "scripts/libraries/DeployUtils.sol"; -import { Solarray } from "scripts/libraries/Solarray.sol"; -import { IBatchAuthenticator } from "interfaces/L1/IBatchAuthenticator.sol"; -import { ISystemConfig } from "interfaces/L1/ISystemConfig.sol"; -import { IEspressoNitroTEEVerifier } from "@espresso-tee-contracts/interface/IEspressoNitroTEEVerifier.sol"; -import { IEspressoTEEVerifier } from "@espresso-tee-contracts/interface/IEspressoTEEVerifier.sol"; -import { DeployTEEVerifier } from "lib/espresso-tee-contracts/scripts/DeployTEEVerifier.s.sol"; -import { DeployNitroTEEVerifier } from "lib/espresso-tee-contracts/scripts/DeployNitroTEEVerifier.s.sol"; -import { ProxyAdmin } from "src/universal/ProxyAdmin.sol"; -import { Proxy } from "src/universal/Proxy.sol"; -import { BatchAuthenticator } from "src/L1/BatchAuthenticator.sol"; -import { MockEspressoTEEVerifier } from "test/mocks/MockEspressoTEEVerifiers.sol"; -import { MockEspressoNitroTEEVerifier } from "test/mocks/MockEspressoTEEVerifiers.sol"; +import {BaseDeployIO} from "scripts/deploy/BaseDeployIO.sol"; +import {Script} from "forge-std/Script.sol"; +import {DeployUtils} from "scripts/libraries/DeployUtils.sol"; +import {Solarray} from "scripts/libraries/Solarray.sol"; +import {IBatchAuthenticator} from "interfaces/L1/IBatchAuthenticator.sol"; +import {ISystemConfig} from "interfaces/L1/ISystemConfig.sol"; +import {IEspressoNitroTEEVerifier} from "@espresso-tee-contracts/interface/IEspressoNitroTEEVerifier.sol"; +import {IEspressoTEEVerifier} from "@espresso-tee-contracts/interface/IEspressoTEEVerifier.sol"; +import {DeployTEEVerifier} from "lib/espresso-tee-contracts/scripts/DeployTEEVerifier.s.sol"; +import {DeployNitroTEEVerifier} from "lib/espresso-tee-contracts/scripts/DeployNitroTEEVerifier.s.sol"; +import {ProxyAdmin} from "src/universal/ProxyAdmin.sol"; +import {Proxy} from "src/universal/Proxy.sol"; +import {BatchAuthenticator} from "src/L1/BatchAuthenticator.sol"; +import {MockEspressoTEEVerifier} from "test/mocks/MockEspressoTEEVerifiers.sol"; +import {MockEspressoNitroTEEVerifier} from "test/mocks/MockEspressoTEEVerifiers.sol"; contract DeployEspressoInput is BaseDeployIO { address internal _nitroEnclaveVerifier; - address internal _teeBatcher; + address internal _espressoBatcher; address internal _systemConfig; address internal _proxyAdminOwner; function set(bytes4 _sel, address _val) public { if (_sel == this.nitroEnclaveVerifier.selector) { _nitroEnclaveVerifier = _val; - } else if (_sel == this.teeBatcher.selector) { - _teeBatcher = _val; + } else if (_sel == this.espressoBatcher.selector) { + _espressoBatcher = _val; } else if (_sel == this.systemConfig.selector) { _systemConfig = _val; } else if (_sel == this.proxyAdminOwner.selector) { @@ -43,8 +43,8 @@ contract DeployEspressoInput is BaseDeployIO { return _nitroEnclaveVerifier; } - function teeBatcher() public view returns (address) { - return _teeBatcher; + function espressoBatcher() public view returns (address) { + return _espressoBatcher; } function systemConfig() public view returns (address) { @@ -64,7 +64,10 @@ contract DeployEspressoOutput is BaseDeployIO { address internal _nitroTEEVerifier; function set(bytes4 _sel, address _addr) public { - require(_addr != address(0), "DeployEspressoOutput: cannot set zero address"); + require( + _addr != address(0), + "DeployEspressoOutput: cannot set zero address" + ); if (_sel == this.batchAuthenticatorAddress.selector) { _batchAuthenticatorAddress = _addr; } else if (_sel == this.teeVerifierProxy.selector) { @@ -79,22 +82,34 @@ contract DeployEspressoOutput is BaseDeployIO { } function batchAuthenticatorAddress() public view returns (address) { - require(_batchAuthenticatorAddress != address(0), "DeployEspressoOutput: batch authenticator address not set"); + require( + _batchAuthenticatorAddress != address(0), + "DeployEspressoOutput: batch authenticator address not set" + ); return _batchAuthenticatorAddress; } function teeVerifierProxy() public view returns (address) { - require(_teeVerifierProxy != address(0), "DeployEspressoOutput: tee verifier proxy not set"); + require( + _teeVerifierProxy != address(0), + "DeployEspressoOutput: tee verifier proxy not set" + ); return _teeVerifierProxy; } function teeVerifierProxyAdmin() public view returns (address) { - require(_teeVerifierProxyAdmin != address(0), "DeployEspressoOutput: tee verifier proxy admin not set"); + require( + _teeVerifierProxyAdmin != address(0), + "DeployEspressoOutput: tee verifier proxy admin not set" + ); return _teeVerifierProxyAdmin; } function nitroTEEVerifier() public view returns (address) { - require(_nitroTEEVerifier != address(0), "DeployEspressoOutput: nitro tee verifier proxy not set"); + require( + _nitroTEEVerifier != address(0), + "DeployEspressoOutput: nitro tee verifier proxy not set" + ); return _nitroTEEVerifier; } @@ -108,10 +123,19 @@ contract DeployEspresso is Script { /// @dev ERC-1967 admin slot: keccak256("eip1967.proxy.admin") - 1 /// Used to read the ProxyAdmin address auto-deployed by the OZ v5 TransparentUpgradeableProxy /// that DeployTEEVerifier deploys. - bytes32 internal constant ERC1967_ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; + bytes32 internal constant ERC1967_ADMIN_SLOT = + 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; - function run(DeployEspressoInput input, DeployEspressoOutput output, address deployerAddress) public { - IEspressoTEEVerifier teeVerifier = deployTEEContracts(input, output, deployerAddress); + function run( + DeployEspressoInput input, + DeployEspressoOutput output, + address deployerAddress + ) public { + IEspressoTEEVerifier teeVerifier = deployTEEContracts( + input, + output, + deployerAddress + ); deployBatchAuthenticator(input, output, teeVerifier); checkOutput(output); } @@ -120,10 +144,7 @@ contract DeployEspresso is Script { DeployEspressoInput input, DeployEspressoOutput output, IEspressoTEEVerifier teeVerifier - ) - public - returns (IBatchAuthenticator) - { + ) public returns (IBatchAuthenticator) { address proxyAdminOwner = input.proxyAdminOwner(); if (proxyAdminOwner == address(0)) proxyAdminOwner = msg.sender; @@ -141,10 +162,19 @@ contract DeployEspresso is Script { bytes memory initData = abi.encodeCall( BatchAuthenticator.initialize, - (teeVerifier, input.teeBatcher(), ISystemConfig(input.systemConfig()), proxyAdminOwner) + ( + teeVerifier, + input.espressoBatcher(), + ISystemConfig(input.systemConfig()), + proxyAdminOwner + ) ); vm.broadcast(msg.sender); - proxyAdmin.upgradeAndCall(payable(address(proxy)), address(impl), initData); + proxyAdmin.upgradeAndCall( + payable(address(proxy)), + address(impl), + initData + ); if (proxyAdminOwner != msg.sender) { vm.broadcast(msg.sender); @@ -166,24 +196,24 @@ contract DeployEspresso is Script { DeployEspressoInput input, DeployEspressoOutput output, address deployerAddress - ) - public - returns (IEspressoTEEVerifier) - { + ) public returns (IEspressoTEEVerifier) { address nitroEnclaveVerifier = input.nitroEnclaveVerifier(); if (nitroEnclaveVerifier == address(0)) { return _deployMockTEEContracts(input, output); } - return _deployProductionTEEContracts(input, output, deployerAddress, nitroEnclaveVerifier); + return + _deployProductionTEEContracts( + input, + output, + deployerAddress, + nitroEnclaveVerifier + ); } function _deployMockTEEContracts( DeployEspressoInput input, DeployEspressoOutput output - ) - internal - returns (IEspressoTEEVerifier) - { + ) internal returns (IEspressoTEEVerifier) { address proxyAdminOwner = input.proxyAdminOwner(); if (proxyAdminOwner == address(0)) proxyAdminOwner = msg.sender; @@ -194,7 +224,9 @@ contract DeployEspresso is Script { vm.label(address(nitroMock), "MockEspressoNitroTEEVerifier"); vm.broadcast(msg.sender); - MockEspressoTEEVerifier teeMock = new MockEspressoTEEVerifier(IEspressoNitroTEEVerifier(address(nitroMock))); + MockEspressoTEEVerifier teeMock = new MockEspressoTEEVerifier( + IEspressoNitroTEEVerifier(address(nitroMock)) + ); vm.label(address(teeMock), "MockEspressoTEEVerifier"); // Deploy a dummy ProxyAdmin so the output proxy-admin field is a valid distinct address. @@ -213,10 +245,7 @@ contract DeployEspresso is Script { DeployEspressoOutput output, address deployerAddress, address nitroEnclaveVerifier - ) - internal - returns (IEspressoTEEVerifier) - { + ) internal returns (IEspressoTEEVerifier) { address proxyAdminOwner = input.proxyAdminOwner(); if (proxyAdminOwner == address(0)) proxyAdminOwner = deployerAddress; @@ -224,20 +253,31 @@ contract DeployEspresso is Script { // DeployImplementations uses vm.getCode("src/universal/ProxyAdmin.sol:ProxyAdmin") to avoid // the artifact collision with the OZ v5 ProxyAdmin that this TUP auto-deploys. vm.startBroadcast(msg.sender); - (address teeProxy,) = new DeployTEEVerifier().deploy(proxyAdminOwner, address(0), address(0)); + (address teeProxy, ) = new DeployTEEVerifier().deploy( + proxyAdminOwner, + address(0), + address(0) + ); vm.stopBroadcast(); vm.label(teeProxy, "TEEVerifierProxy"); // NitroTEEVerifier is deployed without a proxy; it stores teeProxy for access control. vm.startBroadcast(msg.sender); - address nitroVerifier = new DeployNitroTEEVerifier().deploy(teeProxy, nitroEnclaveVerifier); + address nitroVerifier = new DeployNitroTEEVerifier().deploy( + teeProxy, + nitroEnclaveVerifier + ); vm.stopBroadcast(); vm.label(nitroVerifier, "NitroTEEVerifier"); vm.broadcast(msg.sender); - IEspressoTEEVerifier(teeProxy).setEspressoNitroTEEVerifier(IEspressoNitroTEEVerifier(nitroVerifier)); + IEspressoTEEVerifier(teeProxy).setEspressoNitroTEEVerifier( + IEspressoNitroTEEVerifier(nitroVerifier) + ); - address teeProxyAdmin = address(uint160(uint256(vm.load(teeProxy, ERC1967_ADMIN_SLOT)))); + address teeProxyAdmin = address( + uint160(uint256(vm.load(teeProxy, ERC1967_ADMIN_SLOT))) + ); output.set(output.teeVerifierProxy.selector, teeProxy); output.set(output.teeVerifierProxyAdmin.selector, teeProxyAdmin); @@ -247,8 +287,11 @@ contract DeployEspresso is Script { } function checkOutput(DeployEspressoOutput output) public view { - address[] memory addresses = - Solarray.addresses(output.batchAuthenticatorAddress(), output.teeVerifierProxy(), output.nitroTEEVerifier()); + address[] memory addresses = Solarray.addresses( + output.batchAuthenticatorAddress(), + output.teeVerifierProxy(), + output.nitroTEEVerifier() + ); DeployUtils.assertValidContractAddresses(addresses); require( output.teeVerifierProxy() != output.teeVerifierProxyAdmin(), diff --git a/packages/contracts-bedrock/snapshots/abi/BatchAuthenticator.json b/packages/contracts-bedrock/snapshots/abi/BatchAuthenticator.json index fd398f1550f..679aaef8d85 100644 --- a/packages/contracts-bedrock/snapshots/abi/BatchAuthenticator.json +++ b/packages/contracts-bedrock/snapshots/abi/BatchAuthenticator.json @@ -39,7 +39,7 @@ }, { "inputs": [], - "name": "activeIsTee", + "name": "activeIsEspresso", "outputs": [ { "internalType": "bool", @@ -265,7 +265,7 @@ }, { "internalType": "address", - "name": "_teeBatcher", + "name": "_espressoBatcher", "type": "address" }, { @@ -446,11 +446,11 @@ "inputs": [ { "internalType": "address", - "name": "_newTeeBatcher", + "name": "_newEspressoBatcher", "type": "address" } ], - "name": "setTeeBatcher", + "name": "setEspressoBatcher", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -496,7 +496,7 @@ }, { "inputs": [], - "name": "teeBatcher", + "name": "espressoBatcher", "outputs": [ { "internalType": "address", @@ -552,7 +552,7 @@ { "indexed": true, "internalType": "bool", - "name": "activeIsTee", + "name": "activeIsEspresso", "type": "bool" } ], @@ -730,17 +730,17 @@ { "indexed": true, "internalType": "address", - "name": "oldTeeBatcher", + "name": "oldEspressoBatcher", "type": "address" }, { "indexed": true, "internalType": "address", - "name": "newTeeBatcher", + "name": "newEspressoBatcher", "type": "address" } ], - "name": "TeeBatcherUpdated", + "name": "EspressoBatcherUpdated", "type": "event" }, { diff --git a/packages/contracts-bedrock/snapshots/storageLayout/BatchAuthenticator.json b/packages/contracts-bedrock/snapshots/storageLayout/BatchAuthenticator.json index 3c63dd38e3b..1b00a5f3516 100644 --- a/packages/contracts-bedrock/snapshots/storageLayout/BatchAuthenticator.json +++ b/packages/contracts-bedrock/snapshots/storageLayout/BatchAuthenticator.json @@ -1,7 +1,7 @@ [ { "bytes": "20", - "label": "teeBatcher", + "label": "espressoBatcher", "offset": 0, "slot": "0", "type": "address" @@ -15,7 +15,7 @@ }, { "bytes": "1", - "label": "activeIsTee", + "label": "activeIsEspresso", "offset": 20, "slot": "1", "type": "bool" diff --git a/packages/contracts-bedrock/src/L1/BatchAuthenticator.sol b/packages/contracts-bedrock/src/L1/BatchAuthenticator.sol index 792c05843d9..c63c38e469c 100644 --- a/packages/contracts-bedrock/src/L1/BatchAuthenticator.sol +++ b/packages/contracts-bedrock/src/L1/BatchAuthenticator.sol @@ -15,7 +15,7 @@ import { ReinitializableBase } from "src/universal/ReinitializableBase.sol"; /// @notice Upgradeable contract that authenticates batch information using the Transparent Proxy /// pattern. -/// Supports switching between TEE and non-TEE batchers. +/// Supports switching between Espresso and fallback batchers. contract BatchAuthenticator is IBatchAuthenticator, ISemver, @@ -27,15 +27,15 @@ contract BatchAuthenticator is /// @custom:semver 1.1.0 string public constant version = "1.1.0"; - /// @notice Address of the TEE batcher whose signatures may authenticate batches. - address public teeBatcher; + /// @notice Address of the Espresso batcher whose signatures may authenticate batches. + address public espressoBatcher; /// @notice Address of the Espresso TEE Verifier contract. IEspressoTEEVerifier public espressoTEEVerifier; /// @notice Flag indicating which batcher is currently active. - /// @dev When true the TEE batcher is active; when false the non-TEE batcher is active. - bool public activeIsTee; + /// @dev When true the Espresso batcher is active; when false the fallback batcher is active. + bool public activeIsEspresso; /// @notice The SystemConfig contract, used to check the paused status. ISystemConfig public systemConfig; @@ -47,7 +47,7 @@ contract BatchAuthenticator is function initialize( IEspressoTEEVerifier _espressoTEEVerifier, - address _teeBatcher, + address _espressoBatcher, ISystemConfig _systemConfig, address _owner ) @@ -60,17 +60,17 @@ contract BatchAuthenticator is // Initialize OwnableWithGuardians with the provided owner address __OwnableWithGuardians_init(_owner); - if (_teeBatcher == address(0)) revert InvalidAddress(_teeBatcher); + if (_espressoBatcher == address(0)) revert InvalidAddress(_espressoBatcher); if (address(_systemConfig) == address(0)) revert InvalidAddress(address(_systemConfig)); if (address(_espressoTEEVerifier) == address(0)) { revert InvalidAddress(address(_espressoTEEVerifier)); } espressoTEEVerifier = _espressoTEEVerifier; - teeBatcher = _teeBatcher; + espressoBatcher = _espressoBatcher; systemConfig = _systemConfig; - // By default, start with the TEE batcher active. - activeIsTee = true; + // By default, start with the Espresso batcher active. + activeIsEspresso = true; } /// @notice Returns the owner of the contract. @@ -83,18 +83,18 @@ contract BatchAuthenticator is return systemConfig.paused(); } - /// @notice Toggles the active batcher between the TEE and non-TEE batcher. + /// @notice Toggles the active batcher between the Espresso and fallback batcher. function switchBatcher() external onlyGuardianOrOwner { - activeIsTee = !activeIsTee; - emit BatcherSwitched(activeIsTee); + activeIsEspresso = !activeIsEspresso; + emit BatcherSwitched(activeIsEspresso); } - /// @notice Updates the TEE batcher address. - function setTeeBatcher(address _newTeeBatcher) external onlyOwner { - if (_newTeeBatcher == address(0)) revert InvalidAddress(_newTeeBatcher); - address oldTeeBatcher = teeBatcher; - teeBatcher = _newTeeBatcher; - emit TeeBatcherUpdated(oldTeeBatcher, _newTeeBatcher); + /// @notice Updates the Espresso batcher address. + function setEspressoBatcher(address _newEspressoBatcher) external onlyOwner { + if (_newEspressoBatcher == address(0)) revert InvalidAddress(_newEspressoBatcher); + address oldEspressoBatcher = espressoBatcher; + espressoBatcher = _newEspressoBatcher; + emit EspressoBatcherUpdated(oldEspressoBatcher, _newEspressoBatcher); } function authenticateBatchInfo(bytes32 commitment, bytes calldata _signature) external { @@ -106,11 +106,11 @@ contract BatchAuthenticator is emit BatchInfoAuthenticated(commitment); } - function registerSigner(bytes calldata attestationTbs, bytes calldata signature) external { + function registerSigner(bytes calldata verificationData, bytes calldata data) external { if (paused()) revert BatchAuthenticator_Paused(); espressoTEEVerifier.registerService( - attestationTbs, signature, IEspressoTEEVerifier.TeeType.NITRO, ServiceType.BatchPoster + verificationData, data, IEspressoTEEVerifier.TeeType.NITRO, ServiceType.BatchPoster ); emit SignerRegistrationInitiated(msg.sender); } diff --git a/packages/contracts-bedrock/test/L1/BatchAuthenticator.t.sol b/packages/contracts-bedrock/test/L1/BatchAuthenticator.t.sol index b4c714ef72a..189c5d74b35 100644 --- a/packages/contracts-bedrock/test/L1/BatchAuthenticator.t.sol +++ b/packages/contracts-bedrock/test/L1/BatchAuthenticator.t.sol @@ -48,7 +48,7 @@ contract BatchAuthenticator_Test is Test { address public unauthorized = address(0xDEAD); address public guardian = address(0xFACE); - address public teeBatcher = address(0x1234); + address public espressoBatcher = address(0x1234); MockSystemConfig public mockSystemConfig; EspressoTEEVerifierMock public teeVerifier; @@ -128,7 +128,7 @@ contract BatchAuthenticator_Test is Test { BatchAuthenticator.initialize, ( IEspressoTEEVerifier(address(teeVerifier)), - teeBatcher, + espressoBatcher, ISystemConfig(address(mockSystemConfig)), proxyAdminOwner ) @@ -149,7 +149,7 @@ contract BatchAuthenticator_Test is Test { BatchAuthenticator.initialize, ( IEspressoTEEVerifier(address(teeVerifier)), - teeBatcher, + espressoBatcher, ISystemConfig(address(mockSystemConfig)), proxyAdminOwner ) @@ -165,8 +165,8 @@ contract BatchAuthenticator_Test is Test { proxyAdmin.upgradeAndCall(payable(address(proxy)), address(implementation), initData); } - /// @notice Test that initialize reverts when teeBatcher is zero. - function test_constructor_revertsWhenTeeBatcherIsZero() external { + /// @notice Test that initialize reverts when espressoBatcher is zero. + function test_constructor_revertsWhenEspressoBatcherIsZero() external { Proxy proxy = new Proxy(address(proxyAdmin)); vm.prank(proxyAdminOwner); proxyAdmin.setProxyType(address(proxy), ProxyAdmin.ProxyType.ERC1967); @@ -194,7 +194,12 @@ contract BatchAuthenticator_Test is Test { bytes memory initData = abi.encodeCall( BatchAuthenticator.initialize, - (IEspressoTEEVerifier(address(0)), teeBatcher, ISystemConfig(address(mockSystemConfig)), proxyAdminOwner) + ( + IEspressoTEEVerifier(address(0)), + espressoBatcher, + ISystemConfig(address(mockSystemConfig)), + proxyAdminOwner + ) ); vm.prank(proxyAdminOwner); @@ -207,8 +212,8 @@ contract BatchAuthenticator_Test is Test { BatchAuthenticator authenticator = _deployAndInitializeProxy(); assertEq(address(authenticator.espressoTEEVerifier()), address(teeVerifier)); - assertEq(authenticator.teeBatcher(), teeBatcher); - assertTrue(authenticator.activeIsTee()); + assertEq(authenticator.espressoBatcher(), espressoBatcher); + assertTrue(authenticator.activeIsEspresso()); } /// @notice Test that switchBatcher can be called by owner or guardian. @@ -220,14 +225,14 @@ contract BatchAuthenticator_Test is Test { emit BatcherSwitched(false); vm.prank(proxyAdminOwner); authenticator.switchBatcher(); - assertFalse(authenticator.activeIsTee()); + assertFalse(authenticator.activeIsEspresso()); // Switch back. vm.expectEmit(true, false, false, false); emit BatcherSwitched(true); vm.prank(proxyAdminOwner); authenticator.switchBatcher(); - assertTrue(authenticator.activeIsTee()); + assertTrue(authenticator.activeIsEspresso()); // Add a guardian. vm.prank(proxyAdminOwner); @@ -239,14 +244,14 @@ contract BatchAuthenticator_Test is Test { emit BatcherSwitched(false); vm.prank(guardian); authenticator.switchBatcher(); - assertFalse(authenticator.activeIsTee()); + assertFalse(authenticator.activeIsEspresso()); // Guardian can switch back. vm.expectEmit(true, false, false, false); emit BatcherSwitched(true); vm.prank(guardian); authenticator.switchBatcher(); - assertTrue(authenticator.activeIsTee()); + assertTrue(authenticator.activeIsEspresso()); // Unauthorized cannot switch. vm.prank(unauthorized); @@ -326,36 +331,36 @@ contract BatchAuthenticator_Test is Test { authenticator.registerSigner(signerData, proofBytes); } - /// @notice Test that setTeeBatcher can only be called by ProxyAdmin owner. - function test_setTeeBatcher_onlyProxyAdminOwner() external { + /// @notice Test that setEspressoBatcher can only be called by ProxyAdmin owner. + function test_setEspressoBatcher_onlyProxyAdminOwner() external { BatchAuthenticator authenticator = _deployAndInitializeProxy(); - address newTeeBatcher = address(0x9999); + address newEspressoBatcher = address(0x9999); // ProxyAdmin owner can set. vm.expectEmit(true, true, false, false); - emit TeeBatcherUpdated(teeBatcher, newTeeBatcher); + emit EspressoBatcherUpdated(espressoBatcher, newEspressoBatcher); vm.prank(proxyAdminOwner); - authenticator.setTeeBatcher(newTeeBatcher); - assertEq(authenticator.teeBatcher(), newTeeBatcher); + authenticator.setEspressoBatcher(newEspressoBatcher); + assertEq(authenticator.espressoBatcher(), newEspressoBatcher); // Unauthorized cannot set. vm.prank(unauthorized); vm.expectRevert(); - authenticator.setTeeBatcher(address(0x7777)); + authenticator.setEspressoBatcher(address(0x7777)); // ProxyAdmin cannot set. vm.prank(address(proxyAdmin)); vm.expectRevert(); - authenticator.setTeeBatcher(address(0x8888)); + authenticator.setEspressoBatcher(address(0x8888)); } - /// @notice Test that setTeeBatcher reverts when zero address is provided. - function test_setTeeBatcher_revertsWhenZeroAddress() external { + /// @notice Test that setEspressoBatcher reverts when zero address is provided. + function test_setEspressoBatcher_revertsWhenZeroAddress() external { BatchAuthenticator authenticator = _deployAndInitializeProxy(); vm.prank(proxyAdminOwner); vm.expectRevert(abi.encodeWithSelector(IBatchAuthenticator.InvalidAddress.selector, address(0))); - authenticator.setTeeBatcher(address(0)); + authenticator.setEspressoBatcher(address(0)); } /// @notice Test upgrade to new implementation with comprehensive state preservation. @@ -375,7 +380,7 @@ contract BatchAuthenticator_Test is Test { // Switch batcher to test boolean flag preservation. vm.prank(proxyAdminOwner); authenticator.switchBatcher(); - assertFalse(authenticator.activeIsTee()); + assertFalse(authenticator.activeIsEspresso()); // Deploy new implementation and upgrade. BatchAuthenticator newImpl = new BatchAuthenticator(); @@ -388,8 +393,8 @@ contract BatchAuthenticator_Test is Test { // Verify state is preserved. assertEq(address(authenticator.espressoTEEVerifier()), address(teeVerifier)); - assertEq(authenticator.teeBatcher(), teeBatcher); - assertFalse(authenticator.activeIsTee()); + assertEq(authenticator.espressoBatcher(), espressoBatcher); + assertFalse(authenticator.activeIsEspresso()); } /// @notice Test that paused() delegates to SystemConfig. @@ -475,20 +480,20 @@ contract BatchAuthenticator_Test is Test { // Owner can still switch batcher while paused. vm.prank(proxyAdminOwner); authenticator.switchBatcher(); - assertFalse(authenticator.activeIsTee()); + assertFalse(authenticator.activeIsEspresso()); } // Event declarations for expectEmit. event BatchInfoAuthenticated(bytes32 indexed commitment); event SignerRegistrationInitiated(address indexed caller); - event TeeBatcherUpdated(address indexed oldTeeBatcher, address indexed newTeeBatcher); - event BatcherSwitched(bool indexed activeIsTee); + event EspressoBatcherUpdated(address indexed oldEspressoBatcher, address indexed newEspressoBatcher); + event BatcherSwitched(bool indexed activeIsEspresso); } /// @notice Fork tests for BatchAuthenticator on Sepolia. contract BatchAuthenticator_Fork_Test is Test { address public proxyAdminOwner = address(0xBEEF); - address public teeBatcher = address(0x1234); + address public espressoBatcher = address(0x1234); MockSystemConfig public mockSystemConfig; EspressoTEEVerifierMock public teeVerifier; @@ -549,7 +554,7 @@ contract BatchAuthenticator_Fork_Test is Test { BatchAuthenticator.initialize, ( IEspressoTEEVerifier(address(teeVerifier)), - teeBatcher, + espressoBatcher, ISystemConfig(address(mockSystemConfig)), proxyAdminOwner ) @@ -593,8 +598,8 @@ contract BatchAuthenticator_Fork_Test is Test { /// @notice Test deployment and initialization on Sepolia fork. function testFork_deployment_succeeds() external view { assertEq(address(authenticator.espressoTEEVerifier()), address(teeVerifier)); - assertEq(authenticator.teeBatcher(), teeBatcher); - assertTrue(authenticator.activeIsTee()); + assertEq(authenticator.espressoBatcher(), espressoBatcher); + assertTrue(authenticator.activeIsEspresso()); assertEq(authenticator.version(), "1.1.0"); // Verify proxy admin. @@ -604,17 +609,17 @@ contract BatchAuthenticator_Fork_Test is Test { /// @notice Test switchBatcher on Sepolia fork. function testFork_switchBatcher_succeeds() external { - assertTrue(authenticator.activeIsTee()); + assertTrue(authenticator.activeIsEspresso()); vm.prank(proxyAdminOwner); authenticator.switchBatcher(); - assertFalse(authenticator.activeIsTee()); + assertFalse(authenticator.activeIsEspresso()); vm.prank(proxyAdminOwner); authenticator.switchBatcher(); - assertTrue(authenticator.activeIsTee()); + assertTrue(authenticator.activeIsEspresso()); } /// @notice Test authenticateBatchInfo on Sepolia fork. @@ -652,7 +657,7 @@ contract BatchAuthenticator_Fork_Test is Test { // Switch batcher vm.prank(proxyAdminOwner); authenticator.switchBatcher(); - assertFalse(authenticator.activeIsTee()); + assertFalse(authenticator.activeIsEspresso()); // Deploy new implementation and upgrade. BatchAuthenticator newImpl = new BatchAuthenticator(); @@ -660,9 +665,9 @@ contract BatchAuthenticator_Fork_Test is Test { proxyAdmin.upgrade(payable(address(proxy)), address(newImpl)); // Verify state is preserved. - assertFalse(authenticator.activeIsTee()); + assertFalse(authenticator.activeIsEspresso()); assertEq(address(authenticator.espressoTEEVerifier()), address(teeVerifier)); - assertEq(authenticator.teeBatcher(), teeBatcher); + assertEq(authenticator.espressoBatcher(), espressoBatcher); } /// @notice Test that contract works with real Sepolia state @@ -672,7 +677,7 @@ contract BatchAuthenticator_Fork_Test is Test { // Verify contract is functional. assertEq(authenticator.version(), "1.1.0"); - assertTrue(authenticator.activeIsTee()); + assertTrue(authenticator.activeIsEspresso()); // Verify the fork is working by testing that we can read the block number. uint256 blockNum = block.number; @@ -683,6 +688,6 @@ contract BatchAuthenticator_Fork_Test is Test { // Event declarations for expectEmit. event BatchInfoAuthenticated(bytes32 indexed commitment); event SignerRegistrationInitiated(address indexed caller); - event TeeBatcherUpdated(address indexed oldTeeBatcher, address indexed newTeeBatcher); - event BatcherSwitched(bool indexed activeIsTee); + event EspressoBatcherUpdated(address indexed oldEspressoBatcher, address indexed newEspressoBatcher); + event BatcherSwitched(bool indexed activeIsEspresso); }